我的团队设置了一台服务器来镜像我们的工作站多雾路段。我有点好奇我们用了多少带宽。当我运行时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 处回绕。