假设GetBulkRequest PDU变量绑定表中有L个变量,“非重复数”字段的值为N, “最大后继数”的值为M,则R=L-N个变量应该返回最多M个词典后继。
GetBulkRequest
SNMPv2的一个主要改进是GetBulkRequest PDU。这个PDU的目的是尽量减少查询大量管理信息时所进行的协议交换次数。GetBulkRequest PDU允许SNMPv2管理者请求得到在给定的条件下尽可能大的应答。
GetBulkRequest操作利用与GetNextRequest相同的选择原则,即总是顺序选择下一个对象。不同的是,利用GetBulkRequest,可以选择多个后继对象。
GetBulkRequest操作的基本工作过程如下:GetBulkRequest在变量绑定字段中放入一个(N+R)个变量名的清单。对于前N个变量名,查询方式与GetNextRequest相同。即,对清单中的每个变量名,返回它的下一个变量名和它的值,如果没有后继变量,则返回原变量名和一个endOfMibView的值。
N = 只返回一个后继变量的变量名数
R = 返回多个后继变量的变量名数
M = 最大返回的后继变量数
在上述变量之间存在以下关系:
N = MAX [MIN(non-reperters, L),0]
M = MAX [max-repetitions,0]
R = L - N
如果N大于0,则前N个变量与GetNextRequest一样被应答。如果R大于0并且M大于0,
则对应后面的R个变量,返回M个后继变量。即,对于每个变量:
SNMPv2的一个主要改进是GetBulkRequest PDU。这个PDU的目的是尽量减少查询大量管理信息时所进行的协议交换次数。GetBulkRequest PDU允许SNMPv2管理者请求得到在给定的条件下尽可能大的应答。
GetBulkRequest操作利用与GetNextRequest相同的选择原则,即总是顺序选择下一个对象。不同的是,利用GetBulkRequest,可以选择多个后继对象。
GetBulkRequest操作的基本工作过程如下:GetBulkRequest在变量绑定字段中放入一个(N+R)个变量名的清单。对于前N个变量名,查询方式与GetNextRequest相同。即,对清单中的每个变量名,返回它的下一个变量名和它的值,如果没有后继变量,则返回原变量名和一个endOfMibView的值。
GetBulkRequest PDU有两个其他PDU所没有的字段,non-repeaters和max-repetitions。
non-repeaters字段指出只返回一个后继变量的变量数。max-repetitions字段指出其他
的变量应返回的最大的后继变量数。为了说明算法,我们定义:
L = 变量绑定字段中的变量名数量N = 只返回一个后继变量的变量名数
R = 返回多个后继变量的变量名数
M = 最大返回的后继变量数
N = MAX [MIN(non-reperters, L),0]
M = MAX [max-repetitions,0]
R = L - N
·获得给定变量的后继变量的值;
·获得下一个后继变量的值;
·反复执行上一步,直至获得M个对象实例。
如果在上面的过程中的某一点,已经没有后继变量,则返回endOfMibView值,在变 量名处,返回最后一个后继变量,如果没有后继变量,则返回请求中的变量名。
·获得下一个后继变量的值;
·反复执行上一步,直至获得M个对象实例。
如果在上面的过程中的某一点,已经没有后继变量,则返回endOfMibView值,在变 量名处,返回最后一个后继变量,如果没有后继变量,则返回请求中的变量名。
利用这个规则,能够产生的name-value对的数量是N+(M×R)。后面的(M×R)对在应
答PDU中的顺序可描述为:
for i : = 1 to M do
for r : = 1 to R do
retrieve i-th successor of (N+r)-th variable
即,返回的后继变量是一行一行的,而不是先返回第一个变量的所有后继变量,再
返回第二个变量的所有后继变量,等等。
GetBulkRequest操作解除了SNMP的一个主要限制,即不能有效地检索大块数据。此外,
利用这个功能可以减小管理应用程序的规模。管理应用程序自身不需要关心组装在一起
的请求的细节。不需要执行一个试验过程来确认请求PDU中的name-value对的最佳数量。
并且,即使GetBulkRequest发出的请求过大,代理者也会尽量多地返回数据不是简单地
返回一个tooBig的错误消息。为了获得缺少的数据,管理者只需简单地重发请求,而不
必将原来的请求改装为小的请求序列。
for i : = 1 to M do
for r : = 1 to R do
retrieve i-th successor of (N+r)-th variable