UNP_21_组播
21.1 概述
单播地址:单个 IP 接口
组播地址:一组 IP 接口
广播地址:所有 IP 接口(当前局域网中)
组播是单播和广播的一种折中方案。组播数据报仅由对它感兴趣的接口才会接收,由运行相应组播会话应用系统的主机上的接口接收。广播一般仅在局域网中进行使用,组播即可以支持局域网又支持广域网。
套接字 API 对组播的支持增加了 9 个套接字选项,其中 3 个影响目的地址为组播地址的 UDP 数据报的发送,另外 6 个影响主机对于组播数据报的接收。
为了接收目的地址为某个组地址且目的端口为某个端口的多播数据组,进程必须加入该多播组,并捆绑该端口到某个UDP套接字。此两操作是截然不同的,不过都是必需的。多播组加入操作告知所在主机的IP层和数据链路层接收发往该组的多播数据报。端口捆绑操作则是应用进程向UDP指示它想接收发往该端口的数据报的手段。
21.2 组播地址
我们需要了解 IPv4 的组播和 IPv6 的组播的不同
IPv4 的 D 类地址
IPv4 的 D 类地址(从 224.0.0.0 到 239.255.255.255)是 IPv4 组播地址。D 类地址的低序 28 位构成组播组 ID,整个 32 位地址称为组地址。
IPv4 的以太网多播地址的高 24 位总是 01:00:5e.下一位总是 0,底序的 23 位复制自多播组 ID 的低序 23 位。多播组 ID 的高序 5 位在映射过程中被忽略。这意谓着 32 个多播地址映射成单个以太网地址,因此这个映射关系不是一对一的。
以太网地址首字节的低序 2 位标明地址是一个统一管理的组地址。统一管理属性位意味着以太网地址的高序 24 位由 IEEE 分配,组地址属性位由接收接口识别并进行特殊处理。
几个特殊的 IPv4 多播地址:
- 224.0.0.1 是所有主机组。子网上所有具有多播能力的节点(主机,路由器或打印机等)必须在所有具有多播能力的接口上加入该组。
- 224.0.0.2 是所有路由器组。子网上所有多播路由器必须在所有具有多播能力的接口上加上该组
介于 224.0.0.0 - 224.0.0.255 之间的地址(224.0.0.0/24)称为链路局部的组播地址。这些地址式为低级拓扑发现和维护协议保留的。多播路由器从不转发以些地址为目的的地址的数据报。
IPv6 多播地址
IPv6 组播地址的高序字节值为 ff。其中 112 位组 ID 的低序 32 位复制到以太网地址的低序 32 位。以太网地址的高序 2 字节为 33:33。
以太网地址首字节低序 2 位标明该地址是一个局部管理的组地址。局部管理意味着不能保证该地址对于 IPv6 的唯一性。可能有 IPv6 以外的其它的协议族共享同一网络使用同样的以太网高位 2 字节值。
多播地址的范围:
IPv6 多播地址显示的存在一个 4 位的范围字段,用于指定多播数据报能够游走的范围。IPv6 分组还有一个跳限字段,用于限制分组被路由器转发的次数
多播会话:
一个多播地址(IPv4 or IPv6 地址)和一个传输层端口(通常是 UDP 端口)组合为一个会话。举例来说,一个音频/视频电话可能使用两个会话,一个用于音频,一个用于视频,这些会话一般使用相同的端口
21.3 局域网上组播和广播的比较
接收端需要加入对应的组播,但是发送端并不需要。
21.4 广域网上的组播
21.5 原特定组播
21.6 组播套接字选项
关于组播的套接字选项这里不做展示,参看 UNP-21.6节