目录
1. 组播技术基础
在 IPv4 网络中,存在着三种通信方式,分别是单播、组播以及广播。
1.1 组播网络架构
组播网络架构名词
-
组播源(Multicast Source):组播流量的发送源,一个典型例子是多媒体服务器
图中,服务器 Source 就是组播源。在典型的组播实现中,组播源不需要激活任何组播协议。
-
组播接收者(Multicast Receiver):期望接收特定组播组流量的终端或者其他设备
例如图中的 PC1、PC2 及 PC3。只有加入特定组播组的接收者,才会收到发往该组的组播流量。
-
组播组(Multicast Group):采用特定组播 IP 地址标识的群组
例如 239.1.1.1,这个 IP 地址标识了一个组播组。
-
组播路由器(Multicast Router):激活了组播路由功能的路由器
实际上,不仅仅路由器能够支持组播路由,许多交换机、防火墙等产品也支持组播路由,因此路由器在这里仅是一个代表。在组播路由器构成的组播网络中,有两种角色需要额外关注
-
第一跳组播路由器(First-hop Router):第一跳路由器是直接面对组播源的组播路由器
第一跳路由器直接从组播源接收组播流量,是组播流量进入组播网络的入口。
-
最后一跳组播路由器(Last-hop Router):最后一跳路由器是直接面对组播接收者的路由器
最后一跳路由器负责将其从组播网络中收到的组播流量从存在接收者的接口转发出去,同时也负责维护其直连网络中的组成员关系。
-
组播网络架构组成
-
第一部分:组播源与第一跳组播路由器
组播源无需运行任何组播协议,只需将组播报文发送出来。组播报文在传输层通常采用 UDP 封装,在网络层采用 IP 封装。
-
第二部分:组播路由器所构成的组播网络
为了能够正确地转发组播报文,路由器需要维护组播路由表。正如单播路由表通过单播路由协议来维护,组播路由表则使用组播路由协议来维护,组播路由协议为路由器贡献组播表项。常见的组播路由协议有 PIM、MOSPF、MBGP 等。
组播路由协议的主要功能之一就是在网络中形成一棵无环的树——组播分发树(Multicast Distribution Tree)。这棵树便是组播流量的传输路径,树的末梢就是组播接收者所在的网段,此外,组播路由协议还需关注组播报文转发过程中的防环问题,它必须拥有相应的机制确保组播报文在正确的接口上到达、并从正确的接口转发出去。
-
第三部分:最后一跳路由器与组播接收者
连接着终端网段的组播路由器需要通过某种机制查询及发现其直连的网段中是否存在组成员。只有当最后一跳路由器获知其直连网段中存在某个组播组的成员时,它才会向该网段转发该组的组播流量,否则,路由器将不会把该组播组的流量转发到这个网段。
1.2 组播 IP 地址
IANA 规定 D 类 IPv4 空间 224.0.0.0/4 用于组播通信,D 类 IP 地址空间包含的地址范围是 224.0.0.0 到 239.255.255.255,D 类 IP 地址也即组播 IP 地址。
D 类 IP 地址不能作为源 IP 地址使用,只能作为目的 IP 地址使用。即不能将组播 IP 地址分配给一台设备的任何接口。另外,D 类 IP 地址不能进行子网划分。IANA 对组播 IP 地址空间进行了进一步的划分,几种主要的组播 IP 地址分类见下表。
1.3 组播 MAC 地址
MAC 地址存在三种类型,分别是单播 MAC 地址、组播 MAC 地址以及广播 MAC 地址。
一个 MAC 地址共计 48 bit,也就是 6 个八位组。其中第一个八位组的最低比特位标识了该 MAC 地址的类型:如果为 0,是单播 MAC 地址;如果为 1 ,是组播 MAC 地址。
在以太网环境中,组播 IP 报文需被封装成以太网数据帧以便在链路上传输,而这些数据帧的目的 MAC 地址必须是组播 MAC 地址,并且必须与该报文的组播目的 IP 地址相对应。
与组播 IPv4 地址相对应的组播 MAC 地址的高 25bit 是固定的(其中高 24bit 是 0x01005e,第 25 个比特位为 0),而剩余的 23bit 则从其对应的组播 IPv4 地址的低 23bit 拷贝得来,因此与组播 IPv4 地址相对应的组播 MAC 地址的范围是 0100-5e00-0000
至 0100-5e7f-ffff
,这是整个组播 MAC 地址空间的一个子集。
下图展示了一个组播 IP 地址 230.20.88.76 对应的组播 MAC 地址该如何计算的示例。首先将该 IP 地址换算成二进制格式,然后将其低 23bit 拷贝到 MAC 地址的低 23bit,而 MAC 地址的高 25bit 是固定的,这就得到了组播 IP 地址 230.20.88.76 对应的组播 MAC 地址:0100-5e14-584c。
值得注意的是,由于组播 IP 地址的前 4bit 是固定的“1110”,而其最后 23bit 被拷贝到对应的组播 MAC 地址中,因此组播 IP 地址中有 5bit 没有被映射到组播 MAC 地址,这样就存在每 25 个组播 IP 地址共享一个组播 MAC 地址的现象,这个现象在某些场景下可能对网络造成影响,因此网络管理员在进行组播网络设计的时候需考虑到这一点。
1.4 IGMP 概述
在组播网络中,最后一跳路由器与组播接收者之间运行着一个非常重要的协议——IGMP(Internet Group Management Protocol,因特网组管理协议),IGMP 主要实现以下几个功能:
- 最后一跳路由器通过 IGMP 报文向其直连的终端网络进行查询,以便发现该网络中的组播组的成员
- 终端设备使用 IGMP 报文宣布自己成为某个组播组的成员
IGMP 报文采用 IP 封装,IP 头部中的协议号为 2,而且 TTL 字段值通常为 1,这使得 IGMP 报文只在本地网段内传播。截止目前,IGMP 一共有三个版本:
- IGMPv1 是一个相对老旧的版本,它只定义了基本的组成员查询及组成员关系报告机制。
- IGMPv2 在 IGMPv1 的基础上做了一些改进,其中包括定义了组成员离开机制、支持特定组播组查询以及定义了查询器选举机制等。
- IGMPv3 在之前的版本基础上增加了组成员对特定组播源的限制功能,另外,IGMPv3 也是 SSM(Source-Specific Multicast,特定源组播)的重要组件之一。
高版本的 IGMP 具有向前兼容性。
2. IGMPv1
IGMP 查询器
IGMP 查询器指的是在一个网段中执行 IGMP 查询操作的最后一跳路由器。在一个网段中可能同一时间接入了多台最后一跳路由器,并且这些路由器都在接口上激活了 IGMP,此时只有其中的一台路由器会成为该网段的 IGMP 查询器,并在该网段中执行查询操作。
IGMPv1 定义了两种报文:
-
成员关系查询(Membership Query)
IGMP 查询器使用该报文向直连网段进行查询,以便确认该网段中是否存在组播组成员。成员关系查询报文的目的 IP 地址是 224.0.0.1(所有节点组播地址)
-
成员关系报告(Membership Report)
组播组成员收到路由器发送的成员关系查询报文后,会以成员关系报告报文进行回应,以便告知路由器自己所加入的组播组。新加入组播组的成员无需等待路由器的成员关系查询报文,可以直接发送成员关系报告报文以宣告自己加组。成员关系报告报文的目的 IP 地址是主机期望加入的组播组的 IP 地址,而且报文载荷中的“组地址”字段也记录了该组播组的 IP 地址。
各字段的含义如下:
- 版本(Version):对于 IGMPv1,该字段恒为 1。
- 类型(Type):指示 IGMPv1 报文类型。对于成员关系查询报文,该字段的值为 1;对于成员关系报告报文,该字段的值为 2。
- 校验和(Checksum):校验和。
- 组地址(Group Address):对于 IGMPv1 成员关系查询报文,该字段的值被设置为 0.0.0.0;对于 IGMPv1 成员关系报告报文,该字段的值被设置为主机所加入的组播组地址。