当我在网关中运行 tcpdump 时,我收到了很多来自网关本身的 arp 请求。我想知道为什么会发生这种情况。如何找到导致这些 arp 请求的进程?
$ tcpdump -n arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
16:51:03.662114 ARP, Request who-has 211.123.123.251 tell 211.123.123.242, length 28
16:51:03.954113 ARP, Request who-has 211.123.123.246 tell 211.123.123.242, length 28
16:51:04.002111 ARP, Request who-has 211.123.123.254 tell 211.123.123.242, length 28
16:51:04.518111 ARP, Request who-has 211.123.123.248 tell 211.123.123.242, length 28
16:51:04.954113 ARP, Request who-has 211.123.123.246 tell 211.123.123.242, length 28
16:51:05.002110 ARP, Request who-has 211.123.123.254 tell 211.123.123.242, length 28
16:51:05.518110 ARP, Request who-has 211.123.123.248 tell 211.123.123.242, length 28
16:51:06.002112 ARP, Request who-has 211.123.123.254 tell 211.123.123.242, length 28
16:51:06.210111 ARP, Request who-has 211.123.123.252 tell 211.123.123.242, length 28
16:51:06.518114 ARP, Request who-has 211.123.123.248 tell 211.123.123.242, length 28
16:51:07.114111 ARP, Request who-has 211.123.123.246 tell 211.123.123.242, length 28
16:51:07.210111 ARP, Request who-has 211.123.123.252 tell 211.123.123.242, length 28
16:51:07.314112 ARP, Request who-has 211.123.123.249 tell 211.123.123.242, length 28
Run Code Online (Sandbox Code Playgroud)
以下是门配置:
$ ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 6c:f0:49:a8:05:4c brd ff:ff:ff:ff:ff:ff
inet 211.123.123.242/28 brd 211.123.123.255 scope global eth0
inet6 fe80::6ef0:49ff:fea8:54c/64 scope link
valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)
在该子网中,只有211.123.123.242(网关ip)可用,其他ip(如211.123.123.246)不可用。
更新:
我可以看到这些不可用 ip 的流量,我认为这就是这些 arp 的原因。虽然我无法弄清楚为什么会发生这些流量。可能是 isp 提供商的配置错误。
$ tcpdump host 211.103.252.245
23:50:11.414705 IP 59.34.131.5.7099 > 211.123.123.245.17701: Flags [S.], seq 3745049197, ack 1625918577, win 8760, options [mss 1460], length 0
23:50:12.991258 IP 75.126.1.222.80 > 211.123.123.245.1078: Flags [S.], seq 651817046, ack 152032452, win 17473, length 0
Run Code Online (Sandbox Code Playgroud)
当您运行 DHCP 服务器时,此行为非常常见。服务器探测租用范围内的地址以查看哪些地址是空闲的。还有其他网络监控解决方案使用 ARP 来跟踪网络上正在使用的地址。
据我所知,在类 Unix 系统中没有系统可以查看哪个程序发起 arp 请求。您可能会使用 strace/ktrace/dtrace 来查找系统调用。
最后我不会太担心。大量的 ARP 数据包会导致问题,但只有在达到 1000pps 范围时才会出现问题。每秒几包没什么可担心的。
路由器上的 ARP 请求是预期行为。使用 ARP 请求是为了让路由器知道网络上特定路由的下一跳地址。它的基本工作是将 IP 地址映射到 MAC 地址。
从您上面提供的示例来看,它看起来不像是过度使用 ARP。