我arp -a
在 Linux 服务器上运行,这是输出:
[root@trnsrv1 ~]# arp -a
? (10.223.8.82) at 00:50:56:B5:75:08 [ether] on bond0
? (10.223.11.254) at E0:5F:B9:66:A6:00 [ether] on bond0
10.223.11.254 - 这是网关
10.223.8.82 - 这是另一台服务器,并且它不是 LAN 上唯一的服务器。
为什么它出现了而其他的没有出现?
答案1
为什么它出现了而其他的没有出现?
因为它们是过去 60 秒内与您的服务器交换网络流量的唯一两台计算机,或者在 中指定的系统上的任何 arp 缓存值(/proc/sys/net/ipv4/neigh/default/gc_stale_time
如果与默认值 60 不同)。
arp -a
报告 arp 缓存中的内容;它不会尝试用尽可能多的条目填充缓存。
答案2
在有效解释 arp 缓存的输出之前,您需要了解一些有关 arp 缓存的知识
arp 缓存包含IP:MAC地址映射:
托管您的服务器交换流量在自己的子网内
路由器接口用于在您的主机和其他主机之间路由流量不同的子网
这些的arp缓存知识产权:MAC地址映射做不是存活:
联网重新开始。
服务器重启。
虽然垃圾收集(“GC”)应该清除 arp 缓存中超出指定范围的映射GC阈值,现实是他们坚持不懈,尽管记录为“陈旧”
所以你不会看到IP地址:MAC地址与您的服务器交换流量的主机的映射不同的子网,或者如果网络或服务器本身重新启动,甚至是主机自己的子网内的子网。
顺便说一句,如果您想测试超出范围的映射的持久性GC间隔,ping
同一子网内的另一台主机在停止后ping
定期执行:
ip -statistics neighbour
你会看到IP:MAC地址对于你的主人来说,你ping
仍然过去了GC间隔。