简单网络管理协议(Simple Network Management Protocol,SNMP)是由互联网工程任务组定义的一套网络管理协议。该协议是基于简单网关监视协议(Simple Gateway Monitor Protocol,SGMP)制定的。

SNMP 可以使网络管理员通过一台工作站完成对计算机、路由器和其他网络设备的远程管理和监视。利用 SNMP 协议可以更好地管理和监控网络。管理工作站可以远程管理所有支持该协议的网络设备,如监视网络状态、修改网络设备配置、接收网络事件警告等。

原来只能用telnet这种方法一台一台查看管理,一下子就变成了统一管理,果然懒才是社会进步的一大动力

1.目的

SNMP是一种简单的UDP协议,通常用来管理一些网络设备,例如路由器,交换机等设备;

SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。

统一接口,统一定义,统一方式,秦始皇诚不我欺

2.组成

我们常接触到的分为两部分,管理者NMS和代理Agent,可以简单的认为就是服务端和客户端,另外还有一个关键概念:MIB;

NMS:运行在服务器上的服务,作为一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;
SNMP代理:运行在各个被管理的网络节点之上的程序,负责统计该节点的各项信息,并且负责与NMS交互,接收并执行管理站的命令,上传各种本地的网络信息;
MIB(管理信息库):任何一个被管理的设备都表示成一个对象,并称为被管理的对象。而 MIB 就是被管理对象的集合。它定义了被管理对象的一系列属性,如对象的名称、对象的访问权限和对象的数据类型等。每个设备都有自己的 MIB。MIB 是一种树状数据库,MIB 管理的对象,就是树的端节点,每个节点都有唯一位置和唯一名字。

就像买东西一样,你我商量好,我说名字,你取实物给我,mib就是这种统一命名的对象。

3.通讯方法

常用的通讯方式和我们理解的客户端上报为主的方式不太一样,SNMP最常用的是NMS服务端下发命令,读取客户端数据,然后客户端偶尔会上报一些报警或者异常通知。

此处涉及到了两个关键端口,NMS服务端下发命令通过目的端口UDP161,客户端上报数据通过目的端口162。具体方法详见下一小节。

4.版本

SNMP协议目前在用的有3个版本,分别是V1,V2C,V3,主要差异在方法不同、安全性、消息封装格式、GET效率等方面。
SNMP V1方法:

  • Get(获取参数值,不能遍历table类型的参数组)
  • GetNext(可获取table类型的参数值,一组参数)
  • Set(设置参数值)
  • Trap(发送告警)
  • Response(GET操作的响应信息)

SNMPv1使用团体字(community)来作为身份认证信息。当Agent接收到与其一样的团体字的管理端消息后才会进行消息应答。V1整个消息采用明文传送,通过wireshark/tcpdump等抓包工具可看到明文。

SNMP V2C

  • Get(获取参数值,不能遍历table类型的参数组)
  • GetNext(可获取table类型的参数值,一组参数)
  • GetBulk(GetBulk操作所对应的基本操作是GetNext,通过对Non repeaters和Max repetitions参数的设定,高效率地从Agent获取大量管理对象数据,如果get-request中的参数有一个不存在,请求照样会被正常执行;而在SNMPv1种将收到一个错误消息)
  • Set(设置参数值)
  • Trap(发送告警)
  • inform(相当于Trap的升级版,但是Trap消息发出去之后不会收到响应消息,而inform消息在发出之后能收到响应消息)
  • Response(GET操作的响应信息)。
    V2C也采用团体字认证,整个消息采用明文传送。

SNMP V3

  • Get(获取参数值,不能遍历table类型的参数组)
  • GetNext(可获取table类型的参数值,一组参数)
  • GetBulk(GetBulk操作所对应的基本操作是GetNext,通过对Non repeaters和Max repetitions参数的设定,高效率地从Agent获取大量管理对象数据,如果get-request中的参数有一个不存在,请求照样会被正常执行;而在SNMPv1种将收到一个错误消息)
  • Set(设置参数值)
  • Trap(发送告警)
  • inform(相当于Trap的升级版,但是Trap消息发出去之后不会收到响应消息,而inform消息在发出之后能收到响应消息)
  • Response(GET操作的响应信息)
  • report(当消息不能解密时发送该消息)

V3采用了USM和VACM技术。USM提供了认证和加密功能,VACM确定用户是否允许访问特定的MIB对象以及访问方式。USM(基于用户的安全模型):Agent通过对管理端消息中携带的用户、密码(采用MD5或者SHA加密)、authkey(认证秘钥)以及engineid(agent的标识码)对消息进行鉴权和完整性验证,整个消息体采用DES进行加密。V3数据消息采用密文传送,通过wireshark/tcpdump等抓包工具不可见其实际的内容。

开发

前面都是些基础概念,知道就行,作为程序员,关键还得会用,

通常在开发过程中,有两种方式实现NMS,涉及到的开源软件就是Net snmp,既提供了命令行的操作,也提供了c语言的lib,还提供了Agent的功能。
在Centos上只需要简单的

yum install net-snmp-*

即可完成全部需要的(不需要的)软件安装。

C 语言

直接调用 API 进行 SNMP Trap 处理
所需要的头文件
为了使用 netsnmp 的 API,必须 include 以下这些头文件:
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>

命令行

命令 功能
snmpget 用来查询叶子节点
snmpbulkget snmpget 优化版
snmpgetnext 通过父节点查询叶子节点
snmpwalk 用来取得所有类识别代码 (OID, Object Identifier)
snmpbulkwalk snmpwalk优化版
snmptable 用来查询表对象
snmpset 修改数据
snmpinform 向网管发送一个SNMP trap,并得到相应
snmptrap 向网管发送一个SNMP trap

Agent

直接运行snmpd即可运行为Agent,然后调用一个模拟器即可进行数据获取。

具体的细节内容还很多,我就不一一细说了,因为我也不知道。

网络协议学习-SNMP(一)基础知识相关推荐

  1. Nginx学习(一)——Nginx基础知识

    目录 1.Nginx学习(一)--Nginx基础知识 2.Nginx学习(二)--配置文件.反向代理与负载均衡 3.Nginx搭建HTTPS服务器 一.初试Nginx 一.下载安装 1.安装必要的一些 ...

  2. 计算机网络基础心得体会结尾,学习《计算机网络基础知识》心得体会

    学习<计算机网络基础知识>心得体会 ... 如今已经是信息时代,作为主流信息工具的网络越来越重 要,网络是信息的载体,是人们传递感情的工具.随着信息社会 的不断发展,网络的应用将会更加广泛 ...

  3. BGP协议学习笔记——BGP基础

    BGP协议学习笔记--BGP基础(BGP概念.BGP报文.BGP状态机.BGP关系建立.BGP路由通告) 说明:本文学习笔记整理自网络.华为公开产品文档.华为公开PPT及部分的自我理解 一.BGP简介 ...

  4. kpu 处理器_深度学习及 KPU 基础知识

    深度学习及 KPU 基础知识 1. 阅读完本章文档可以了解什么? 了解深度学习一些基础内容 了解 K210 内部 KPU 的特性 了解 KPU 使用过程中可能会遇到的问题,以及问题的解决方法 2. 概 ...

  5. 学完计算机网络基础及应用的感想,学习《计算机网络基础知识》心得体会

    学习<计算机网络基础知识>心得体会 至于其他的比如网络安全的知识,的确很有用,但不是我兴趣所在,有杀毒软件就够了. 通过学习计算机网络这门课程,使我更加对网络刮目相看了! . 学习< ...

  6. 深度学习图像识别:基础知识与环境搭建

    深度学习图像识别:基础知识与环境搭建 1. 深度学习的基本原理 什么是人工智能? 通过学习掌握了某中技能的机器,我们认为它具备了人工智能 什么是深度学习? 深度学习的概念源于人工神经网络的研究: 含多 ...

  7. JS学习笔记——入门基础知识总结

    JS入门基础知识总结1 前言 基础背景知识 一.产生历史: 二.特点: 三.应用方向: 四.Javascript组成: JavaScript书写使用方式 一.行内式(了解即可,项目中不使用,日常练习尽 ...

  8. JNI学习开始篇 基础知识 数据映射及学习资料收集

    JNI学习开始篇 基础知识 数据映射及学习资料收集 JNI介绍 JNI(Java Native Interface) ,Java本地接口. 用Java去调用其他语言编写的程序,比如C或C++. JNI ...

  9. OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并

    OpenCV与图像处理学习一--图像基础知识.读入.显示.保存图像.灰度转化.通道分离与合并 一.图像基础知识 1.1 数字图像的概念 1.2 数字图像的应用 1.3 OpenCV介绍 二.图像属性 ...

最新文章

  1. html表单的创建和css的构成
  2. 程序员福音-定时提醒bat
  3. MongoDB入门简单介绍
  4. Linux压缩和解压缩命令汇总(tar命令汇总)
  5. 安卓学习笔记16:常用控件 - 标签
  6. 什么是c语言内存编码,c语言内存泄露示例解析
  7. IT民工系列——通用7130芯片视频采集卡 SDK 兼容任意天敏 宏视 等板卡
  8. 时间序列分析工具箱—— h2o + timetk
  9. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_05-vuejs研究-vuejs基础-v-text指令...
  10. JQuery Dialog(转)
  11. SLAM学习笔记-------------(九)后端1
  12. labview卸载重装工具(NI卸载工具)
  13. 火爆全网,搜狐CEO张朝阳手推E=mc²,CEO当太久都忘了他是MIT物理博士
  14. 面向协议编程,灵丹妙药或是饮鸩止渴?
  15. zzulioj1116: 删除元素
  16. 深度分析DD哪些数据会引起国安注意?
  17. Pano React Native SDK 来了!快速实现移动端音视频和白板
  18. 飞冰 前端开发的一些坑
  19. Vue国际化处理 vue-i18n 以及项目自动切换中英文
  20. Linux配置多网口IP地址,linux配置ip 多个网口

热门文章

  1. [转]链接器都干了些什么?
  2. BLOG系统设计文档
  3. 目标检测 YOLO 系列模型
  4. WPF和WinForm的区别
  5. 云计算核心技术剖析》迷你书连载二 - 云计算的架构
  6. 耗时两个月开发的弯管机三维模型自动转档软件
  7. Windows7 Update 无法更新补丁解决方法,IE11浏览器也可以通过更新系统自动安装
  8. 基于stm32的空气质量检测净化系统,检测温湿度和pm10和 pm2.5,资料包含(设计文档,源码,pcb电路)。
  9. CSS3动画实战之多关键帧实现无限循环动效的时间间隔
  10. php 控件 手机触控,如何通过电脑控制手机