摘要
- SNMP 最初的 32 位 Counter 到达
2^32-1后会正常回到零。后一次读数变小,既不等于流量倒退,也不自动证明接口重启。 - 链路越快,32 位数值完成一圈所需时间越短。接口 MIB 增加 64 位高容量计数器,同时保留低 32 位,照顾旧管理器。
- 扩宽不能解决重置。只有同时检查
sysUpTime和ifCounterDiscontinuityTime,才能判断两次采样是否仍属于同一测量纪元;跨越断点的差值必须作废。
链路没有停,数字却向后跳
设想管理器连续读取一条 1 Gb/s 接口。第一次接近 43 亿字节,第二次只剩一个较小的数。普通减法得到负值,可数据包在这段时间一直正常转发。
若把每次下降都当成重置,就会抹掉跨过上限的真实流量;若一律补上一整圈,设备重启后又会凭空制造数十亿字节。两次读数要变成速率,至少还需要三类证据:计数器有多宽、采样间隔多长、产生它们的测量历史是否连续。
图表很容易把这些条件藏在一条线里。协议的历史却反复提醒:接口的名字可以连续,测量本身未必连续。
第一代 Counter 本来就会回绕
1990 年的 RFC 1155 把 Counter 定义为非负整数:单调增加到 2^32-1,随后从零继续。回绕是有限数值空间的正常后继,不是撤销已经发生的事件,更不是硬件故障码。
RFC 1213 的 MIB-II 让这项规则进入日常网络管理。接口表提供 ifInOctets、ifOutOctets 和多个包计数器,也提供 sysUpTime 与 ifLastChange。时间背景出现了,但单个计数器仍不携带绝对起点,也不会告诉管理器它已经转过几圈。
RFC 2578 在 SMIv2 中把证据边界说得更直白:Counter32 与 Counter64 都没有规定的初值,因此孤立的一次读取通常没有信息含量。二者都会回绕,差别只是重用同一个数值前能容纳多少事件。
在同一纪元内,如果间隔最多允许一次回绕,模运算可以恢复增量;若多圈都有可能,仅凭两个端点无法知道遗漏了多少圈。
链路速度把位宽变成采样期限
带宽增长迅速压缩了安全窗口。RFC 1573 估算,在文档给定的满载条件下,32 位字节计数器在 10 Mb/s Ethernet 上略多于 57 分钟就会回绕,在 FDDI 上约 5.7 分钟,在 1 Gb/s 介质上只需约 34 秒。RFC 2863 延续了这项分析。
不断缩短轮询周期不是无限可用的办法。采集会占用处理与管理带宽,一次漏采仍可能丢掉整圈信息。工作组也考虑过把单位放大,例如每 1,024 字节才加一,但在低流量时,数字会长时间不动,再突然跳升,把平稳流量伪装成突发。
最终选择是扩大数值空间。RFC 1573 引入 64 位高容量组;RFC 2863 规定,20 Mb/s 及以下支持 32 位字节与包计数,超过 20 Mb/s 必须支持 64 位字节计数,达到 650 Mb/s 及以上还必须支持 64 位包计数。
这些门槛是当时代理成本、实现普及和回绕风险之间的工程折中,并不表示某个位宽自动保证测量正确。
新窗口保留了旧窗口
迁移没有删除旧对象。存在高容量计数器时,32 位版本仍须可读,并报告相应 64 位计数器的低 32 位。老管理器继续工作,新管理器则获得更长的无歧义区间。
两种读数在模 2^32 意义下相符,却不能跨越同样长的采样空白。采集器若从 ifInOctets 静默切换到 ifHCInOctets,即使端口和对象名称没有变化,历史序列的可解释范围也已经改变。
Counter64 也不是无限账本。RFC 2578 规定它到 2^64-1 后同样回绕。更宽只能降低正常回绕的频率,不能消除重启、对象重建、漏采或语义变化。
同一个接口可以拥有新的测量历史
位宽之外还有另一类断点。线卡可能被拔出后装回,硬件计数模块可以在 SNMP agent 仍运行时重置,逻辑接口也可能以原来的职责重新出现。对运营人员来说,它仍是同一个端口;对差值计算来说,旧值和新值已不能相接。
早期做法只有两种:接口消失期间仍保存全部计数器,或者换一个 ifIndex,迫使管理器把它当作新行。RFC 2233 增加了第三条路:保留接口身份,同时用 ifCounterDiscontinuityTime 宣告计数历史已换纪元。
RFC 2863 将它定义为相关 Counter32 或 Counter64 最近一次发生不连续时的 sysUpTime 值;若管理子系统上次初始化以来没有发生,则为零。
这个分离十分关键。稳定的 ifIndex 只说明在当前管理范围内,这一行仍指向那个接口;它不承诺今天的累计值延续昨天的累计值。
时间标记说明断点,不说明原因
管理器的义务非常明确:如果两次轮询中的 ifCounterDiscontinuityTime 不同,就必须丢弃由它们算出的差值。还要单独检查 sysUpTime,因为 agent 重新初始化可能重置时间、索引背景和计数器。
丢弃差值不等于认定这段时间流量为零,而是承认标准证据不足以给出精确总量。运营者可以为容量规划另作估算,但必须把估算与观察值分开。
断点时间也不是原因码。它不会说明线卡更换、软件升级、对象重建还是实现错误。RFC 3635 把相同边界带入 Ethernet 类接口计数器,却没有把这个对象升级成故障诊断或身份认证。
所以,标记不变只能支持在规范模型内比较;它不能证明产品完全合规,不能证明数据包抵达目的地,也不能替发票或服务结果背书。
来源与证据边界
本文的封闭史料集为 RFC 1155、RFC 1213、RFC 1573、RFC 2233、RFC 2578、RFC 2863 与 RFC 3635。它们能证明类型、演进与管理器义务,不能统计当代部署、认证某个产品、解释一次真实断点,也不能把计数器变成交付或计费证明。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
