当我在网关中运行 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
以下是门配置:
$ 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
该子网中只有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
答案1
当您运行 DHCP 服务器时,这种行为非常常见。服务器会探测租约范围内的地址,以查看其中哪些是空闲的。还有其他网络监控解决方案使用 ARP 来跟踪网络上正在使用的地址。
据我所知,类 Unix 系统中没有系统可以查看哪个程序发起 arp 请求。您可能使用 strace/ktrace/dtrace 来查找系统调用。
最后,我不会太担心。大量的 ARP 数据包可能会造成问题,但只有当它达到 1000pps 范围时才会出现问题。每秒几个数据包没什么可担心的。
答案2
路由器上的 ARP 请求是预期行为。使用 ARP 请求是为了让路由器知道特定路由在网络上的下一跳地址。其基本工作是将 IP 地址映射到 MAC 地址。
从您上面提供的示例来看,它看起来不像是过度 ARP。
答案3
如果 ARP 数据包源自 Linux 机器,您可以尝试使用 --pid-owner XXX 选项生成大量 iptables 规则(如果创建数据包的进程的 pid 是 XXX 则匹配;您必须覆盖大范围的 pid 号码)并希望实际发送数据包的进程不是其他进程的短暂产物。
或者,您可以使用(少得多的)--uid-owner XXX 选项来查找发送数据包的进程所有者的 uid。
顺便说一下,如果 211.123.123.242 是您的网关,并且它会查找与该网络的各种 IP 对应的 MAC 地址,那么它可能有一些数据包需要从网络外部传送。与寻找网关盒上的 ARP 请求的发起者相比,调查谁以及为什么尝试与不存在的地址进行通信可能实际上更有趣。