SNMP帧中LENGTH字段的最大大小是多少?

时间:2013-06-16 19:12:37

标签: snmp wireshark

实现SNMP v1解码器并使用一些Wireshark捕获,我可以看到有时BER的长度字段用一个字节编码,其他时间用两个字节编码。

读取BER规则,如果更有意义的位设置为1,则必须使用下一个字节扩展长度值,以表示大于255的值。

所以,如果firt字节是0x81,而下一个字节是0x9F,那么扩展的Length字段应该取0x9F值... OK

我的问题是: 如果第二个字节是0x9F,则更有意义的位再次为1。

Wireshark只占用这个长度的两个字节。

为什么在这种情况下,Length的大小只有两个字节?

长度字段限制为2个字节?

感谢。

2 个答案:

答案 0 :(得分:4)

根据BER规则,长度字段可以是多个字节(远远超过2),

http://en.wikipedia.org/wiki/KLV

  

长度字段

     

Key的字节后面是字节   长度字段,它将告诉您跟随长度的字节数   字段并组成Value部分。编码有四种   对于长度字段:1字节,2字节,4字节和基本编码规则   (BER)。 1字节,2字节和4字节变体非常简单:   从字节中生成一个无符号整数,该整数是   后面的字节数。

     

BER长度编码更多一点   复杂但最灵活。如果长度为第一个字节   字段没有高位设置(0x80),然后是那个单字节   表示0到127之间的整数,表示数字   紧随其后的值字节。如果设置了高位,那么   低七位表示自己制作的字节数   一个长度的领域。

     

例如,如果是BER长度字段的第一个字节   是二进制10000010,表示接下来的两个字节组成   一个整数,然后表示后面有多少个Value字节。   因此,总共需要三个字节来指定长度。

“如果第二个字节是0x9F,则更有意义的位再次为1。”这是一个问题吗?只有字节中的第一个字节确定用于确定长度的后续字节数。所以你永远不需要关心第二个字节的最高位。从不。

Wireshark如何表示字节并不是非常关键。除非Wireshark显示错误的长度值,否则你不应该太注意它。

答案 1 :(得分:0)

我补充说SNMP(usually)使用UDP数据报进行传输,限制为65535字节,即0xffff。最多需要2个字节来编码长度。