【答案解析】[解析] 基本编码规则(BER)是将ASN.1表示的抽象类型值表示成字节字符串的方法,它采用“类型-长度-值(TLV,Type-Length-Value)”结构。其中,值部分可以进一步递归编码为TLV结构。例如,图1中第1个16进制数“30”表示ASN.1的序列类型,第2个16进制数“29”表示该序列的值长度为(29)16=(41)10个字节,即从其后面的“02”至报文的最后一个“00”,共有41个字节的数据(值)。而第3、第4、第5个16进制数“02(类型)”、“01(长度)”、“01(值)”组成一个表示SNMP版本号的BER编码,它是前面SEQUENCE序列的一个递归编码。
在图1中,INTEGER表示正数(或负数,或0)类型;STRING表示位组串类型;getreq是用户自定义的数据类型;objectID表示对象标识符(作为对象的唯一标识),它是ASN.1的一种应用类型;Null表示空类型,它主要用于GetRequest、GetNextRequest、GetBulkRequest报文变量绑定表的值部分。当代理接收时将忽略它,在返回的GetResponse报文中设置为变量的实际值。
在SNMP管理中,管理站和代理之间交换的管理信息称为SNMP报文。一个SNMP报文由版本号、团体名和协议数据单元(PDU)3部分组成。其中,版本号是指SNMP的版本,其值为0表示SNMPv1,值为1表示SNMPv2,值为2表示SNMPv3。由图1报文注释信息中“Ver=1”,表示该SNMP报文段的版本为SNMPv2。简单网关监控协议(SGMP)是SNMPv1的前身。
团体名用于身份认证,其默认值为public。RFC1157文件定义的SNMPv1的认证和控制机制就是这种最基本的团体名验证方式。
SNMPv1共有5种管理操作(get、getnext、set、trap、response),但只有3种PDU格式。因为管理站发出的3种请求报文GetRequest(0A0H)、GetNextRequest(0A1H)和SetRequest(0A3H)采用的PDU格式是一样的;而代理对这3种请求报文均以GetResponse PDU(0A2H)格式应答;代理陷入报文采用专用的trap PDU(0A4H)格式。
SNMPv2协议共定义了7种报文,分别是GetRequest(0A0H)、GetNextRequest(0A1H)、GetBulkRequest(0A5H)、SetRequest(0A3H)、InformRequest(0A6H)、Response(0A2H)和Trap(0A7H)。其中,GetRequest、GetNextRequest、SetRequest、InformRequest和Trap 5种报文具有相同的PDU格式;Response报文采用一种PDU格式;GetBulkRequest报文采用一种专用的PDU格式。图1报文注释信息中getreq表示该报文的PDU类型,它是GetRequest(0A0H)类型的简写。
通常,SNMPv1/v2的请求/响应报文的格式由PDU类型、请求标识、错误状态、错误索引和变量绑定表5个字段组成。根据BER编码的基本规则以及题图中给出的报文解释可知,该SNMPv2报文段的报文格式及其具体值如图2所示。