pim-sm简要流程
在 PIM-SM(Protocol Independent Multicast Sparse Mode) 中,从建立 (*,G) 组播表项到最后一跳路由器接收组播业务报文的完整流程如下:
1. 接收者加入组播组(触发最后一跳路由器)
- 触发条件:主机(接收者)希望加入组播组
G,发送 IGMP Membership Report 报文。 - 最后一跳路由器(Last-Hop Router):
- 收到 IGMP 报告后,生成
(*,G)表项,表示通过共享树(RPT)接收组播组G的流量。 - 向 RP(Rendezvous Point)发送
(*,G) Join报文,逐跳单播传输到 RP。
- 收到 IGMP 报告后,生成
2. 构建共享树(RPT)
- 逐跳转发
(*,G) Join:- 中间路由器收到
(*,G) Join后,更新组播路由表:- 创建或更新
(*,G)表项,标记下游接口(指向接收者方向)。 - 确定上游接口(通过 RPF 检查指向 RP)。
- 创建或更新
- 最终
(*,G) Join到达 RP,形成从 RP 到最后一跳路由器的共享树(RPT)。
- 中间路由器收到
3. 组播源发送数据(触发源注册)
- 组播源(Source):开始发送组播数据到组
G。 - 源的第一跳路由器(First-Hop Router/DR):
- 收到数据后,若 RP 尚未加入源树(SPT),将数据封装在 PIM Register 报文中,单播发送给 RP。
- RP 处理 Register 报文:
- 解封装数据,转发到共享树(RPT),使最后一跳路由器首次收到组播流量。
- 若 RP 需要持续接收数据,向源的第一跳路由器发送
(S,G) Join,建立源树(SPT)从源到 RP。
4. 数据沿共享树(RPT)传输
- 路径:组播数据从源 → 源的第一跳路由器 → RP → 中间路由器 → 最后一跳路由器 → 接收者。
- 关键行为:
- RP 将数据通过 RPT 转发到已加入
(*,G)的下游路由器。 - 最后一跳路由器首次通过 RPT 收到组播数据。
- RP 将数据通过 RPT 转发到已加入
5. 最后一跳路由器触发 SPT 切换
- 触发条件:
- 最后一跳路由器检测到组播流量(例如流量速率超过阈值)。
- 根据策略优化路径,减少延迟和 RP 负载。
- 动作:
- 最后一跳路由器直接向组播源的第一跳路由器发送
(S,G) Join报文(单播),建立源树(SPT)。 - 中间路由器更新组播路由表,创建
(S,G)表项,上游接口指向源方向。
- 最后一跳路由器直接向组播源的第一跳路由器发送
6. 数据沿源树(SPT)传输
- 路径:组播数据从源 → 源的第一跳路由器 → 中间路由器 → 最后一跳路由器 → 接收者。
- 优化行为:
- 数据不再经过 RP,直接通过最短路径传输。
- 最后一跳路由器向 RP 发送
(*,G) Prune报文,停止在 RPT 上的冗余流量。
7. 最终状态
- 共享树(RPT):可能被修剪,仅保留未触发 SPT 切换的接收者路径。
- 源树(SPT):成为主流量路径,优化网络资源利用率。
流程图总结
接收者加入组G
↓
最后一跳路由器发送 (*,G) Join → RP
↓
构建共享树(RPT:RP → 最后一跳路由器)
↓
组播源发送数据 → 源DR封装为 Register → RP
↓
RP 解封装数据 → 沿 RPT 转发到接收者
↓
最后一跳路由器触发 SPT 切换 → 发送 (S,G) Join → 源DR
↓
构建源树(SPT:源 → 最后一跳路由器)
↓
数据通过 SPT 直达接收者,RPT 流量被 Prune
关键点
- 共享树(RPT):初始路径,所有接收者通过 RP 接收数据。
- 源树(SPT):优化路径,绕过 RP 直接传输。
- 报文类型:
(*,G) Join:构建共享树。(S,G) Join:构建源树。Register:源向 RP 注册组播数据。Prune:修剪冗余路径。
- RP 的核心作用:协调初始数据转发和树的切换。
通过这一流程,PIM-SM 实现了高效、灵活的组播流量分发,平衡了资源利用与路径优化。

浙公网安备 33010602011771号