我arp -a
在家里的网络中运行 cmd,输出正常,但是出现了一些多播地址:
192.168.3.255 ff-ff-ff-ff-ff-ff static
224.0.0.22 01-00-5e-00-00-16 static
224.0.0.251 01-00-5e-00-00-fX static
224.0.0.252 01-00-5e-00-00-fX static
239.255.255.250 01-00-5e-7f-ff-fX static
255.255.255.255 ff-ff-ff-ff-ff-ff static
所以简而言之,它们只是用于将第二 OSI 层上的消息广播到我网络中的某些设备组?我仍在学习网络,所以任何帮助都值得感激。我无法 ping 第一个 IP,MAC 地址看起来很奇怪。出于安全原因,我用 Xs 审查了一些 MAC。我的子网掩码是255.255.252.0
PS 这些 MAC 地址是什么意思?它们是虚拟的吗?还是它们就像多个设备 MAC 的总和?
答案1
在以太网层,主机通常会侦听发往特定 MAC 地址的数据包。这包括单播、广播和多播地址。广播和多播地址在网络交换机中有特殊处理。廉价交换机只会广播目标 MAC 为多播或广播地址的数据包。
ff:ff:ff:ff:ff:ff
是广播 MAC 地址01:00:5e:XX:XX:XX
是多播 MAC 地址范围。范围 (224.0.0.0-239.255.255.255) 中的多播 IP 有一个简单的映射224.0.0.0/4
:只需取 IP 的低 23 位,并在前面加上 OUI01:00:5e:
(IP 的前 5 位和缺失位的冲突有历史原因)。
向与广播或多播 MAC 地址关联的 IP 发送 ICMP PING 通常会导致所有监听该 MAC 的主机做出响应。根据您使用的客户端,您可能需要传递特定的广播标志或拥有管理员权限。
您可以在这里查找已注册的多播地址:https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml#multicast-addresses-12 但是,有些服务会选择随机多播地址,或者未注册。
在您的输出中:
224.0.0.22
- 组管理协议224.0.0.251
- 移动DNS224.0.0.252
- 链路本地多播名称解析239.255.255.250
- 简单服务发现协议 (SSDP)
将多播 IPv4 地址转换为多播 MAC 地址:
def multicast_ipv4_to_mac(ipaddr_as_u32, multicast_oui='01005e'):
return "%s%06x" % (multicast_oui, ipaddr_as_u32 & 0x7FFFFF)
# Example, using ip2int from https://stackoverflow.com/questions/5619685/conversion-from-ip-string-to-integer-and-backward-in-python
> multicast_ipv4_to_mac(ip2int('224.0.0.22'))
'01005e000016'