SNMP sysUpTime(OID 1.3.6.1.2.1.1.3.0) 时间戳信息解析

博客讨论了在处理SNMP sysUpTime (OID 1.3.6.1.2.1.1.3.0) 时间戳时遇到的不一致问题。当设备启动时间超过497天,32位计数器会重置,导致计算的启动时间错误。解决方法是考虑计数器溢出,通过加n*2^32来正确计算设备开机时间。然而,由于Trap信息通常是实时的,因此直接记录接收Trap的时间更为合适。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SNMP sysUpTime(OID 1.3.6.1.2.1.1.3.0) 时间戳信息解析遇到的问题

提示:sysUpTime: SNMP OID 1.3.6.1.2.1.1.3.0 计算出来的启动时间,与设备显示的不一致

SNMP V2C Trap 时间戳详细解析
最近计划通过SNMP Trap 获取设备的事件信息,发现Trap时候,设备会发生
OID = 1.3.6.1.2.1.1.3.0 的字段信息。
查资料,发现该OID表示MIB中的sysUpTime。
网络上查询该OID的定义解析:
RFC1213 defines sysUpTime as a 32-bit counter in 1/100 second. From the RFC’s definition of sysUpTime:
“The time (in hundredths of a second) since the network management portion of the system was last re-initialized.”
即是:该字段的值是32-bit 的计数器, 每1个单位,表示1秒的百分之一,即是0.01秒。 该计数器的值,是从设备启动后开始计数。

但是通过Trap收到的华为S9xxx设备发来的 sysUpTime ,与设备时间开机时间无法对上。

抓取到的 OID = 1.3.6.1.2.1.1.3.0 , timeticks-value=4294967296
而通过display version, 显示设备启动时间:
Quidway S9xxx Terabit Routing Switch uptime is 123 weeks, 5 days, 15 hours, 51 minutes
按照OID = 1.3.6.1.2.1.1.3.0的定义,4294967296应该是71 weeks
4294967296/100/(2436007) = 71.0146708994709

OID = 1.3.6.1.2.1.1.3.0 计算出来的启动时间,与设备显示的不一致。
这个问题困扰了很久。。。

OID = 1.3.6.1.2.1.1.3.0 计算出来的启动时间,与设备显示的不一致

提示:现网设备实际数据:

抓取到的 OID = 1.3.6.1.2.1.1.3.0 , timeticks-value=4294967296
而通过display version, 显示设备启动时间:
Quidway S9xxx Terabit Routing Switch uptime is 123 weeks, 5 days, 15 hours, 51 minutes
按照OID = 1.3.6.1.2.1.1.3.0的定义,4294967296应该是71 weeks
4294967296/100/(2436007) = 71.0146708994709

>>> 4294967296/100/(24*3600*7)
71.0146708994709
>>>

原因分析:

提示:SysUpTime MIB supports 32-bit (Timeticks):

SysUpTime MIB supports 32-bit = 2 to the 32nd power = 2^32 = 4294967296 (Timeticks)
32位的整数,最大表示是 2^32 = 4294967296
4294967296 最多表示 是 497天多一点,如果超过这个数值,计数器又从0开始计数。

>>> 2**32/100/(24*3600)
497.1026962962963
>>>

All PacketWise images and models will have the same behavior after the sysUpTime value reaches 497 days, the sysUpTime polled value resets to zero (0).


解决方案:

提示:需要自己加上 n * 2**32 去计算 SysUpTime

如果一个设备启动时间特别长的话,设备通过Trap 发到接收器的 timeticks (OID = 1.3.6.1.2.1.1.3.0),需要加上 n * 2**32,再去计算设备的开机时间,从而再去计算trap信息的实际时间。

后记:

后面发现这个Trap接收到时间,实际也没什么意义了

因为Trap 收到的信息,是设备事件的信息,基本都是实时收到,在接收trap的程序上,记录接收的Trap消息的时间即可,无需通过这个 OID = 1.3.6.1.2.1.1.3.0 去计算了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值