PIM-SM——RPT加入/剪枝过程

RPT加入过程

运行PIM-SM的路由器通过PIM加入报文,构建一段到达RP的RPT分支,用于从RP接收组播流量。

示例

如下图所示是一个PIM-SM组播网络,这个网络包含6台路由器,它们都运行着PIM-SM,并且全网的路由器部署了单播路由协议(例如OSPF),已经实现了全网的单播路由互通。其中R4、R6各自连接着一个终端网络,而R1则连接着组播源Source,初始情况下,Source发出的组播流量不会通过RP转发给网络的任何分支,除非RPT已经建立了起来。
在这里插入图片描述

(1)组播接收者触发:

  • PC1宣告加入组播组239.1.1.87,它通过发送IGMP成员关系报告宣告自己加组,如下图所示。
    在这里插入图片描述

(2)最后一跳路由器处理流程:

  • R4收到这个IGMP成员关系报告后,会在本地创建IGMP组表项和IGMP路由表项。
  • 然后在自己的PIM路由表中创建(*,239.1.1.87)表项,将收到IGMP报文的接口添加到该组播表项的下游接口列表中,(IGMP路由表可以作为组播路由表项下游接口的扩展)
  • 最后,R4在其单播路由表中查询到达RP的路由,从而得到上游接口,以及上游PIM邻居的地址(即R5的接口IP地址),R4便朝着RP的方向发送(*,239.1.1.87) PIM加入报文。

(3)中间路由器的处理流程:

  • R5收到了R4发送的PIM加入报文后,知道后者想要加入RPT,于是在其PIM路由表中创建(*,239.1.1.87)表项,然后将收到加入报文的接口添加到该表项的下游接口列表中。
  • 因为R5也没有收到发往239.1.1.87的组播流量,并且自己也并非RP,因此它需要继续朝着RP的方向发送(*,239.1.1.87)加入报文。
  • 通过查询单播路由表,R5发现了到达RP的出接口,于是它向上游邻居R3发送PIM加入报文。

(4)RP处理流程:

  • R3收到了R5发送过来的加入报文,它将创建(*,239.1.1.87)表项,将收到该报文的接口添加到表项的下游接口列表中,
  • 由于它本身就是RP,因此从最后一跳路由器R4到RP的这段RPT的分支就构建完成了。
  • 后续如果RP从Source收到了发往239.1.1.87的组播流量,便开始向下游接口转发该组播流量,那么R4就能够在RPT上接收239.1.1.87的组播流量并将它们转发到接收者所在的接口。

(5)假设现在PC2也加入组播组239.1.1.87,于是它发送IGMP成员关系报告以宣告自己加组。

(6)最后一跳路由器处理流程:

  • R6收到PC2发送的成员关系报告后,创建(*,239.1.1.87)表项,并且将接收IGMP membership report的接口添加到该表项的下游接口列表中,
  • 然后从上游接口向RS发送(*,239.1.1.87)PIM加入报文,请求加入RPT。

(8)中间路由器处理流程:

  • R5收到R6发送的PIM加入报文后,发现本地己经存在PIM路由表项,于是将接收该报文的接口加入到(*,239.1.1.87 )表项的下游接口列表中,
  • 并且开始将(*,239.1.1.87)组播流量转发到这个接口。如下图所示,已经清楚地描述了上述全部过程。
    在这里插入图片描述

(9)最终PIM-SM构建起来的RPT如上图所示。当RP收到Source发往239.1.1.87的组播流量后,便会将该流量沿着RPT转发下去。

RPT剪枝过程

如果已经处于RPT上的组播路由器不再需要组播流量,则要进行RPT剪枝过程,将自己从RPT上修剪掉。

示例

以RPT加入过程中的PC1、PC2为例,简述二者相继离组后,对RPT分支的影响。

(1)组播接收者触发:

  • PC2不再是组播组239.1.1.87的成员,它将发送IGMPv2离组报文,宣告自己离开组播组239.1.1.87。

(2)最后一跳路由器处理流程:

  • R6收到这个报文后,会在接收报文的接口上进行特定组查询,因为R6的直连网段中并不存在239.1.1.87组的其他成员,因此它将该接口从组播表项(*,239.1.1.87)的下游接口列表中删除。
  • 当完成删除下游接口操作后,R6发现(*,239.1.1.87)表项的下游接口列表已经为空,这意味着自己不再需要239.1.1.87的组播流量,
  • 于是从上游接口发送一个(*,239.1.1.87)的PIM剪枝报文,试图将自己从RPT上剪除。

(3)中间路由器处理流程:

  • R5收到这个剪枝报文后,在自己的(*,239.1.1.87 )表项的下游接口列表中将接收该报文的接口删除。
  • 执行完删除下游接口操作后,由于下游接口列表中还有另外的接口,因此R5自己显然还需要(*,239.1.1.87)组播流量,它将会保持现状。

(4)一段时间后,PC1也离开组播组239.1.1.87,它通过发送IGMP离组报文宣告自己离组。

(5)最后一跳路由器处理流程:

  • R4收到这个报文后,针对该组播组进行查询(发送IGMP特定组查询报文),查询后发现,这个接口上已经没有239.1.1.87组播组的其他成员了,因此它将该接口从(*,239.1.1.87)表项的下游接口列表中删除。
  • 完成删除下游接口操作后,R4发现该表项的下游接口列表已经为空,于是从上游接口发送(*,239.1.1.87)剪枝报文,试图将自己从RPT中剪除。

(6)中间路由器处理流程:

  • R5收到这个报文后,将接收该报文的接口从自己的(*,239.1.1.87)表项的下游接口列表中删除,
  • 因为该表项的下游接口列表也空了,因此R5从自己的上游接口发送(*,239.1.1.87)剪枝报文,试图将自己从RPT中剪除。

(7)RP处理流程:

  • R3收到R5发送的剪枝报文后,将接收该报文的接口从自己的(*. 239.1.1.87)表项的下游接口列表中删除,
  • 当执行完删除下游接口这个操作后,它发现该表项的下游接口列表已经为空,说明网络中当前已经不存在RPT的任何分支,因此自己也不再需要239.1.1.87组播流量了,它将Source发送过来的239.1.1.87流量丢弃(甚至向第一跳路由器发送PIM-DM剪枝报文,将自己从SPT分支上剪去),下图描述了该过程。
    在这里插入图片描述
发布了17 篇原创文章 · 获赞 1 · 访问量 216

猜你喜欢

转载自blog.csdn.net/mn3321/article/details/105692886
PIM