在通过SNMP监视接口流量的时候,如果流量大于100Mbps,就会出现数据不准确的情况。

原因是,在标准mib中,流入流量(ifInOctets)和流出(ifInOctets)流量的oid数据类型是32位的。

使用32位的Counter,例如:10Mbps大小流量,大约57分钟后会重置;100Mbps,可能在5.7分钟后重置; 1Gbps,大约34秒。

所以,当监视的流量很大时候,应该使用64位的Counter。(IF-MIB, ifXTable)

ifHCInOctets (.1.3.6.1.2.1.31.1.1.1.6) ifHCOutOctets (1.3.6.1.2.1.31.1.1.1.10)
ifHCInUcastPkts (.1.3.6.1.2.1.31.1.1.1.7) ifHCOutUcastPkts (.1.3.6.1.2.1.31.1.1.1.11)
ifHCInMulticastPkts (.1.3.6.1.2.1.31.1.1.1.8) ifHCOutMulticastPkts (.1.3.6.1.2.1.31.1.1.1.12)
ifHCInBroadcastPkts (.1.3.6.1.2.1.31.1.1.1.9) ifHCOutBroadcastPkts (.1.3.6.1.2.1.31.1.1.1.13)

可以通过从设备获取 ifHCInOctets (.1.3.6.1.2.1.31.1.1.1.6) 来验证被管设备是否支持64位计数器。

一般的网络管理软件中,都有选项选择是那个32位还是64位Counter。

注意:

  • SNMP v1不支持64位Counter。v2c和v3支持。
  • 并不是所有厂商的设备,或固件版本支持64位Counter。
  • SNMP和CLI计数器值不一样。
  • 厂商并不一定支持所有ifXTable OID。例如思科有的设备肯能只有ifHCInOctets (.1.3.6.1.2.1.31.1.1.1.6)和ifHCOutOctets (1.3.6.1.2.1.31.1.1.1.10)是64位的。

附: 流入/流出流量的计算公式:

bps =(当次值 - 上次值)*8/2次取值间隔(s)


参考: