wangzhanf@hotmail.com2004-embedTCP_IP协议_SNMP:简单网络管理协议王占峰wangzhanf@hotmail.comwangzhanf@hotmail.com2004-embed用途随着网络的数量越来越多。而网络中的设备来自各个不同的厂家,如何管理这些设备就变得十分重要。基于TCP/IP的网络管理包含两个部分:网络管理站(也叫管理进程,manager)和被管的网络单元(也叫被管设备)。被管设备种类繁多,例如:路由器、X终端、终端服务器和打印机等。这些被管设备的共同点就是都运行TCP/IP协议。被管设备端和管理相关的软件叫做代理程序(agent)或代理进程。管理站一般都是带有彩色监视器的工作站,可以显示所有被管设备的状态(例如连接是否掉线、各种连接上的流量状况等)。管理进程和代理进程之间的通信可以有两种方式。一种是管理进程向代理进程发出请求,询问一个具体的参数值(例如:你产生了多少个不可达的ICMP端口?)。另外一种方式是代理进程主动向管理进程报告有某些重要的事件发生(例如:一个连接口掉线了)。管理进程除了可以向代理进程询问某些参数值以外,它还可以按要求改变代理进程的参数值(如:把默认的IPTTL值改为64)。wangzhanf@hotmail.com2004-embed基于TCP/IP的网络管理组成部分1)一个管理信息库MIB(ManagementInformationBase)。管理信息库包含所有代理进程的所有可被查询和修改的参数。1991]定义了第二版的MIB叫做MIB-II。2)关于MIB的一套公用的结构和表示符号。叫做管理信息结构SMI(StructureofManagementInformation)。例如:SMI定义计数器是一个非负整数,它的计数范围是0~4294967295,当达到最大值时,又从0开始计数。3)管理进程和代理进程之间的通信协议,叫做简单网络管理协议SNMP(SimpleNetworkManagementProtocol)。尽管可以在运输层采用各种各样的协议,但是在SNMP中,用得最多的协议还是UDP。常提到的SNMP叫做SNMPv1,或者就叫做SNMP,1993年定义的SNMP叫做第二版SNMP(SNMPv2)wangzhanf@hotmail.com2004-embed协议关于管理进程和代理进程之间的交互信息,SNMP定义了5种报文:1)get-request操作:从代理进程处提取一个或多个参数值。2)get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值3)set-request操作:设置代理进程的一个或多个参数值。4)get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。5)trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。前面的3个操作是由管理进程向代理进程发出的。后面两个是代理进程发给管理进程的wangzhanf@hotmail.com2004-embedSNMP的5种操作管理进程发出的前面3种操作采用UDP的161端口。代理进程发出的Trap操作采用UDP的162端口。由于收发采用了不同的端口号,所以一个系统可以同时为管理进程和代理进程wangzhanf@hotmail.com2004-embedSNMP报文的格式wangzhanf@hotmail.com2004-embedSNMP报文的格式版本字段是0。该字段的值是通过SNMP版本号减去1得到的。0代表SNMPv1。PDU即协议数据单元,也就是分组共同体字段是一个字符串。这是管理进程和代理进程之间的口令,是明文格式。默认的值是public。对于get、get-next和set操作,请求标识由管理进程设置,然后由代理进程在get-response中返回。差错状态字段是一个整数,它是由代理进程标注的,指明有差错发生。差错索引字段是一个整数偏移量,指明当有差错发生时,差错发生在哪个参数。它是由代理进程标注的,并且只有在发生noSuchName、readOnly和badValue差错时才进行标注。wangzhanf@hotmail.com2004-embedwangzhanf@hotmail.com2004-embedSNMP数据类型NTEGER。一个变量虽然定义为整型,但也有多种形式。有些整型变量没有范围限制,有些整型变量定义为特定的数值(例如,IP的转发标志就只有允许转发时的1或者不允许转发时的2这两种),有些整型变量定义为一个特定的范围(例如,UDP和TCP的端口号就从0到65535)。•OCTERSTRING。0或多个8bit字节,每个字节值在0~255之间。对于这种数据类型和下一种数据类型的BER编码,字符串的字节个数要超过字符串本身的长度。这些字符串不是以NULL结尾的字符串。•DisplayString。0或多个8bit字节,但是每个字节必须是ASCII码。在MIB-II中,所有该类型的变量不能超过255个字符(0个字符是可以的)。•OBJECTIDENTIFIER。•NULL。代表相关的变量没有值。例如,在get或get-next操作中,变量的值就是NULL,因为这些值还有待到代理进程处去取。•IpAddress。4字节长度的OCTERSTRING,以网络序表示的IP地址。每个字节代表IP地址的一个字段。•PhysAddress。OCTERSTRING类型,代表物理地址(例如以太网物理地址为6个字节长度)。wangzhanf@hotmail.com2004-embedSNMP数据类型•Counter。非负的整数,可从0递增到232-1(4294976295)。达到最大值后归0。•Gauge。非负的整数,取值范围为从0到4294976295(或增或减)。达到最大值后锁定,直到复位。例如,MIB中的tcpCurrEstab就是这种类型的变量的一个例子,它代表目前在ESTABLISHED或CLOSE_WAIT状态的TCP连接数。•TimeTicks。时间计数器,以0.01秒为单位递增,但是不同的变量可以有不同的递增幅度。所以在定义这种类型的变量的时候,必须指定递增幅度。例如,MIB中的sysUpTime变量就是这种类型的变量,代表代理进程从启动开始的时间长度,以多少个百分之一秒的数目来表示。•SEQUENCE。这一数据类型与C程序设计语言中的“structure”类似。一个SEQUENCE包括0个或多个元素,每一个元素又是另一个ASN.1数据类型。例如,MIB中的UdpEntry就是这种类型的变量。它代表在代理进程侧目前“激活”的UDP数量(“激活”表示目前被应用程序所用)。在这个变量中包含两个元素:1)IpAddress类型中的udpLocalAddress,表示IP地址。2)INTEGER类型中的udpLocalPort,从0到65535,表示端口号。•SEQUENDEOF。这是一个向量的定义,其所有元素具有相同的类型。如果每一个元素都具有简单的数据类型,例如是整数类型,那么我们就得到一个简单的向量(一个一维向量)。但是我们将看到,SNMP在使用这个数据类型时,其向量中的每一个元素是一个SEQUENCE(结构)。因而可以将它看成为一个二维数组或表。wangzhanf@hotmail.com2004-embed表格形式的udpTable变量wangzhanf@hotmail.com2004-embed对象标识对象标识是一种数据类型,它指明一种“授权”命名的对象。“授权”的意思就是这些标识不是随便分配的,它是由一些权威机构进行管理和分配的。对象标识是一个整数序列,以点(“.”)分隔。这些整数构成一个树型结构,类似于DNS或Unix的文件系统。对象标识从树的顶部开始,顶部没有标识,以root表示(这和Unix中文件系统的树遍历方向非常类似)。SNMP中的树型结构:所有的MIB变量都从1.3.6.1.2.1这个标识开始。树上的每个结点同时还有一个文字名。例如标识1.3.6.1.2.1就和iso.org.dod.internet.memt.mib对应。这主要是为了人们阅读方便。在实际应用中,也就是说在管理进程和代理进程进行数据报交互时,MIB变量名是以对象标识来标识的,当然都是以1.3.6.1.2.1开头的。wangzhanf@hotmail.com2004-embed对象标识