ifconfig eth0 RX丢弃数据包

ifconfig eth0 RX丢弃数据包

问题

是否配置命令显示更多丢弃数据包在 RX 部分。因此,从互联网到达我的服务器的某些数据包似乎存在问题。

问题

  1. 此丢弃计数器会考虑哪些类型的数据包?它会考虑到达 iptables 防火墙之前的所有数据包,还是考虑被 iptables 接受之后的数据包?

  2. 如何解决ipconfig drop packets计数器停止增加的情况?

有用的故障排除信息

由于我不知道我的问题到底是什么,如果您认为需要其他信息,请随时让我完成此部分。

是否配置

eth0      Link encap:Ethernet  HWaddr 00:cc:cc:cc:cc:cc  
          inet adr:90.0.0.2  Bcast:90.0.0.255  Masque:255.255.255.0
          adr inet6: fe80::21c:c0ff:feb9:829c/64 Scope:Lien
          adr inet6: 2001:a100:1:bbbb::1/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:113264620 errors:0 dropped:2523 overruns:0 frame:0
          TX packets:168526529 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:59171827564 (55.1 GiB)  TX bytes:223993117711 (208.6 GiB)

注意“掉落:2523“在 RX 部分。这是最重要的。这个数字在不断增加。

ip -4 路由显示

default via 90.0.0.254 dev eth0 
90.0.0.0/24 dev eth0  proto kernel  scope link  src 90.0.0.2

ip -6 路由显示

2001:a100:1:bbbb::1/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
default via 2001:a100:1:bbff:ff:ff:ff:ff dev eth0  metric 1024

插件 if_err_eth0_day 的 munin 图

在此处输入图片描述

答案1

http://www.novell.com/support/kb/doc.php?id=7007165

从内核 2.6.37 开始,丢弃数据包计数的含义已发生变化。以前,丢弃数据包很可能是由于错误造成的。现在,rx_dropped 计数器显示丢弃帧的统计信息,原因是:

  • Softnet 积压已满
  • 错误/非预期的 VLAN 标签
  • 未知/未注册的协议
  • 当服务器未配置 IPv6 时,IPv6 帧

[...]

如果 tcpdump 运行时 rx_dropped 计数器停止递增,那么它很可能由于前面列出的原因而显示丢弃。

答案2

我也一直在尝试追踪这个问题,但没有成功。我还注意到我的 Ubuntu 12 机器上每秒大约有一次 RX 数据包丢失。通过搜索,我发现其他各种 Linux 平台(SUSE、Rpi 等)上也有类似的问题。这似乎是 Linux 内核的问题。我注意到一些更有趣的线索使问题暂时消失,但并没有确切的解释。

  1. 如果我在 /etc/network/interfaces 中将配置从静态更改为 DHCP,则 RX 数据包丢失会停止。也许无法识别的数据包与 DHCP 有关,而当它关闭时,机器不知道如何处理它们?

  2. 如果我运行 tcpdump,则在转储运行时数据包丢失会停止,而当我停止转储时数据包会再次丢失。

也许这些线索能帮助我们查明事情的真相?

总体而言,我的网络性能似乎很好,只是好奇为什么会发生这种情况。

答案3

我追查这个问题很长一段时间,最终设法把所有能解决这个问题的部分拼凑起来——对我来说。

答案就在这里https://superuser.com/questions/1421591/disable-homeplug-feature-on-fritzbox

在我的例子中,它是 FRITZ!Box 7590,它以平均每秒一个的速度生成协议为 0x88E1 和 0x8912 的数据包,如 ifconfig 所示,这些数据包在我的 PC 上“在网络接口级别被丢弃”(netdata 的措辞)。使用上述页面中提供的 XDP 过滤器丢弃它们可以解决此问题。即 ifconfig 的 RX 丢弃计数器停止增加。

我设法使用 wireshark 和过滤表达式“!(eth.addr == yo:ur:ma:ca:dd:re) && !(ip.addr == 192.168.5.255)”缩小了问题范围。即仅显示未直接发送到我的机器或我的网络的 IP 广播地址的数据包。这消除了足够的噪音,留下了有问题的流量(加上 ARP 和其他一些低容量流量)。因此,如果您没有 FRITZ!Box 会为您带来此问题,那么这种方法可能有助于确定哪些数据包导致了问题。

有一件小事我目前还不太清楚,那就是每两秒钟就会收到三个与这些协议匹配的数据包,这可以通过 wireshark 观察到。这意味着平均每秒丢弃 1.5 个数据包。显然这三个中只有两个是“有问题的”,所以 XDP 过滤器也会丢弃一个不会有问题的数据包。但我想我可以忍受。

相关内容