ping 多播“所有主机”IP 224.0.0.1 会用我当前子网上的所有主机填充我的 ARP 缓存吗?

网络工程 ip ipv4 IP地址 arp 多播
2021-07-29 00:55:56

只是想知道万一我想要/需要查看我子网上的所有主机。

3个回答

这主要是一个主机实现问题。如果主机从接收到的数据包中填充其 ARP 缓存,那么它将了解所有回答的 MAC。还应该注意的是,并非所有主机都会响应对多播地址的 ICMP 回显请求,甚至更少的主机会响应所有节点多播地址。(出于明显的安全原因)

ping 多播“所有主机”IP 224.0.0.1 是否会用我当前子网上的所有主机填充我的 ARP 缓存?

根据 ARP 标准,ARP 表应该只由 ARP 更新,但 ping 使用 ICMP,而不是 ARP。ping 单播地址可能会导致发送 ARP 请求,并且在发送 ICMP Echo 请求之前填充 ARP 表的相应 ARP 回复,但将 ICMP Echo 请求(如 ping 一样)发送到组地址将不会使用ARP 请求组中所有主机的所有 MAC 地址。

话虽如此,响应主机可能需要使用 ARP 请求来查找它们响应的 MAC 地址,并且应该填充 ARP 表,因为它们是 ARP 数据包。如果目标主机的 ARP 表中已经有回复的目的地,则不会向发送 ping 的主机发送 ARP 请求,因此不会更新 ARP 表。

您根本无法保证 LAN 上的所有主机都会更新您的 ARP 表,即使是那些可能会回复的主机。

我不确定您是否在使用 Cisco 设备,这并不能真正回答您关于访问多播 IP 地址的问题,但是您看到子网中每个主机的目标是我在管理的各种环境中经常做的事情, 使 TCL 脚本执行 ping 扫描,然后输出 ARP 表。如果您想尝试相同的方法,这里是我的脚本示例(一个用于 IOS,另一个用于 NX-OS - 两者之间实际上只有一个词的区别)。

------ BEGIN NX-OS TCL SCRIPT ------
tclsh
for {set i 1} {$i <= 254} {incr i} {
set var 192.168.218.
append var $i
exec "ping $var count 1 timeout 0"}
tclquit

sh ip arp | in 192.168.218.
----- END NX-OS TCL SCRIPT ------

------ BEGIN IOS TCL SCRIPT ------
tclsh
for {set i 1} {$i <= 254} {incr i} {
set var 192.168.218.
append var $i
exec "ping $var repeat 1 timeout 0"}
tclquit

sh ip arp | in 192.168.218.
----- END IOS TCL SCRIPT ------