小弟在看天君Blog里的SNMP的学习笔记时遇到问题:
5.3.2 对象标识ObjectID编码
SNMP服务器维护的所有管理信息库(MIB)对象采用ObjectID表示,如,1.3.6.1.2.1.1.1表示MIB库中的设备描述SysDesc变量,其编码规则如下:
objectID::=0x06 length {subidentifier}* (1)
subidentifier::= {leadingbyte}* lastbyte (2)
leadingbyte::=1 7bitvalue (3)
lastbyte::=0 7bitvalue (4)
首两个ID被合并为一个字节X*40+Y (5)
虽然规则很多,但由于大多数子对象标识在0~127,只需按规则(1)、(5)即可;当子对象标识大于127,则按规则(2)、(3)、(4)将其分解为多个字节,最后一个字节的高位为零,其余字节的高位为一。如:1.3.6.1.810.1,根据规则(5),首两个子对象标识1.3被合并为2B(1 3 40+3=43);子对象标识810超过127,根据规则(2)、(3)、(4)将其拆分为两个字节86 2A (810=11 0010 1010==> 1000 0110 0010 1010);整个MIB被编码为:0x06 0x06 0x2b 0x06 0x010x86 0x2a 0x01。
完全想不通为什么810最后会编成以86开头的编码862A,2A没变,可剩下的11是怎么变成1000 0110的?为什么不是1000 0011呢?规则里只说leadingbyte加1啊?!还有840也是变成8648,难道这些大点的数都固定以86开头,而只保留原来末尾一个字节吗???!
强烈盼望牛人解答!!! |