iproute2 和 ifconfig 报告的带宽使用情况不同

iproute2 和 ifconfig 报告的带宽使用情况不同

我的团队设置了一台服务器来镜像我们的工作站多雾路段。我有点好奇我们用了多少带宽。当我运行时ifconfig eth0,TX/RX 线路显示

RX packets:166949376 errors:0 dropped:0 overruns:0 frame:0
TX packets:350126730 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:31757576798 (29.5 GiB)  TX bytes:458006556301 (426.5 GiB)

但是当我运行时ip -s link show eth0,等效输出是

RX: bytes  packets  errors  dropped overrun mcast   
1693647583 166958818 0       0       0       18979  
TX: bytes  packets  errors  dropped carrier collsns 
2741139294 350136238 0       0       0       0      

这相当于 TX/RX 约为 1.8/2.6 GiB。是什么原因导致iproute2和报告的值之间存在差异ifconfig? 是否存在某种整数溢出iproute2

谢谢!

答案1

有多种方法可以使用库或从内核获取系统流量统计信息,其中一种是cat /proc/net/dev。我会检查该文件进行比较。

稍微 OT:显然您可以ifconfig使用可加载的 NIC 内核驱动程序重置计数器,但不能使用内置驱动程序。

答案2

我找到了一些iproute2可以阐明这个问题的文献。

谢谢Jonathan Ross 的回答,我了解到它ifconfig从中提取数据/proc/net/dev。在iproute2文档,看来,iproute2“当超出架构上自然数据类型的最大长度时,带宽计数器就会换行”。

很明显,它iproute2使用 32 位整数来存储此信息,因为这是一个 64 位系统。带宽计数器将在 4 GiB 处回绕。

相关内容