我正在研究 IPv6,我正在努力更好地了解它是如何深入工作的。
到目前为止,我知道基本上有三种类型的地址,基于通信的类型:
- 单播:一对一通信
- 多播:一对多通信
- 任播:一对到最近的通信
我知道在 IPv6 网络中没有广播的概念,而是使用多播地址:例如,可以使用 FF02::2 地址仅向同一本地网段上的路由器发送某些内容,这信息不会发送到不是路由器的其他主机。
YouTube 上有很好的视频,由 Sunny Classroom 制作,关于 IPv6:在名为IPv6 - Neighbor Discovery Protocol ( https://youtu.be/a1AQfjWwPaE?t=165 ) 的视频上,在 2:46,你可以看到一个动画,其中计算机发送 FF02::2 数据包,该数据包仅到达两个路由器,忽略其他设备。
混乱从这里开始:如果我有一个网络,例如,20 台计算机和一个路由器在同一个本地网络上,即在同一个交换机上,其中一台计算机发送 FF02::2 类型的多播,这个数据包应该只到达路由器(如果我了解我到目前为止所研究的内容)但是作为第 2 层设备的交换机如何知道如何仅通过路由器所在的端口转发 FF02::2 数据包?我想在这种情况下,所有设备都会收到 FF02::2 数据包,就像广播消息一样:所以,在我看来广播消息仍然存在于 IPv6 中:我错在哪里?
请记住,IPv4 还具有多播功能,其工作方式与 IPv6 几乎相同。IPv6 在这一领域引入的根本性新事物并不多,只是现在更加整洁(例如,正确分组的组地址范围)。
当主机请求加入或离开多播组时,交换机实际上会注意通过它们的 IPv4 IGMP 和 ICMPv6 MLD 数据包。通常此功能称为“IGMP snooping”(用于 IPv4)或“MLD snooping”(用于 v6)。
这使得多播感知交换机略高于纯 L2 设备。(RFC 4541更详细地描述了交换机 IGMP/MLD 侦听。)事实上,RFC 4541 甚至建议侦听交换机基于 L3 (IP) 地址而不是 L2 (MAC) 转发多播帧,尽管这些帧仍保留其原始 L2 标头(这不会像路由器那样使用纯 L3 转发),因此它是 L2/L3 功能的分层组合。
(并非所有交换机都实际监听 IGMP/MLD 订阅;特别是,较小的非托管交换机通常根本不关心,甚至在托管的“企业”交换机中,它也经常默认禁用。因此在实践中,数据包实际上通常会到达所有主机并由主机操作系统过滤。)
同样,Wi-Fi 接入点通常具有“组播增强”功能,该功能也基于 IGMP/MLD 侦听,因此也比纯 L2 网桥略多。(无线电本质上是一种广播媒体,但实际的多播帧以低速率发送;“多播增强”将它们转换为单播帧——每个接收者一个副本——传送速度更快、更可靠。)
但请注意,某些多播组根本不使用 IGMP 或 MLD – 特别是
ff02::1
“所有节点”组不使用 MLD,因此实际上是一个广播组(RFC 2710 第 5 节;RFC 4541 第 3 节),即使人们不喜欢承认。同样224.0.0.1
,IPv4 中的“所有节点”(以及 224.0.0.x 的其余部分)在功能上是一个广播组,因为 IGMP 不用于它。也可以看看: