我很好奇 Linux 内核可以在环回网络上处理多少流量,因此我决定对其进行基准测试。在一个终端中,我运行了:
% nc -l -p 5235 127.0.0.1 > /dev/null
在另一篇文章中我跑了:
% nc 127.0.0.1 5235 < /dev/zero
然后为了实际测量我跑的流量sudo nethogs lo
。这显示了第二个条目,nc
显示它每秒发送约 570,000 KB(平均)。第一个nc
似乎平均每秒发送约 1,300 KB,我认为这是 TCP 控制数据包。但是,两个nc
进程都显示接收速度为 0 KB/秒。为什么是这样?似乎每个进程都应该报告接收到的值等于其他进程发送的值。
版本信息:
% nethogs -V
version 0.8.1
% uname -a
Linux file-not-regular.strugee.net 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux
% nc -h |& head -1
[v1.10-41]
答案1
这是因为内核并不真正区分源 IP 地址和目标 IP 地址之外的入站和出站流量。这些数据包不会被“重复计数”,因为内核会查看源 IP,发现它是本地的,将其分类为出站,并且不会对数据包进行进一步分类(例如,入站)。