|
1
1
在编写SNMP代理时,另一个考虑因素是估计 最大限度 代理收集响应所需数据的可能时间。我认为它不应该是OID平均值,而是OID最大值。换句话说,如果您的代理服务100个OID,其中查询一个“慢”OID将导致整个(同步)代理阻止并停止服务其他代理-这种情况可能会破坏您的代理在网络上的可信度。。。 最重要的是,如果您碰巧连续多次遇到相同的慢OID(例如,管理器重试),延迟可能会累积,从而有效地阻止其他查询。 总而言之:我认为高性能SNMP代理应该具有以下特点:
另一方面,如果您的SNMP代理在低功耗硬件上提供一小段静态数据,并且您不希望有太多的管理人员与您交谈,那么您可以使用简单的同步SNMP代理。。。 顺便说一句,BSD套接字接口将保留一个未处理UDP数据包队列,以便您的代理有机会赶上。 |
|
2
1
您的问题的前提是有缺陷的,因为没有“一次性批量”的概念-无论组成SNMP数据包的UDP数据报以何种顺序接收,也不管网络接口接收每个数据包之间的持续时间有多长,您的操作系统将按接收顺序、顺序向您提供SNMP数据包。您有一个侦听端口和一个读取缓冲区。所以这个同步性是 网络数据处理是如何工作的 不过,我想说,如果您在处理SNMP请求时等待某些资源可用(正如您使用“超时”一词所建议的那样),那么您可能应该继续并同时开始处理其他未决的SNMP请求,否则您可能会冒着整个堆栈崩溃的风险。仅仅因为某个其他经理发出的请求a在服务过程中遇到延迟,就让经理等待对请求B的响应的未知时间是不公平的。也就是说,您可能确实希望对一次可以服务的请求数量设定上限,以防止潜在的DDoS攻击-只有您了解用例和生态系统,才能选择此值。 |
|
|
3
-1
Get请求是每个请求一个OID,GetBulk请求可以在一个请求中请求多个OID。此外,SNMP客户端还可以使用异步模式以最小的间隔发送多个请求并等待答复。 由于网络延迟和成本相等的路由,数据包也可能到达或订购。您可以尝试使用snmpget、snmpgetbulk、snmpbulkwalk发送请求,并使用tcpdump查看线路上的内容。 因此,一般来说,您的代理必须准备好接受突发请求。 为简单起见,如果请求速率较低,并且您的代理可以足够快地答复,则可以使用逐个处理。在这种情况下,某些请求可能会失败,但客户端可以重试请求,并最终从代理获得答复。 |