参考:
https://download.csdn.net/download/qq_31567335/10213200
简介随着一个组织的互联网设备越来越多,而且各类越来越丰富。如何高效的管理这些设备就成为了一个重要的问题。
基于tcp/ip的网络管理包含两个角色:网络管理站(也叫管理进程,manager)和被管理的网络单元(也叫代理,agent)。管理站和被管理的网络单元有两种通信方式,manager向agent发送命令,agent进行回应。或者agent主动向manager上报消息。
基于tcp/ip的网络管理包含以下三个基本组成部分:
1.MIB(manager information base) 就是一个数据库,表明每个网络单元存储哪些变量可以被manager查询和设置
2.SMI(structure of management information) 用来定义数据结构类型,只有定义好了数据类型,agent才知道如何将值存入MIB,双方也才能够正确理解所交流的信息。
3.一个manager和agent用来交流信息的协议,这就是SNMP。
协议
snmp定义了5种消息。
1.get-request:get one or more variables.
2.get-next-request:fetch the next variable after one or more speceified variables.
3.set-request:set the value of one or more variables.
4.get-response:the reply of get-request,get-next-request,set-request.
5.trap:notify the manager when something happens.
agent的udp端口是161,manager的udp端口是162.
SNMP报文的格式如下:
值得注意的是,不同于之前所学习的协议,SNMP协议中的字段并没有指定大小。这是因为SNMP所用编码方式的不同,长度会随变量的不同而发生改变。
PDU是protocol data unit的简称,表示的就是一个消息。0-4总共5个状态分别表示SNMP的5种消息类型。
SMI OID MIB
我觉得这几个概念需要重点描述一下,看书的时候费了一些劲才弄懂。他们分别对应的全称如下。
SMI(Structure of management information),OBI(object identifiers),MIB(management information base)
SMI定义了协议能够使用的所有的数据类型。有INTEGER,OCTET,DisplyString,OBJECT IDENTIFIER,IpAddress,Counter,TimeTicks,SEQUENCE等等....只有这些被定义了的数据类型才能够正确的被agent和manager理解。
其中定义的一个非常重要的数据结构是OID(OBJECT IDENTIFIER)。OID的作用就是给每个MIB数据库中的变量一个唯一的编号,有了这个编号,就可以方便的去查询或者设置。某个变量。而且这种编号是层次结构的,如下面的两张图片所示。
可能要问,为什么要使用这种复杂的层次结构,而不使用简单的整数1,2,3,4....来编号呢。原因也很明白,层次结构扩展性强,而且便于管理。而且可以为不同的企业分配不同的空间,让他们定义自己的变量空间。图中的private/enterprise这个区间就是分配给不同的企业的。这个层次结构是由一个统一的组织机构来进行维护的,就像之前学习过的域名系统一样。这样可以保证不同企业实现的软件的兼容性。
节点上的数字是在协议中传递的数据结构,而字母是用来方便人阅读的,跟ip和域名的关系非常相似。(没弄明白的是,为什么所有的OID都以iso.org.dod.internet开头?)
对实例的标识
SNMP要引用MIB数据库的每个变量,都必须被唯一标识。SNMP只标识叶子节点,而不会对表(table)的整行或整列进行操作。
对于简单的变量,表示方法就是在后面加一个0,比如说udpInDatagrams在OID层次结构中,表示为1.3.6.1.2.7.1,如果SNMP要引用这个变量,就表示为1.3.6.1.2.7.1.0。
而对于表中的变量,表示格式是这样的:OID+列号+完整的数据。举例如下:
有一个Table,表示UDP监听列表:
那么其中的每个变量表示出来的结果就如下面这个表所示:
而且还有需要注意的两点,数据库中的变量是按照字典序排序的:
1.对于同一行数据,前面的列的变量排前面。(因为前面的列的列号小)
2.不同的行也是按字典序排序的。
Traps
trap的PDU类型是4。
企业表示设备制造商相关信息。
代理地址指定就是运行代理的设备的IP地址。
trap类型如图所示:
特定代码:当trap类型为6时,特定代码用来表示设备厂商自定义的trap类型。
时间戳:是一个TimeTicks值。表明自系统启动以来所经过的时间(以1%秒为单位进行衡量)
名称,值:要上报的变量的名称和值
ASN.1 和 BER
ASN.1是RFC中用来表示MIB数据库中变量和消息的语法。没看懂。
BER是对数据的和具体编码方式。书中未详细介绍。