Linux
Linux 沒有發送 arp 請求
我們有一個通過 linux 網關連接到 Internet 的本地網路。區域網路中有大約 50 個工作站。我們最近開始觀察網關偶爾停止響應幾秒鐘的問題。經過調查,我們注意到有時,當網關無法 ping 某些工作站時,它甚至不會嘗試向其發送 ARP 請求。
例如,我們從網關 ping 192.168.5.37:
PING 192.168.5.37 (192.168.5.37) 56(84) bytes of data. From 192.168.5.1 icmp_seq=1 Destination Host Unreachable From 192.168.5.1 icmp_seq=2 Destination Host Unreachable From 192.168.5.1 icmp_seq=3 Destination Host Unreachable From 192.168.5.1 icmp_seq=5 Destination Host Unreachable From 192.168.5.1 icmp_seq=6 Destination Host Unreachable From 192.168.5.1 icmp_seq=7 Destination Host Unreachable 64 bytes from 192.168.5.37: icmp_seq=8 ttl=128 time=438 ms 64 bytes from 192.168.5.37: icmp_seq=9 ttl=128 time=0.240 ms 64 bytes from 192.168.5.37: icmp_seq=10 ttl=128 time=0.238 ms
同時,tcpdump 正在另一個控制台上執行:
sudo tcpdump -nli eth0 host 192.168.5.37 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 14:12:26.944842 IP 192.168.5.37.6112 > 255.255.255.255.6112: UDP, length 16 14:12:31.951145 IP 192.168.5.37.6112 > 255.255.255.255.6112: UDP, length 16 14:12:36.958632 IP 192.168.5.37.6112 > 255.255.255.255.6112: UDP, length 16 14:12:39.914620 arp who-has 192.168.5.37 tell 192.168.5.1 14:12:39.914775 arp reply 192.168.5.37 is-at 00:0b:6a:86:53:14 14:12:39.914781 IP 192.168.5.1 > 192.168.5.37: ICMP echo request, id 50734, seq 8, length 64 14:12:39.914955 IP 192.168.5.37 > 192.168.5.1: ICMP echo reply, id 50734, seq 8, length 64 14:12:40.480035 IP 192.168.5.1 > 192.168.5.37: ICMP echo request, id 50734, seq 9, length 64 14:12:40.480264 IP 192.168.5.37 > 192.168.5.1: ICMP echo reply, id 50734, seq 9, length 64 14:12:41.480037 IP 192.168.5.1 > 192.168.5.37: ICMP echo request, id 50734, seq 10, length 64 14:12:41.480265 IP 192.168.5.37 > 192.168.5.1: ICMP echo reply, id 50734, seq 10, length 64
我懷疑核心 ARP 記憶體有問題。預設情況下,gc_thresh1 為 512,並且我們在一個區域網路中的主機數量減少了十倍(
ip nei|wc -l
大約為 50)。問題是什麼,我們該如何解決?
看來我找到了問題的根源。路由器通過 eth0 連接到 LAN。此外,在同一個介面上,它有多個 VLAN 子介面(其中一個用於訪問 Internet)。在 eth0 上有一個配置為限制 LAN 使用者的流量速率的整形器。似乎 Linux 流量整形程式碼可以看到 eth0 上的所有流量(包括子介面),並且以某種方式乾擾了 eth0 上的 arp 請求。
將 LAN 連接移動到子介面並在其上配置整形以不整形 arp 數據包後,問題消失了。
檢查網路中網關的重複 IP,這是您的情況中最常見的問題。