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。

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 收到组播数据。

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

关键点

  1. 共享树(RPT):初始路径,所有接收者通过 RP 接收数据。
  2. 源树(SPT):优化路径,绕过 RP 直接传输。
  3. 报文类型
    • (*,G) Join:构建共享树。
    • (S,G) Join:构建源树。
    • Register:源向 RP 注册组播数据。
    • Prune:修剪冗余路径。
  4. RP 的核心作用:协调初始数据转发和树的切换。

通过这一流程,PIM-SM 实现了高效、灵活的组播流量分发,平衡了资源利用与路径优化。

posted @ 2025-02-20 11:40  再熬夜是狗呀  阅读(146)  评论(0)    收藏  举报