SNMP协议介绍
概述
snmp全称Simple Network Management Protocol
,中文名为简单网络管理协议
,属于应用层协议。
版本
SNMP目前共有v1、v2、v3三个版本
-
v1
SNMP的最初版本
-
v2c
在v1的基础上增加 ·共同体· 字段(community,实质上是密码)
-
v3
增加认证和对密文传输的支持
架构
SNMP协议主要由两个部分组成:SNMP管理站(NMS)
、SNMP代理(Agent)
。
SNMP管理站:这是一个中心节点,负责手记维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员,相当于大脑
的角色。
SNMP代理:代理运行在各个被管理的网络节点上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令上传各种本地的网络信息。
传输层协议
SNMP传输层协议选用udp
。 SNMP采用UDP 161端口接收和发送请求,162端口接收trap,执行SNMP的设备缺省都必须采用这些端口。SNMP消息全部通过UDP端口161接收,只有Trap信息采用UDP端口162。
操作方式
SNMP提供了三种操作方式:
-
Get操作
管理员读取设备数据
-
Set操作
管理员设置设备数据
-
Trap操作
设备在重要状况改变时主动向管理员通报事件的发生
协议数据单元PDU
SNMP定义了5中PDU对应上述3种操作,
-
get-request
从代理(本质上是设备)获取一个或多个参数值
-
get-next-request
从代理紧接着取出下一个参数值
-
set-request
设置代理一个或多个参数值
-
get-response
对上述三种请求的响应
-
trap
设备主动上报的数据
-
get-bulk(v2c)
GetBulk操作所对应的基本操作是GetNext,通过对Non repeaters和Max repetitions参数的设定,高效率地从Agent获取大量管理对象数据,如果get-request中的参数有一个不存在,请求照样会被正常执行;而在SNMPv1种将收到一个错误消息
-
inform(v2c)
相当于Trap的升级版,但是Trap消息发出去之后不会收到响应消息,而inform消息在发出之后能收到响应消息
SNMP报文结构
报文结构如下
-
版本号
表明当前使用的版本,管理站和代理之间的版本号必须相同才能通信
-
团体名
团体(community)是基本的安全机制,用于实现SNMP网络管理员访问SNMP管理代理时的身份验证。类似于密码,默认值为 public。团体名(Community name)是管理代理的口令,管理员被允许访问数据对象的前提就是网络管理员知道网络代理的口令。
-
PDU
数据载体
详细的报文结构如下:
表1: pdu类型
PDU类型 | 名称 |
---|---|
0 | get-request |
1 | get-next-request |
2 | get-response |
3 | set-request |
4 | trap |
表2: 差错状态
差错状态 | 名字 | 描述 |
---|---|---|
0 | noError | 无错误 |
1 | tooBig | 代理无法将回答装入到一个SNMP报文中 |
2 | noSuchName | 操作指明了一个不存在的变量 |
3 | badValue | 一个set操作指明了一个无效值或无效语法 |
4 | readOnly | 管理进程试图修改一个只读变量 |
5 | genErr | 某些其他差错 |
表3: trap类型
trap类型 | 名字 | 说明 |
---|---|---|
0 | coldStart | 代理进行了初始化 |
1 | warmStart | 代理进行了重新初始化 |
2 | linkDown | 一个接口从工作状态变为故障状态 |
3 | linkUp | 一个接口从故障状态变为工作状态 |
4 | authenticationFailure | 从SNMP管理进程接收到具有一个无效共同体的报文 |
5 | egpNeighborLoss | 一个EGP相邻路由器变为故障状态 |
6 | enterpriseSpecific | 代理自定义事件,需要用后面的“特定代码”来指明 |
MIB管理信息库
管理信息(MIB)库可以理解成为agent维护的管理对象数据库,MIB中定义的大部分管理对象的状态和统计信息都可以被NMS访问。MIB是一个按照层次结构组织的树状结构,每个被管对象对应树形结构的一个叶子节点,称为一个object,拥有唯一的对象标识符(oid),OID由树上的一系列整数组成,整数之间用点( . )分隔开
M I B被划分为若干个组,如system、interfaces、 at(地址转换)和ip组等。iso.org.dod.internet.private.enterprise( 1 . 3 . 6 . 1 . 4 . 1)这个标识,是给厂家自定义而预留的,比如华为的为1.3.6.1.4.1.2011,华三的为1.3.6.1.4.1.25506。
mib树有点类似linux文件系统各个snmp设备中的mib前缀都是一样的
注意⚠️:当网络管理协议在报文中使用MIB变量时,每个变量名后还要加一个后缀,以作为该变量的一个实例。如ipInReceives的实例数字表示为:1.3.6.1.2.1.4.3.0
snmp开发
windows和mac都内置snmp服务,默认都是不开启的
-
windows开启snmp
https://jingyan.baidu.com/article/7f766dafe17d394101e1d0f9.html
-
mac开启snmp
-
golang snmp sdk
-
免费的MIB 浏览器