设置 RTP/UDP 数据包的目标 MAC 地址

网络工程 ip ipv6 MAC地址 多播 UDP
2021-08-04 20:34:40

我有一个要求,我必须将 UDP 数据包发送到目标多播 IPv6 地址。除此之外,数据包还必须设置相应的目标组播 MAC 地址。我想避免在我的代码中必须完成所有打包(UDP、IP)的原始套接字。是否可以使用 UDP 套接字设置 MAC 地址?还有其他选择吗?

1个回答

MAC地址是二层地址,UDP端口是四层地址,相互之间没有任何关系。

MAC 地址用于 IEEE LAN 协议,但并非所有第 -2 层协议都使用 MAC 地址。实际上,IEEE LAN 协议有些使用 48 位 MAC 地址,有些使用 64 位 MAC 地址。其他第 2 层协议使用其他地址作为地址,有些不使用寻址。MAC 地址仅在源主机的 LAN 上相关,甚至可见。

层分离和封装的思想允许 leyr-2 协议(例如以太网)承载任何第 3 层协议(IPv4、IPX、IPv6、AppleTalk 等),而无需知道或关心哪个第 3 层协议。第 3 层协议不关心它们携带的第 4 层协议(TCP、UDP、EIGRP 等)。四层协议不关心哪个三层协议携带它们,三层协议也不关心哪个二层协议携带它们。

对于使用 MAC 地址的 IEEE LAN 协议,ARP 会将第 3 层协议地址与特定的第 2 层协议地址相关联。组播地址是一个特例,每个组播48位MAC地址对应32个组播三层IPv4地址。多播 48 位 MAC 地址使用01-00-5EOUI 附加 IPv4 多播地址的最后 23 位,或33-33附加IPv6 多播地址的最后 32 位(在某些情况下)。

这是您不想自己做的事情,只需让网络堆栈为您处理即可。