文章目录
前言
组播(多播)允许一台设备一次性向多个接收者传输数据,而非为每个接收者单独发送。在需同时向多设备发送相同数据时,组播优势尽显,既大幅降低网络带宽消耗,又提升传输效率,堪称网络通信的 “节能高效大师”,有力保障流畅稳定的网络体验。接下来,让我们深入探寻组播的工作原理、应用场景与技术奥秘。
一.组播的基本概念
组播是一种网络通信技术,它允许在网络中把数据包从一个源节点发送到多个目标节点,这些目标节点组成一个组,组内的成员都能接收到发送给该组的数据包。
1.1 组播基础概念
概念 | 定义 | 作用 / 工作方式 | 示例 |
---|---|---|---|
组播源 | 发送组播数据的设备或节点,是数据的发起者和提供者 | 将数据封装成组播数据包,发送到特定组播地址,仅发送一份数据,通过组播路由机制传输到各成员 | 视频直播系统中的直播服务器 |
组播组 | 由接收相同组播数据的设备或节点组成的逻辑集合,有唯一的组播地址标识 | 为组播数据传输提供目标范围,路由器根据组播地址将数据转发给组内所有成员 | 企业网络中接收内部培训视频的员工电脑集合 |
组播成员 | 加入到某个组播组中的设备或节点,是组播数据的接收者 | 可根据需求动态加入或离开组播组,加入时通过网络协议宣告,离开时发送离开消息 | 在线视频会议中参会者的设备 |
1.2 组播模型
组播模型 | 任意源组播(ASM) | 指定源组播(SSM) |
---|---|---|
源地址知晓情况 | 接收者不知组播源具体地址 | 接收者明确知道组播源地址 |
工作原理 | 任何发送者可作为组播源向组内发信息,接收者加入组播组即可接收任意源数据 | 接收者指定特定组播源,在两者间建立专用转发路径接收数据 |
特点 | 灵活性高,但源发现复杂,可能接收不必要数据,增加网络负担 | 可避免接收无关数据,减少带宽浪费,延迟低、安全性高,但不够灵活 |
应用场景 | 由多个频道实时转发的直播 | 视屏会议 |
1.3 组播地址
1.3.1 组播IP地址
分类 | 地址范围 | 说明 |
---|---|---|
预留组播地址 | 224.0.0.0 - 224.0.0.255 | 这些地址用于一些特定的、局部的组播应用,通常路由器不会转发这些地址的数据,它们仅在本地网络中使用。 例如:- 224.0.0.5 代表 OSPF(开放式最短路径优先)路由器。 |
用户使用组播地址 | 224.0.1.0 - 238.255.255.255 | 该范围内的地址可供用户在 Internet 上进行组播应用,可用于全球范围的组播通信。例如,一些视频会议、在线直播等应用 |
本地管理组播地址 | 239.0.0.0 - 239.255.255.255 | 这类地址用于本地组织内部的组播通信,在本地网络内使用,不会被 Internet 上的路由器转发,起到隔离和管理的作用。常用于企业内部的组播应用,如企业内部的视频培训等。 |
1.3.2 组播MAC地址
- 组播 MAC 地址的前 25 位是固定前缀 ,其值为
00000001 00000000 01011110(16 进制为 01-00-5E)
。这部分是 IEEE 定义的组播 MAC 地址前缀,用于标识该 MAC 地址是组播地址 - 组播 MAC 地址的后 23 位与组播 IP 地址的后 23 位一致。
注:组播 IP 地址是 32 位的,前4位固定为 1110,后23位被映射到组播 MAC 地址中,其中有 5 位没有被映射为组播 MAC 地址,将导致有 32 个组播 IP 地址对应同一个组播 MAC 地址,如:224.0.0.1 和 224.128.1.1。
1.4 组播优缺点
组播对比单播和广播的优点有:
- 高效利用网络带宽,避免单播的重复发送和广播的全网发送导致的带宽浪费。
- 减轻服务器负载,无需像单播那样处理大量连接请求,也不像广播那样引发过多不必要响应。
- 提高网络安全性,可通过组管理和访问控制,防止非授权设备接收数据,优于广播的无差别发送,也在一定程度上降低了单播大量连接带来的安全管理成本。
组播的劣势:
- 可靠性问题:UDP 是无连接、不可靠的传输协议,组播基于 UDP 时,数据传输可能出现丢包、乱序等情况,且没有像 TCP 那样的重传机制来保证数据的可靠交付。
- 拥塞控制困难:UDP 本身缺乏有效的拥塞控制机制,组播中多个接收者的网络状况不同,发送方难以根据反馈来合理调整发送速率,易导致网络拥塞。
二.组播协议

路由器类型 | 概念 |
---|---|
第一跳路由器 | 转发路径上与组播源相连且负责转发组播源发出的组播数据的PIM路由器 |
中间路由器 | 转发路径上,第一跳路由器与最后一跳路由器之间的PIM路由器 |
最后一跳路由器 | 转发路径上与组播成员设备相连且负责转发组播源数据给组播成员的PIM路由器 |
叶子路由器 | 与用户主机相连的路由器,它可能连接着组播组成员主机,也可能连接着非组播组成员 |
PIM 路由器 | 在接口上开启了 PIM 协议的路由器 |
2.1 IGMP V1 协议
IGMP协议主要作用是实现IPv4组播成员管理,包括建立和维护组播组成员关系,让路由器依据成员信息实现组播数据的高效转发,通过查询与响应机制动态监测成员状态,及时更新组播转发表,且不同版本能支持多种组播应用的差异化需求。
2.1.1 基本概念
IGMP 协议在主机侧和路由器侧的作用分别如下:
- 主机侧:主机利用 IGMP 协议向路由器发送加入或离开组播组的报文,以此告知路由器自身对特定组播组的兴趣,即希望接收或不再接收该组播组的数据,从而实现对组播组成员身份的主动管理。
- 路由器侧:路由器通过 IGMP 协议收集并维护本地网络中组播组成员的信息,依据这些信息决定组播数据的转发策略,将数据精准地转发到有组成员的网段,同时通过周期性查询来监测成员状态,确保组播路由的有效性和高效性。

2.1.2 工作原理
普遍组查询与响应
- 查询:如图中①所示,路由器 RTA 会周期性(60秒)地向子网内所有主机(目的地址为 224.0.0.1 ,代表本子网内所有主机)发送成员关系查询信息,这是一种普遍组查询,用于了解子网内主机的组播组成员情况 。
- 响应:主机收到普遍组查询,若希望加入某个组播组,会发送 IGMP 成员关系报告。图中②,Client A 属于 G1 组播组、Client B 属于 G2 组播组,它们收到查询后分别发送对应组播组的 Report(绿色线为 G1 的 Report,蓝色线为 G2 的 Report ),表示希望加入相应组播组。
响应抑制机制
- 同一组播组内的主机,不需要都发送成员关系报告。如图中③,Client A 和 Client C 都属于 G1 组播组,当 Client C 监听到 Client A 发送的 IGMP 报告后,就不再发送自己的 IGMP 报告。这样可避免同一组内多个主机重复发送报告造成网络资源浪费 。
- Client A 和 Client C 都会开启本地定时器(0-10秒之间随机),谁先超时,谁就发 Report。
成员加入机制
- Client D 想要加入组播组 G3 时,会主动发送 IGMP 成员关系报告(Report for G3 )。路由器 RTA 接收到该报告后,就知晓子网内有主机希望加入组播组 G3,后续会依据此信息向该子网转发组播组 G3 的数据 。这种机制下,主机自主发起加入请求,是 IGMPv1 实现组播组成员管理的基础方式。
2.1.3 报文格式
字段 | 说明 |
版本 | IGMP版本,值为1 |
类型 | 报文类型,该字段有两种取值: 0x11:普遍组查询报文 0x12:成员关系报告报文 |
组地址 | 普遍组查询报文中,该字段为0 成员关系报告报文中,该字段为组播地址 |
IGMP V1 实验

首先配置各i设备的接口 IP 地址,然后使用下述命令开启路由器的组播路由功能:
#开启组播路由功能
[AR1]multicast routing-enable
在最后一跳路由器上使用下述命令,开启 PIM 协议(后文会讲诉sm是 PIM 的工作模式):
[AR1]pim
[AR1-GigabitEthernet0/0/0]pim sm
在最后一跳路由器上使用下述命令,开启 IGMP V1 协议,开启后路由器会发送普遍组查询。
[AR1-GigabitEthernet0/0/0]igmp enable
[AR1-GigabitEthernet0/0/0]igmp version 1

最后一跳路由器上相关的配置完成后,下面将主机加入到组 239.1.1.1中:


2.1.4 缺陷
组成员离组机制:
- 组成员离开行为:在 IGMPv1 中,组成员离开组播组时采取 “静默离开” 方式 ,即离开组播组时不主动发送离开组报告。如图中①,Client A 或 Client C(同属 G1 组播组 )离开组播组时,不会向路由器 RTA 发送专门报文告知。
- 路由器判断逻辑:路由器通过周期性发送普遍组查询来探测组成员状态。当普遍组查询发出后,若在 130s 内没有收到某个组播组的成员响应(即成员报告),路由器就认为该组播组在本地网段不存在组成员了 ,如图中② 。
组成员离组问题:
- 组播数据转发不及时:在组成员静默离开后,路由器由于未收到明确离开信息,仍会继续向该网段转发组播数据,直到超过 130s 的超时时间,造成网络带宽浪费 。
- 状态更新延迟:这种机制导致路由器对组播组成员状态的更新存在延迟,不能及时感知成员变化,影响组播数据转发的准确性和高效性。
选举机制问题
- 查询器选举依赖于组播路由协议 。当网络中有多个路由器(如图中的 RTA 和 RTB )时,需要确定一个作为查询器,负责周期性发送普遍组查询(General Query),收集组播组成员信息。但 IGMPv1 自身没有独立的查询器选举机制,而是借助组播路由协议来完成。
成员报告响应机制问题
- GMP V1 设备加入组播组完全依赖路由器的普遍组查询报文触发,设备自身无法根据应用程序的需求或网络状况主动发起加入请求。
2.2 IGMP V2 协议
IGMP V2 协议通过竞争选举查询器,有离开组报文,支持特定组查询,增加最大响应时间字段,可动态调整响应时间,能识别 IGMPv1 报文,兼容性好,报文类型更丰富,网络效率更高。
2.2.1 报文格式
字段名称 | 含义 |
---|---|
类型 | 0x11:查询报文;0x12:IGMP V1 成员关系报文报文;0x16:IGMP V2 成员关系报告报文 0x17:成员离组报文 |
最大响应时间 | 普遍组查询报文,最大响应时间默认10秒 特定组查询报文,最大响应时间默认1秒 |
组地址 | 普遍组查询报文:全0 特定组查询报文:要查询的组地址 成员关系报告/离组报文:需要报告/离开的组地址 |

【 AR1 组播基础配置 】
[AR1-GigabitEthernet0/0/0]ip address 192.168.1.254 24
#开启组播功能
[AR1]multicast routing-enable
#开启接口IGMP协议
[AR1-GigabitEthernet0/0/0]igmp enable
【 AR2 组播基础配置 】
[AR2-GigabitEthernet0/0/0]ip address 192.168.1.253 24
#开启组播功能
[AR2]multicast routing-enable
#开启接口IGMP协议
[AR2-GigabitEthernet0/0/0]igmp enable
【 PC接入对应组播组配置 】
2.2.2 成员离组机制
IGMPv2 离组机制如下:
1.主机宣告:主机决定离组,向本地所有组播路由器发成员离开报文,携带离组组播组地址
PC1组播配置中,选择 “离开” 即可使得PC1离开组播组,下面观察下离组报文:

2.查询确认:查询器收到离开报文后,发针对该组播组的特定组查询报文,询问该组播组是否还有其它成员(需要成员在1秒内响应,共发两次)。

特定组查询报文演示
3.成员响应:若网段内有其他该组播组成员,收到特定组查询报文后会响应成员报告报文。

4.删除表项:查询器在组成员关系定时器超时后,若未收到成员报告报文,就删除 IGMP 组表项,不再转发该组播组数据。
2.2.3 查询器选举机制
1.初始状态:IGMP V2 协议中,多个组播路由器启动后都自认为查询器并发送普遍组查询报文

2.选举过程:各路由器通过比较接收到的查询报文中源 IP 地址,IP 地址最小的路由器当选查询器 ,其他为非查询器。

3. 定时器设置:非查询器启动 “其他查询器存在时间定时器”(默认 125 秒),期间若未收到查询器报文,定时器超时则重新选举查询器。
其他 IGMP 查询器的存活时间 = 健壮系数 × IGMP 普遍查询报文发送间隔 +(1/2)× 最大查询响应时间 = 2*60+5 = 125秒
【 其它查询器上查看超时时间的命令 】
[AR1]display igmp interface 0/0/0
2.2.4 响应抑制机制
IGMP v2 支持对最大响应时间范围的调整,IGMPv1 不支持。
2.2.5 成员报告响应机制
IGMP V2 设备无需等待普遍组查询报文(该报文周期发送时间60s),可主动报告,能让路由器更快地了解成员状态变化,及时调整组播数据的转发,提高了组播组成员管理的效率,减少了网络资源的浪费和数据传输的延迟。
2.3 IGMP V3 协议
IGMPv3 相较于 IGMPv2,报文类型上查询有变化且无独立离开组报文;组播源控制上,v2 无控制能力,v3 可精细过滤特定源;响应机制上,v2 有响应抑制,v3 删除;应用场景上,v2 主要用于 ASM,用于 SSM 需额外技术,v3 直接适配 SSM;查询器选举上,v2 靠 IP 地址小选举,v3 本质类似但因功能扩展更复杂。
2.3.1 报文格式

在原有拓扑图的基础上,我们在路由器上输入如下命令,使得路由器使用IGMP V3协议
[AR1-GigabitEthernet0/0/0]igmp version 3
普遍组查询报文

IGMP V3 查询报文格式
字段 | 描述 |
---|---|
类型 | 成员关系查询 Type = 0x11。 |
最大响应时间 | 设备接收到查询消息后发出响应报文的最大延迟时间,超过该时间没有发出响应报文,则查询设备认为此次查询超时,单位是1/10秒。 |
组播地址 | 对于普遍组查询消息,该字段置0。对于特定组查询消息、特定组/源查询消息,该字段为设置为欲查询的组播组的地址。 |
S | 该比特位置1时,所有收到此查询消息的其他路由器不启动定时器刷新过程,但是此查询消息并不抑制查询器选举过程和路由器的主机侧处理过程。 |
QRV | 查询者的健壮变量;其它非查询器使用该字段中的健壮变量来计算查询器存活时间 |
QQIC | 查询器的查询间隔;其它非查询器使用该字段中查询间隔来计算查询器的存活时间 |
组播源数量 | 消息中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定组/源地址查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。 |
组播源 | 组播源地址,其数量受到Number of Sources字段值大小的限制。 |

报告报文

成员关系报告报文
字段 | 描述 |
---|---|
类型 | Type = 0x22表示成员关系报告 |
组记录个数 | 该字段表示该报告报文中包含有几个组记录。 |
Group Record | 一个主机可能需要点播多个组播地址的组播业务,每个记录包含了对应于其中一个组播地址的源地址列表等信息,它受到Number_of_Group_Records的大小的影响。 每一个组记录字段是一整块数据,其含有的信息是关于发送者在报告发送接口上的某一个多播组的成员关系。 |

报告报文中 Group Record 字段格式
Record Type | 组记录消息的类型。 当前过滤模式报告:(用户主机只想观看主播 X 和 Y 的直播)
过滤模式改变报告:
源地址列表改变报告:
|
组播源个数 | 源数量(N)字段标明在组记录中存在多少源地址。 |
Multicast Address | 多播地址字段标明该组记录从属的多播IP地址。 |
Source Address [i] | 源地址[i]字段是一个数组,含有n个单播地址。n就是该记录的源数量(N)字段的值。 |

这是 PC1 组播数据包配置界面,选定 IGMP V3 版本,源 IP 为 192.168.1.1、源 MAC 为 54 - 89 - 98 - 81 - 56 - 4A ,组播组 IP 从 239.1.1.1 起始,因组数为 2、增量为 1,会生成 239.1.1.1 和 239.1.1.2 两个组播组 IP ,类型为包含模式,组播源 IP 从 1.1.1.1 起始,因地址数为 2、增量为 1,会生成 1.1.1.1 和 1.1.1.2 两个组播源 IP ,可通过启动 VLC 接收组播内容并发送配置的组播数据包。
在这种配置下,代表源 IP 为 192.168.1.1 的设备设置为允许接收组播源 1.1.1.1 和 1.1.1.2 发往组播组 239.1.1.1 和 239.1.1.2 的流量 。

查询器接收到成员报告报文后,会生成对应的IGMP 路由表,可以使用下述命令查看:
[AR1]display igmp routing-table

该 IGMP 路由表表明,在 public net
VPN 实例下,AR1 设备的 GigabitEthernet0/0/0
接口(IP 为 192.168.1.254
)被配置为允许接收来自单播源 1.1.1.1
和 1.1.1.2
,发往组播组 239.1.1.1
和 239.1.1.2
的流量,且采用 IGMP 协议进行管理 。
2.3.2 特定源组查询机制
当查询器接收到组成员发送的源地址列表改变报告或过滤模式改变报告时,IGMP 查询器会发送特定源组查询报告,如果成员希望接收到其中任意一个组播数据,将反馈报文;IGMP 查询器根据反馈的组成员报告更新该组对应的源列表。
实验演示
【 PC1 配置 】
【 PC2 配置 】
【 特定源组查询报文演示 】
查询器收到成员关系报告报文后,会更新组播路由表,此时 PC1 从include 模式切换为 exclude 模式,查询器收到 PC1 的成员关系报告报文后,会发送特定源组查询报文,询问是否有设备需要接收组播源 1.1.1.1 发送给组播组 239.1.1.1 的数据,PC2 收到后会回复成员关系报告报文,告诉查询器PC2需要接收组播源 1.1.1.1 发送给组播组 239.1.1.1 的数据。
2.4 IGMP Snooping 协议
IGMP Snooping 是一种IPv4二层组播协议,通过侦听三层组播设备和用户主机之间发送的组播协议报文来维护组播报文的出接口信息,从而管理和控制组播数据报文在数据链路层的转发。
2.4.1 基本概念
为什么需要 IGMP Snooping
在很多情况下,组播报文要不可避免地经过一些二层交换设备,尤其是在局域网环境里。如下图所示,在组播用户和三层组播设备Router之间,组播报文要经过二层交换机Switch。

当Router将组播报文转发至Switch以后,Switch负责将组播报文转发给组播用户。由于组播报文的目的地址为组播组地址,在二层设备上是学习不到这一类MAC表项的,因此组播报文就会在所有接口进行广播,和它在同一广播域内的组播成员和非组播成员都能收到组播报文。这样不但浪费了网络带宽,而且影响了网络信息安全。
IGMP Snooping有效地解决了这个问题。配置IGMP Snooping后,二层组播设备可以侦听和分析组播用户和上游路由器之间的IGMP报文,根据这些信息建立二层组播转发表项,控制组播数据报文转发。这样就防止了组播数据在二层网络中的广播。
IGMP Snooping 应用场景
如下图所示,PIM网络中有多个组播源(如Source1和Source2)向局域网提供组播视频服务,局域网中部分用户(如HostA和HostC)希望通过组播方式接收视频数据。为了避免组播数据在局域网中广播而引起的网络带宽浪费和无法预知的网络信息安全问题,可以在二层组播设备上部署IGMP Snooping,实现组播数据在二层网络中的精确转发。
IGMP Snooping 是如何工作的
IGMP Snooping是二层组播的基本功能,可以实现组播数据在数据链路层的转发和控制。当主机和上游三层设备之间传递的IGMP协议报文通过二层组播设备时,IGMP Snooping分析报文携带的信息,根据这些信息建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。
- 使能前:组播源经 PIM 网络、Router 将数据发给 Switch,Switch 不知组播组成员,向所有端口广播组播数据,浪费带宽,影响网络效率。
- 使能后:组播源数据经 PIM 网络、Router 到 Switch,开启 IGMP Snooping 的 Switch 监听主机 IGMP 报文,据此建立映射,只向组播组成员所在端口转发组播数据。

2.4.2 端口角色
端口角色 | 作用 | 如何生成 |
---|---|---|
路由器端口(Router Port) | 二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备从此接口接收组播数据报文。 |
|
成员端口(Member Port) | 又称组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备往此接口发送组播数据报文。 |
|
2.4.3 工作机制
二层组播设备运行了IGMP Snooping后,收到不同的IGMP协议报文会进行不同的处理,并在此过程中建立起二层组播转发表项。
IGMP工作阶段 | 处理方式 |
---|---|
普遍组查询 IGMP查询器定期向本地网段内的所有主机与路由器(目的地址为224.0.0.1)发送IGMP普遍组查询报文,以查询该网段有哪些组播组的成员。 | 向VLAN内除接收接口外的其他所有接口转发,并对接收接口做如下处理:
|
成员报告
注:定时器老化时间=健壮系数×普遍组查询间隔+最大响应时间=2×60+10=130秒 | 向VLAN内所有路由器端口转发。从报文中解析出主机要加入的组播组地址,并对接收接口做如下处理:
|
成员离开组播组
| 判断离开的组是否存在对应的转发表项,以及转发表项出接口列表是否包含报文的接收接口:
|
注意:交换机运行IGMP Snooping协议后,都不会存在响应抑制机制,原因如下:
- 当 IGMP Snooping 设备接收到成员关系报告报文时,只会将该报文从路由器接口发送出去,这避免了其余组成员收到此报告报文,也就不会触发响应抑制机制。
-
若存在响应抑制机制,该组其他成员设备不会发送成员报告报文,交换机对应的成员端口老化时间无法刷新,130s 老化时间到后,接口从成员端口列表删除,成员设备将收不到组流量
IGMP Snooping 实验

本实验中,交换机与 PC 相连接的接口都属于 vlan 10,为了效果演示,交换机将针对 vlan 10 开启 IGMP Snooping功能,相关命令如下:
基础配置
【 开启组播路由功能 】
[SW1]multicast routing-enable
【 针对 vlan 10开启 IGMP Snooping 功能】
#先全局开启 IGMP Snooping 协议
[SW1]igmp-snooping enable
#针对 vlan 10 开启 IGMP Snooping 协议
[SW1]igmp-snooping enable vlan 10
【 交换机放行 vlan 10 报文】
[SW1-GigabitEthernet0/0/1] port hybrid pvid vlan 10
[SW1-GigabitEthernet0/0/1] port hybrid untagged vlan 10
路由器端口演示
完成上述配置后,一旦交换机与路由器连接的接口G0/0/1收到普遍组查询报文后,该接口将会成为路由器端口。
【查看路由器接口命令】
[SW1]dis igmp-snooping router-port vlan 10
组播组转发表及成员端口演示
完成了上述配置之后,在 PC1 上点击 "加入" ,交换机收到成员报告报文后,会创建组播组 239.1.1.1 的转发表,同时将接收到成员报告报文的接口 G0/0/3 添加到新创建的转发表中。
【 PC1 配置 】
【 查看转发表命令】
[SW1]dis igmp-snooping port-info
IGMP Snooping 协议转发表演示
当我们在 PC3 上完成和 PC1 相同的配置并点击 "加入"后,交换机会在组播组 239.1.1.1中添加新的成员端口 G0/0/5。
2.5 PIM DM 模式
PIM DM(协议无关组播 - 密集模式)协议用于在 IP 网络中实现多播数据分发的路由协议
2.5.1 前置实验
PIM 协议的工作机制将配合实验进行进一步演示,通过下面的实验也能够更好的了解组播应用场景,实验拓扑及配置如下。

【实验要求】
组播源给组播组 239.1.1.1 的视频数据,能够被接收者 PC1 接收到
【 基础环境 】
各接口IP,环回接口如上图所示,整个实验基于 OSPF 实现三层通信,所有路由器均开启组播路由功能,所有路由器开启 PIM 协议。
- 【 开启组播路由功能命令 】
[AR1]multicast routing-enable
- 【 开启 PIM 命令】
[AR1-pim]int g 0/0/0
[AR1-GigabitEthernet0/0/0]pim dm
所有路由器开启组播路由功能,且开启 PIM 功能后,直连路由器双方会建立邻居关系,如下所示为路由器 AR2 的 PIM 邻居关系。
- 【 查看 PIM 邻居命令】
[AR2]display pim neighbor

由于路由器 AR5 与组播接收者相连接,因此 AR5 的 G0/0/1 接口需要开启 IGMP 协议。
[AR5-GigabitEthernet0/0/1]igmp enable
【 组播源/组播接收者配置 】
- 【 组播源配置】
文件路径这里选择的是电脑中的一个视频,同时为了能够成功演示 PC1 接收到视频并播放的效果,此处需要下载一个播放器 VLC 。点击此处查看 VLC 安装及使用方法
- 【 接收者配置 】
完成组播源配置并点击运行,以及组播接收者 PC1 配置中点击 “加入”后,再点击"启动 VLC " ,组播源发送的视频即可被 PC1 接收到并成功播放,效果如下。
2.5.1 工作机制
PIM DM 假设网络中的大多数主机都需要接收多播数据,采用 “推” 的方式将多播数据从源端向网络中的所有路由器进行扩散。它首先将多播数据发送到网络中的所有节点,然后再根据下游节点是否有接收者来修剪不需要的分支,以避免数据在没有接收者的链路上传输,组播源数据到达最后一跳路由器后,最后根据 IGMP 表项,将组播数据转发给对应的组播组成员。
前置概念-->组播分发树:组播源到接收者所经过的转发路径。
- 最短路径树:以组播源为根,到达接收者所经过的最短路径。(蓝色或红色箭头路径)

下面将结合上面的实验,将PIM DM协议的工作机制分为以下几个阶段
阶段1:建邻
基本原理:
- 邻居发现:PIM 路由器在所有启用 PIM 协议的接口上周期性(30秒)发送 hello 消息,借此发现直连链路上的其它 PIM 路由器,以及通告自身信息。
- 邻居建立:若收到的 hello 消息中不包含自身的路由器 ID 会将发送该 hello 消息的路由器 ID 添加到邻居表中,并启动定时器;否则,丢弃该 hello 消息。
- 邻居维护:建邻的路由器会周期发送 hello 消息,以维持邻居关系;若在定时器时间(105秒)内未收到 hello消息,会将该路由器 ID 从邻居表中删除,并停止组播数据交互。
具体流程:
拓扑图中的路由器,如 AR1、AR2 等,通过各自运行 PIM 协议的接口,周期性向组播地址 224.0.0.13 发送 PIM Hello 报文 ,以此发现直连链路上的 PIM 邻居并维护邻居关系。比如 AR1 的 GE 0/0/1 接口发送 Hello 报文,若 AR2 收到,二者就建立起邻居关系 。
阶段2:扩散
基本原理:
在 PIM DM 中,假定每个子网至少有一个组播组成员。当组播源活跃后,其发送的报文会在全网扩散。组播报文抵达 PIM 路由器时,路由器先进行 RPF 检查,检查通过后创建(S,G)表项,随后将报文从除上游接口外,所有与 PIM 邻居相连的下游接口转发,实现报文在网络各节点的扩散 。

具体流程:
1.源端发送:
组播源产生组播数据并发送。如在相关拓扑图中,组播源 MCS1 发出组播流量。
2.首跳处理:
组播数据到达第一跳路由器(如 AR1)后,AR1 对组播报文进行 RPF 检查。若检查通过,在本地创建(S,G)表项,并将报文从除接收接口外的下游接口转发给相连设备(如 AR2)。下游设备收到后重复此操作,逐步将组播流量扩散至全网。
- 【RPF 防环机制】若PIM 路由器收到组播数据的接口和单播路由表中的去往组播源的接口一致,会将组播数据转发给下游PIM路由器,否则丢弃。若存在等价路由(如图中 AR5 去往组播源可通过 AR3 或 AR4),PIM 路由器会选择下一跳IP地址最大的接口作为RPF接口。
- 【 PIM 转发表】
[AR5]display pim routing-table


3.逐跳转发:
后续的路由器(如 AR2 )收到组播报文后,同样进行 RPF 检查。通过后也创建(S,G)表项(老化时间210秒),再向其下游的 PIM 邻居接口转发报文,如此重复,组播报文就扩散到整个 PIM 网络 。
阶段3:剪枝
剪枝作用:
组播网络中,PIM DM 协议的“扩散”阶段会将组播流量扩散到整个网络中,若不进行剪枝,没有接收者的网段也会收到组播流量,占用宝贵的带宽资源。

基本原理:
- 组播流量扩散后,若路由器PIM或IGMP表项中无下游接口信息,会向上游发送剪枝报文。
- 上游设备收到后,将收到剪枝报文的接口从(S,G)表项中的下游接口中删除并启动剪枝计时器(210秒);超时后,剪枝接口将被重新添加到(S,G)表项中。
- 重复上述操作,直到向上传递过程中的某一台PIM路由器,存在其它下游接口,则剪枝停止。
例如,AR6 的 PIM 或 IGMP 表项中无下游接口信息,会向上发送剪枝消息,AR2 收到后会将G0/0/1接口从 PIM 路由表中的下游接口列表中删除。
特殊情况:
图中,AR9 收到 AR11的剪枝报文后,由于 AR10 与接收者连接,故 AR9 会开启一个 3 秒定时器,若 3 秒内收到 AR10 的 join 消息(AR10 收到 AR11的剪枝消息后发送join消息),会忽略AR11的剪枝消息,不会将下游接口 G0/0/1从(S,G)转发表项中删除;否则,删除。

阶段4:嫁接
嫁接作用:
在 PIM - DM 中,当被剪枝网段出现新组播组成员时 ,该网段设备向上游发送 Graft 报文,请求恢复组播数据转发,上游设备收到后恢复对应接口转发,以实现组播数据快速送达新接收者 。
基本原理:
- 新成员接入:当 AR3 下游新出现组播接收者(如新增 PC 设备 ) ,AR3 通过 IGMP 感知到新成员加入。
- 发送嫁接报文:为快速获取组播流量,AR3 作为叶子路由器向上游 AR2 发送 Graft(嫁接)报文,请求恢复对应接口转发组播流量。若上游设备同样被剪枝而未接收到组播流量,该嫁接报文会递归向上游传递至未被剪枝的设备(AR2)。

- 恢复转发:AR2 收到 Graft 报文后,将之前被剪枝的与 AR3 相连接口添加回(S,G)表项下游接口列表,同时回复嫁接确认消息以及恢复向 AR3 转发组播流量 ,完成嫁接操作,使组播数据能到达新接收者 。

阶段5:断言
断言作用:
共享网段上,多个启用 PIM 的路由器通过 RPF 检查后,可能同时转发相同组播流量,导致接收者收到重复流量。断言机制让路由器发送 Assert 消息竞选,选出唯一组播数据转发者,避免重复转发。
如上述拓扑中,PIM 路由器 AR3 和 AR4 都通过了RPF检查,会同时转发相同的组播流量给 PIM 路由器 AR5。
基本原理:
1.触发机制:PIM 路由器从发出组播流量的接口,又收到了一份相同的组播流量。
- 如 AR3 从G0/0/2接口发出组播数据,又从该接口收到 AR4 发送的组播数据
2.断言报文发送:PIM 路由器向该网段(如10.0.123.0)发送 Assert 报文,竞选出转发者,获胜方负责转发组播数据,败方会开启 180 秒定时器,超时后,继续发送组播数据,借此防止胜方故障导致业务中断,竞选规则如下:
- 优先级比较:首先比较路由协议优先级,优先级数值越小越优先 。
- 度量值比较:若二者路由协议优先级相同,度量值小者获胜 。
- IP 地址比较:若优先级和度量值都相同,IP 地址大的一方获胜 。
为了效果演示,此处将路由器 AR3 的 ospf 优先级手动设置为5,因此 AR3 成为获胜方转发组播数据,拓扑如下:

【查看pim路由表状态信息】
[AR3]display pim routing-table fsm

阶段6:状态刷新
- 背景:在 PIM DM 中,设备通过 “扩散 - 剪枝” 构建和维护组播分发树。当设备处于剪枝状态时,其上游 PIM 设备会维护 “剪枝定时器”,若定时器超时,上游设备会恢复对下游设备的数据转发,导致不必要的网络资源浪费。
- 作用:通过与组播源直连的第一跳 PIM 设备周期性(60秒)地扩散发送 State - Refresh 报文,刷新所有 PIM 设备上的剪枝定时器状态,使没有转发需求的接口始终保持抑制转发状态,同时报文中含有(S,G)表项,防止嫁接时(S,G)表项老化无法添加下游接口。

2.6 PIM SM 模式
PIM - SM 是适用于大规模网络的组播路由协议,通过 Hello 报文发现邻居,选举 DR,由 BSR 协助确定 RP 位置。它采用 “拉” 模式按需转发,先构建以 RP 为根的共享树(RPT),组播源的 DR 将数据封装发往 RP,再由 RP 沿树转发,无成员的分支会被剪枝,接收者必要时可切换到以组播源为根的最短路径树(SPT),相比 PIM - DM 更节省资源。
- 共享树(RPT):以组播汇聚点(RP)为根,到达组播成员的转发路径。


【 基础配置 】
网络拓扑中的网段信息以及 IP 信息如图中所示,整张网络图基于 OSPF 协议实现三层通信,所有 PIM 路由器的所有接口开启 PIM SM 协议。
- 【 开启 PIM SM 的命令】
[AR1-GigabitEthernet0/0/1]pim sm
[AR1-GigabitEthernet0/0/0]pim sm
2.6.1 工作机制
PIM DR 选举
作用
- 组播源 DR:在 PIM - SM 中,与组播源直接相连,负责将组播源的数据封装在 Register 报文中,单播发送给 RP ,完成组播源向 RP 的注册过程。
- 接收者 DR(查询器):和组播组成员(通常是接收者主机)直接相连,代表接收者向 RP 发送 Join 消息,构建 RPT 树(共享树);同时负责向该组成员转发组播数据 。
选举机制
PIM 设备之间通过交互 Hello 消息来选举 DR,具体规则如下:
- 比较 DR 优先级:Hello 消息中携带 DR_Priority(竞选 DR 的优先级) ,优先级数值越大,优先级越高,优先级较高者获胜。如果网段中所有 PIM 路由器都支持 DR 优先级,此规则优先。
- 比较 IP 地址:若 DR 优先级相同,或该网段存在至少一台 PIM 路由器不支持在 Hello 报文中携带 DR 优先级 ,则 IP 地址较大的 PIM 设备获胜。
注:运行 IGMP V1 的最后一跳路由器必须开启 PIM 协议从而选举 PIM DR;运行 IGMP V2 的可选择性开启(IGMP V2 自带查询器选举机制);此外,若最后一跳路由器同时开启了 PIM 和 IGMP 协议,PIM DR 优先级高于 IGMP 查询器,故 RPT 树由 PIM DR 发起构建。
静态/动态 RP
静态 RP
静态 RP 与静态路由原理一致,管理员手动配置的一个 RP ,静态 RP 仅适用于小型网络;例如,在 AR1 上执行下述命令可以告诉 AR1 路由器,RP 是 路由器 3.3.3.3;在网络中所有 PIM 路由器中执行如下命令,即可使得路由器 AR3 称为该组播网络中的 RP设备。
【 配置命令】
[AR1-pim]static-rp 3.3.3.3
在手动完成 RP(Rendezvous Point,汇聚点)配置后,网络内所有 PIM 路由器的 PIM 路由表将同步呈现 RP 路由器的详细信息。各路由器会基于路由表中的路径信息,精准识别并标记通往 RP 的转发接口,将其设置为(S,G)表项的上游接口。

动态 RP
名称 | 说明 |
c-bsr(候选路由引导器) | 通过竞选产生最终的 BSR,一旦竞选成功,该设备(即 BSR)就掌管网络中 RP 信息的发布权,负责收集 c - rp 信息并向全网扩散,使网络中的其他 PIM 设备能获取到可用的 RP 信息 |
c-rp(候选汇聚点) | C - RP 是为特定组播组提供汇聚服务的候选设备。它向 BSR 登记自身信息,经 BSR 汇总扩散后,可能被 PIM 设备选为实际 RP,组播源将数据发至 RP,再由 RP 转发给组成员。 |
BSR(引导路由器) | 负责收集网络中 C - RP 的信息,将其汇总成 RP - Set 并向全网扩散,以确保所有 PIM 路由器获取一致的 RP 信息,从而实现组播组与 RP 映射关系的统一确定 |
【 实验基础环境 】
整个实验网络环境基于 OSPF 协议实现三层通信,所有路由器开启组播路由功能以及 PIM SM 协议,IP及网段信息如上图所示,默认将 R1 和 R2 配置为 c-bsr以及 c-rp。
【 R1/R2配置 】( R1 ,R2配置相同)
- 开启环回接口的 PIM SM 协议
[R1-LoopBack0]pim sm
- PIM 视图下配置 LoopBack0 接口的 IP 地址作为候选 BSR 地址
[R1]pim
[R1-pim]c-bsr LoopBack 0
- PIM 视图下配置 LoopBack0 接口的 IP 地址作为候选 RP 地址
[R1-pim]c-rp LoopBack 0
动态 RP 选举机制:
- BSR选举:
- c - bsr:所有 c - bsr 向所有存在 PIM 邻居的接口发出 Bootstrap(自举报文),报文中携带自身地址、优先级以及哈希掩码长度等信息。60 秒周期
- 选举过程:每台路由器收到 Bootstrap 报文后,依据这些信息进行选择。通常,优先级高的 c - bsr 胜出成为 BSR;若优先级相同,IP 地址最大者称为 BSR。胜出的 c - bsr 成为 BSR 后,会周期性发送 Bootstrap 报文,其他 c - bsr 停止发送并持续监测 BSR 状态 。

- 【 更改优先级的命令 】
[R2]pim
[R2-pim]c-bsr priority ?
INTEGER<0-255> Value of priority
- 【 查看 BSR 命令】
[R1]dis pim bsr-info

- 选举 RP:
- 所有候选 RP(C - RP)向 BSR 发送 候选RP通告(C - RP - Advertisement ) 报文,该报文中包含 C - RP 地址、服务组范围以及 C - RP 优先级等信息。
- BSR 收集来自各个 C - RP 的信息,汇总成 RP - set(包含组播组与 RP 的映射关系等信息),并将 RP - set 封装在自举报文中,发布给全网的路由器。
- 各 PIM 路由器根据收到的 RP - set 信息,为特定的组播组从多个 C - RP 中选举出对应的 活动RP,选举规则如下:
- 服务组范围小的
- 优先级小的
- 哈希结果大的
- C-RP的 IP 地址小的



RPT 树构建
RPT 树是以 RP(汇聚点)为根,到达组播接收者的转发路径。(图中红色箭头路径)
RPT 树构建机制
- 接收者请求:接收者通过 IGMP 加入消息告知本地路由器想接收组播数据,若路由器无对应表项,则向 RP 发送 PIM 加入消息,沿单播反向路径传输。
- 状态建立:沿途路由器依据 PIM 加入消息建立(*, G)组播转发状态,记录接收接口为下游接口,去往 RP 开销最短的接口设为上游接口。
- 数据转发:RP 收到加入消息后创建转发状态,接收组播源数据,并沿已构建的 RPT 树向下游转发至接收者。
- 动态维护:下游无接收者时,路由器向 RP 发送修剪消息停发数据;网络拓扑变化时,通过 PIM 消息重建或调整 RPT 树,保障数据正确传输。

注:括号中的 SWR 含义
- S:代表 PIM 协议的 SM 模式
- W:代表不关心组播源,即PIM 路由器收到该报文会创建 (*,G)表项
- R:代表 RPT(汇聚点),即该 “加入” 是发送给 RP 的

SPT 树构建
组播源到达接收者(PIM SM 中接收者为 RP)的最短路径(图中红色箭头部分)
SPT 树构建机制
步骤一:源端注册
源端 DR 执行 RPF检测后,创建(S, G)表项(S 代表组播源地址,G 代表组播组地址 ),并向 RP发送单播注册消息,此消息携带第一份组播流量 。

步骤二:RP 接收与处理
RP 收到注册消息后,执行 RPF 检测并创建(S, G)表项;RP 开始沿 RPT(共享树)转发接收到的组播流量,此时沿途路由器会创建(S, G)表项,但这些表项暂不用于转发流量,而是为后续的 SPT 切换做准备 。

步骤三:RP 发起 Join 消息
RP 感知到活跃的组播源信息后,向源端发送Join 消息 ,上游路由器收到Join 消息后,创建(S, G)表项,此过程逐跳重复,直至消息到达源端 DR,完成从RP 到源端 DR 的 SPT 部分构建


步骤四:注册停止
源端 DR 接收到 Join 消息后,会通过收到 Join 消息的下游接口,沿构建好的 SPT 树向 RP 发送数据。此前,源端 DR 已将组播数据单播注册至 RP 。因此,DR 的 PIM 路由表中存在两个下游接口,导致 RP 收到重复流量。

此时,RP 会向源端 DR 发送注册停止消息,以避免数据冗余传输。


步骤五:流量截断
源端 DR 收到注册停止消息后,将(S, G)表项的下游接口删除,停止向 RP 转发流量,组播流量仅沿 SPT 转发至接收者 。
步骤六:SPT转换机制
在 PIM SM 协议里,起初组播数据经共享树(RPT)传输,即组播源把数据发至汇聚点(RP),再由 RP 沿 RPT 分发给接收者。不过,这种传输方式的路径可能并非最优。而 SPT 转换机制会在合适时机,让接收者从共享树切换到以组播源为根的最短路径树,以此获取更优路径,降低数据传输延迟并减少网络带宽占用。
- 触发机制:最后一跳路由器接收到第一份组播数据后。
- 发送加入消息:接收者从组播数据获取组播源信息(IP)后,基于 OSPF 等协议构建到达组播源开销最小的路由表,向组播源发送 “加入” 消息。沿途 PIM 路由器创建新(S,G)表项。
- SPT 切换:后续组播源数据沿 SPT 转发,接收者完成从共享树到 SPT 的切换。分叉点(AR4)向 RP 发送剪枝消息,上游设备收到后,若(S,G)表项有其他下游接口则不再向上转发,否则删除对应接口后继续朝上游发剪枝消息。RP 收到后同样操作,若(S,G)表项存在下游接口则不向组播源发剪枝消息,否则向组播源方向发送。

Anycast RP
Anycast RP 利用了任播地址技术。多个物理上不同的 RP(汇聚点)被配置为具有相同的任播地址。

【配置前提条件】
- 基础网络互通
- 设备间 IP 网络层互通(单播路由可达)。
- 已启用 PIM SM 协议,且存在组播源和接收者。
- 规划 Anycast RP 地址
- 定义一个 Anycast 组地址(多个 RP 共享的虚拟 IP 地址),例如 123.1.1.1。
- 规划多个 RP 物理地址(实际接口 IP),例如
10.1.1.1
(RP1)、10.1.1.2
(RP2)。
- 确保路由协议支持 Anycast 地址
- 单播路由协议(如 OSPF、BGP)需能通告 Anycast 地址的路由,确保设备通过最短路径访问最近的 RP。
【基础配置】
-
配置Anycast RP的基本步骤
在华为设备上配置Anycast RP(Rendezvous Point)需要确保多个RP设备使用相同的IP地址,以便PIM(Protocol Independent Multicast)网络中的设备能够选择最近的RP进行组播转发。以下是配置Anycast RP的基本步骤:
-
配置Loopback接口
为每个RP设备配置一个Loopback接口,并使用该接口的IP地址作为Anycast RP地址。
[AR1-LoopBack0]ip address 123.1.1.1 24
[AR2-LoopBack0]ip address 123.1.1.1 24
[AR3-LoopBack0]ip address 123.1.1.1 24
-
启用PIM协议
在需要运行PIM协议的接口上启用PIM。(此处以 AR1 举例;AR2-AR3配置相同)
[AR1]multicast routing-enable
[AR1]interface GigabitEthernet 0/0/2
[AR1-GigabitEthernet0/0/2]pim sm
[AR1-GigabitEthernet0/0/2]igmp enable
[AR1]interface GigabitEthernet 0/0/1
[AR1-GigabitEthernet0/0/1]pim sm
[AR1]interface GigabitEthernet 0/0/0
[AR1-GigabitEthernet0/0/0]pim sm
- 【配置Anycast RP】
每个 RP 设备上关联 Anycast 共享地址,并加入Anycast RP 组,配置Anycast RP的物理地址(其余设备配置相同)
- 共享地址:对外统一 “虚拟门牌号” ,无论流量转给 R1/R2,外界均认为已发给该123.1.1.1这台设备。
- 物理地址:用于标识 Anycast RP 组内各 RP 设备,组内 RP 使用该地址进行报文交互。
#配置Anycast RP 共享地址
[AR1]pim
[AR1-pim]static-rp 123.1.1.1
#加入Anycast rp 组 123.1.1.1
[AR1-pim]anycast-rp 123.1.1.1
#关联每台 RP 设备的本地地址
[AR1-pim-anycast-rp-123.1.1.1]local-address 1.1.1.1
- 配置 Anycast RP 对等体
Anycast RP 组中的 RP 设备收到 register 报文转发给其对等体,以通告活跃组播源的效果 。
[AR2-pim-anycast-rp-123.1.1.1]peer 1.1.1.1
[AR2-pim-anycast-rp-123.1.1.1]peer 3.3.3.3
[AR3-pim-anycast-rp-123.1.1.1]peer 1.1.1.1
[AR3-pim-anycast-rp-123.1.1.1]peer 2.2.2.2
[AR1-pim-anycast-rp-123.1.1.1]peer 2.2.2.2
[AR1-pim-anycast-rp-123.1.1.1]peer 3.3.3.3
原理:
- 当组播源开始发送数据时,它会向最近的具有该任播地址的 RP 发送注册消息。
- 组播接收者通过 IGMP等机制向本地路由器表明其对特定组播组的兴趣,本地路由器然后向最近的 Anycast RP 发送加入消息。
优点:
- 最优路径:组播源/组播组到RP的路径最短
- 负载分担:每个RP只需维护PI-SM域内部分源/组信息
- 高可靠:如果某个 RP 出现故障,流量可以自动切换到其他正常
原理:
- 第一个收到组播源数据的 RP 称为活跃 RP ,该 RP 会创建 (S,G)表项,同时向其对等体 RP 发送 “注册” 消息通知其对等体,组播源的IP信息及组播源处于 “活跃状态” 。若活跃 RP 收到其对等体 RP 发送的 “加入” / “离组” 消息会将对应接口加入到(S,G)表下游接口中。



- 活跃 RP 的对等体 RP 收到 “注册” 消息后创建对应的(S,G)转发表项,同时在收到组播成员的 “加入”/“离组” 消息时将对应接口加入到(S,G)表项的下游接口,并将 “加入”/“离组” 消息从(S,G)表项的上游接口 Register(G0/0/2)发送给活跃 RP



Anycast RP 冗余机制
- RP 故障场景:若活跃 RP (如 AR3 )失效,IGP 协议收敛后,原本向 AR3 注册的组播源以及加入的接收者,会基于新的 IGP 度量值,自动选择就近的 RP (如 AR1 或 AR2 )重新注册或加入 。
- 快速恢复:由于所有 RP 共享相同的任播 IP 地址,且通过 MSDP 同步源信息,网络能在 IGP 收敛后迅速恢复组播数据转发,保障业务连续性 。