【15】TCP/IP协议族详解-SNMP协议
本博客参考自《TCP/IP详解卷一:协议》
本文主要介绍SNMP-简单网络管理协议
1. 为什么需要网络管理
- 随着网络技术的发展,网络设备越来越多,这些设备不仅种类繁杂而且来自不同的厂商。各个厂商的设备又有着细微的差异,这就造成了管理的不方便,所以急须统一管理的方法。
2. TCP/IP中的网络管理
- TCP/IP中的网络管理分为两个部分:网络管理站(也叫管理进程)和被管的网络单元(也叫被管设备)。被管设备的种类繁多,有路由器、X终端、终端服务器和打印机等。管理站一般是工作站。
- 被管设备端与管理端有关的的软件叫做代理进程(agent)或代理进程。
- 管理进程可以发送请求,获取被管设备的参数,或改变被管设备的某个参数。代理进程也可以主动发送消息告知管理进程相关参数的变化。
- TCP/IP中的网络管理分为三个部分:
- 管理信息库MIB(Management Information Base),MIB包含所有代理进程的所有被查询或改变的参数。
- 公用的结构和表示符号-管理信息结构SMI(Structure of Management Information)。
- 管理进程和代理进程之间的通信协议,SNMP(Simple Network Management Protocol)。
3.SNMP协议
3.1 报文格式
- get-request操作-从代理进程提取一个或多个参数值
- get-next-request操作-从代理进程提取一个或多个参数值的下一个参数值。
- set-request操作-设置代理进程的一个或多个参数值。
- get-response操作-返回一个或多个参数值。这个操作是代理进程发出的。它是前面3个操作的响应操作。
- trap操作-代理进程主动发出的,通知管理进程某些事将发生。
- 由于发送和接收的端口不同,所以同一系统可以既作为管理进程又作为代理进程。
- SNMP报文的编码为ASN.1和BER
SNMP的5种操作可以表示为如下的形式:
3.2 报文字段
-
版本-该字段的值是通过SNMP的版本值-1得到的。SNMPv1此处为0。
-
共同体字段-字符串。这是管理进程和代理进程之间的口令,是明文格式。默认为public
-
PDU类型-protocol data unit协议数据单元,标志操作的类型
-
请求标识-get、get-next和set操作,请求标识由管理进程设置,然后代理进程在get-response中返回,目的是使得请求和应答匹配。
-
差错状态字段-由代理进程设置,指定差错发生。
-
差错索引字段-该字段是一个整数值,指明当差错发生时,参数是哪个,有代理进程设置,只有在发生差错2,3,4时,才会设置。
3.3 管理信息结构
数据类型 | 描述 |
---|---|
INTEGER | 整形变量,有些有范围限制,有些没有范围限制 |
OCTER STRING | 0或多个8bit字节,每个字节值在0-255之间 |
DisplayString | 0到多个8bit字节,但是每个字节必须时ASCII编码 |
NULL | 代表相关的变量没有值 |
IpAddress | 4字节长度的OCTER STRING,以网络序表示IP地址。每个地址代表IP地址的一个字段 |
Counter | 非负整数。范围0~ 2 32 2^{32} 232-1。达到最大值之后归0 |
Gauge | 非负整数。取值范围0到4294976295。到达最大值后锁定 |
TimeTicks | 时间计时器 |
SEQUENCE | 类似c语言中的结构体 |
SEQUENCE OF | 这是一个向量,其所有元素都具有相同的类型。 |
管理信息结构的举例:名为udpTable的UDP监听表是一个向量类型,每一个变量都是一个二元组(SEQUENCE)UdpEntry
3.3.1 对象标识符
-
对象标识符是一种数据类型,它指明一种“授权”命名的对象。这些标识符是由一些权威管理机构分配的。
-
标识符是一个整数序列,以点(.)分隔。这些整数构成一个树形结构,类似DNS。对象标识符从树的顶部开始,顶部没有标识符。
-
SNMP中用到的标识符都是从1.3.6.1.2开始的。树上的每个节点都有一个中文名字。1.3.6.1.2就是iso.org.dod.internet.memt.mib
4 管理信息库
所谓管理信息库是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合。
4.1 实例标识
当对MIB变量进行操作,如查询和设置变量的值时,必须对MIB的每个变量进行标识。首先只有叶子结点时可操作的。SNMP没法处理表格中的一整行或一整列。
4.1.1 简单变量
对简单变量的处理办法时通过在其对象标识后面添加".0"来处理,例如udp组结构中的udpInDatagrams变量,它的对象标识是1.3.6.1.2.1.7.1,它的实例标识符为1.3.6.1.2.1.7.1.0。它的对应的文字名字为iso.org.dod.internet.mgmt.mib.udp.udpInDatagrams.0,可以缩写为udpInDatagrams.0。
4.1.2 表格变量
表格变量比较复杂,需要通过例子说明,对于UDP监听表,MIB定义了包含两个变量的联合索引。这两个变量是udpLocalAddress(IP地址)和udpLocalPort(端口),假如UDP监听表如下图所示:
则实例标识可以表示为:
通常MIB表格会根据其对象标识符进行字典排序
- 多个变量,先列后行
- 同一变量,值从小到大
4.2 UDP组
UDP组的结构如下图所示
UDP组由四个简单变量和一个由两个简单变量组成的表格表示。
注意事项:
- 如果R/W列为空,则表示变量只读,“.”表示可读可写。
- 如果变量是INTEGET类型并且由约束范围,标出其上下限。
UDP组下的简单变量:
UdpTable中的变量:
4.3 ip组
ip组定义了很多简单变量和3个表格变量
下图是ip组中的简单变量:
ip地址表:ipaddrTable
ip路由表:ipRouteTable
ip地址转换表:ipNetToMediaTable