如何调查 Linux 中 TX 数据包丢失的真正问题?

如何调查 Linux 中 TX 数据包丢失的真正问题?

我的 vps 在 CentOS 上运行着我自己的一些软件,它使用非常快的算法将专门构造的 RAW TCP 数据包发送到运行我的软件的众多系统。我在执行 ifconfig 时注意到 TX 列中有太多数据包丢失。我还知道,在 70% 的情况下,并非所有通过外部 venet0 接口的数据包都是由更高级别的系统(如主机操作系统、其网络驱动程序等)发送的。如何调查真正的问题在哪里?首先:当 send() 或 sendto() 返回成功时,如何解释简单的 TX 数据包丢失?其次:传入 ICMP 目的地不可达/无路由会增加 TX 的数据包丢失吗?

我的问题 ifconfig:

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
      inet addr:127.0.0.1  P-t-P:127.0.0.1  Bcast:0.0.0.0  Mask:255.255.255.255
      UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
      RX packets:14512501 errors:0 dropped:0 overruns:0 frame:0
      TX packets:151202339 errors:0 dropped:10321888 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:1043659479 (995.3 MiB)  TX bytes:6306749886 (5.8 GiB)

抱歉,网上关于这方面的资料太多了,但这些资料都是针对新手的,我是一名程序员,需要所有细节来修复我的系统。谢谢

答案1

如果您是程序员,请在内核源代码中查找“tx_dropped”的增量。这通常是由网络设备驱动程序修改的,而不是由通用网络代码修改的(除非您执行 GRE 或 IPIP、VLAN 或类似操作)。

但是使用虚拟网卡,我怀疑您是否能通过这种方式获得更多信息。

相关内容