SNMP:一个PDU中可以请求多少个OID?

SNMP:一个PDU中可以请求多少个OID?,snmp,net-snmp,Snmp,Net Snmp,一个我找不到答案的简单问题 我知道GET请求可以通过PDU中的多个OID发送。一个请求中一个PDU最多可以请求多少个OID?SNMP是否有限制?在UDP中?SNMP允许PDU的大小达到网络的MTU。缓冲区应该与预期的最大数据包一样大,因此如果可能,它可能对应于MTU。例如,以太网允许多达1500字节的帧有效负载 因此,您的PDU最大大小通常平均高达10个varbind。我终于在这个线程中找到了答案: 在SNMP规范中,一个SNMP GET请求中的varbind数量没有明确限制。但是,snmpg

一个我找不到答案的简单问题


我知道GET请求可以通过PDU中的多个OID发送。一个请求中一个PDU最多可以请求多少个OID?SNMP是否有限制?在UDP中?

SNMP允许PDU的大小达到网络的MTU。缓冲区应该与预期的最大数据包一样大,因此如果可能,它可能对应于MTU。例如,以太网允许多达1500字节的帧有效负载


因此,您的PDU最大大小通常平均高达10个varbind。

我终于在这个线程中找到了答案:


在SNMP规范中,一个SNMP GET请求中的varbind数量没有明确限制。但是,snmpget util(网络snmp)中的软件限制为128个OID。

snmp是应用层协议,UDP/TCP是传输协议。使用UDP(IPv4)时,会受到字段的限制,该字段产生64 KB的UDP数据报。鉴于上述情况,SNMP数据包必须略小于此值。根据一个人可以将多少个OID打包到一个PDU中(这是OID长度(以及ASN.1传输编码)的函数),请求的OID总数可能会有所不同。128的限制在表示单个八位字节长度的上,请记住这是TLV(类型长度值)编码,因此为RequestPDU中的字节添加一些字节。在响应PDU中,OID的类型和长度将与RequestPDU中的相同,但该值将占用更多字节,从而增加PDU的总体大小。关于请求的OID值的“类型”(特别是这些值的长度)的这一额外位也在单个ResponsePDU中可以打包的OID数量中起作用

此外,在SNMP通过TCP传输运行的情况下,和也很普遍。在那里,PDU可能更长,但我觉得处理更长PDU的成本可能会对在低功耗设备上运行的SNMP代理造成损失(至少在过去是这样)。在PDU级别对其进行分解仍然需要每个PDU的SNMP应用程序协议级别的身份验证/数据完整性和可选隐私检查

有趣的是,在过去,SNMP上的第一个RFC确实建议限制484个八位字节,但也指出必须支持更大的PDU处理。这里是一个片段

此协议的实现不需要接受消息 其长度超过484个八位字节。但是,建议: 只要可行,实现就支持更大的数据报


最后一位是指以太网帧大小的1500字节,即第2层(数据链路层)限制。位于顶部的IP层将根据MTU大小对数据包进行分段,但在将其移交给上层之前,将执行完整的IP数据包组装。然后将IP数据包传递给传输UDP或TCP(视情况而定)。最终,当应用层接收到数据包时,它将是一个完全形成的SNMP PDU(在该级别没有碎片)。

正如Anirudh正确指出的那样,理论限制为64kB。但实际限制较低。每个SNMP代理实现都有不同的限制,好的NMS应用程序将在代理的发现阶段确定此限制(除了重传策略等)

参考资料:


  • 或谷歌“snmp最大pdu大小”。

    UDP数据包大小的限制。感谢Andrew的回复。但是,snmp数据包将被分解为多个UDP帧,并在目标位置重新组装。因此,仍然存在一个问题,即SNMP协议本身是否有任何规定的限制。您的回答不太正确。当然,它们会在目的地重新组装,但最终会出现块丢失和重新排序问题。因此,不建议PDU的大小大于MTU的大小。