一个我无法回答的简单问题。
我知道可以在PDU中发送带有多个OID的GET请求。在一个请求中,一个PDU中可以请求多少个OID? SNMP有限制吗?在UDP?
答案 0 :(得分:1)
SNMP允许PDU大小达到网络的MTU。缓冲区应该与最大的预期数据包一样大,因此如果可能的话,它可能应该与MTU相对应。例如,以太网允许最多1500字节的帧有效载荷。
因此,您的PDU最大大小通常最多为10个varbinds。
答案 1 :(得分:1)
我终于在这个帖子中找到了答案: http://sourceforge.net/p/net-snmp/mailman/message/26203876/
SNMP规范中的一个SNMP GET请求中的varbinds数量没有明确限制。但是,snmpget util(net-snmp)中有128个OID的软件限制。
答案 2 :(得分:1)
SNMP是应用层协议,UDP / TCP是传输。对于UDP(IPv4),一个受16 bit length字段的限制,产生64 KB的UDP数据报。鉴于上述情况,SNMP数据包必须略小于此。根据可以打包到PDU的OID的数量,该PDU是OID长度(以及ASN.1传输编码)的函数,所请求的OID总数可以变化。 128的限制在sub-id上,表示单个八位字节的长度,请记住这是TLV(类型长度值)编码,因此为RequestPDU中的那些添加几个字节。在响应PDU中,OID的类型和长度将与RequestPDU中的相同,但是占用的值将需要更多字节,从而增加了PDU的总体大小。关于正在请求的“类型”OID值的这个额外位(特别是它们可以多长时间),也可以在可以打包在单个ResponsePDU中的OID数量中起作用。
此外,SNMP TCP (RFC3430)和TLS/TCP for SNMP (RFC5953)在SNMP传输上运行时也很普遍。在那里,PDU可以更长,但我觉得处理更长PDU的成本可能会影响在低马驱动设备上运行的SNMP代理(至少在过去)。在PDU级别将其分解仍将需要SNMP应用程序协议级别的每个PDU的身份验证/数据完整性和可选的隐私检查。
有趣的是,在过去,关于SNMP的第一个RFC确实建议限制484个八位字节,但也继续指出必须支持更大的PDU处理。这是一个代码段RFC 1157 SNMPv1
此协议的实现不需要接受消息 其长度超过484个八位字节。但是,建议这样做 在可行的情况下,实现支持更大的数据报。
最后一位是1500字节,指的是以太网帧大小,即第2层(数据链路层)限制。位于顶部的IP层将基于MTU大小对分组进行分段,但是在其切换到上层IP fragmentation之前将执行完整的IP分组组装。然后根据具体情况将IP数据包传递给传输UDP或TCP。最终,当应用层收到数据包时,它将是一个完全形成的SNMP PDU(在该级别没有碎片)。