如何诊断并减少从 WAN 以太网接口传入的丢弃数据包数量?

如何诊断并减少从 WAN 以太网接口传入的丢弃数据包数量?

我有几个 Ubuntu 服务器,每个服务器都作为防火墙/路由器运行。我注意到其中一个的 RX-drop 数量比另一个高得多。水滴似乎在跳跃。最后的 netstat 显示下降了约 2.6%:

$ sudo netstat -ni
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500  1715434      0  45323 0        672858      0      0      0 BMORU
eth1      1500     7146      0      0 0         18148      0      0      0 BMRU
lo       65536   200950      0      0 0        200950      0      0      0 LRU
wlan0     1500   679702      0      0 0       1315730      0      0      0 BMRU

这比另一个显示的 ~ 0.01% 高得多。我怎样才能找出是什么原因造成的?

到目前为止,我已经尝试增加接口环接收缓冲区大小:

$ sudo ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:     4096
RX Mini:    0
RX Jumbo:   0
TX:     4096
Current hardware settings:
RX:     256
RX Mini:    0
RX Jumbo:   0
TX:     256

$ sudo ethtool -G eth0 rx 4096 tx 4096

我还认为我可以使用 ntuple 过滤器在物理层丢弃一些数据包,但我无法在此 Intel i210 NIC 上使用 ethtool 修改任何这些规则。

仅供参考,这里有来自 ethtool 的更多信息。 (我也无法更改任何这些参数)

$ sudo ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: off  TX: off
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0

rx-usecs: 3
rx-frames: 0
rx-usecs-irq: 0
rx-frames-irq: 0

tx-usecs: 0
tx-frames: 0
tx-usecs-irq: 0
tx-frames-irq: 0

rx-usecs-low: 0
rx-frames-low: 0
tx-usecs-low: 0
tx-frames-low: 0

rx-usecs-high: 0
rx-frames-high: 0
tx-usecs-high: 0
tx-frames-high: 0

答案1

经过大量故障排除和阅读后,我意识到这只是因为我禁用了 ipv6 作为内核启动参数。我以为以太网卡上有数据包被丢弃,但这只是表明 ipv6 数据包被丢弃,因为它们在内核中不支持。

这个链接帮助我弄清楚了这一点:https://www.suse.com/support/kb/doc/?id=000017478

因此,我没有在 grub 命令行中禁用 ipv6,而是直接返回到 sysctl.conf 中禁用,例如 (/etc/sysctl.d/20-local.conf)

# disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

现在没有更多的丢弃,并且 ipv6 仍然被禁用。有点奇怪的是,一台服务器比另一台服务器差,但它们现在都可以工作。

相关内容