PIM-SM——源注册过程

问题背景

在PIM-SM网络中,RP是非常关键的角色。以RP为参考点,可以将组播网络划分为两部分,一部分是从RP到接收者,另一部分则是从源到RP。组播源将组播流量发往RP,而RP则将组播流量沿着RPT向下游转发,组播流量最终到达每一个接收者所在的网段。

组播源将组播流量发往RP,那么组播源到RP之间存在什么工作机制?组播源是如何将组播流量发送到RP的呢?

PIM-SM源注册过程

示例

在这里插入图片描述

(1)第一跳路由器处理流程:

  • 当组播源Source开始向组239.1.1.87发送组播报文后,这些组播报文首先被第一跳路由器R1收到,R1现在需要要将组播报文发向RP。
  • R1会开始一个注册(Register )过程以便将组播报文送达RP。(前提条件是R1必须事先知道组播组239.1.1.87与RP (3.3.3.3 )的映射关系),它通过查询自己的单播路由表寻找到达RP的路径。
  • 为了确保组播报文能够准确到达RP,R1会将其收到的组播报文进行封装,它将组播报文封装在PIM注册报文中。注册报文是单播报文,缺省时其源IP地址为R1的接口IP地址10.1.1.254(从组播源接收组播流量的接口地址),目的IP地址是RP的IP地址3.3.3.3。
  • 如下图所示,展示了R1发送的某个注册报文:
    在这里插入图片描述

引入问题

为什么第一跳路由器(R1)不直接将组播报文转发到RP,而是采用注册的方式,将组播报文封装之后再通过单播的形式发送给RP?

问题原因

  1. 如果R1是要将组播报文转发到RP,它确实可以采用扩散的方式,将组播报文直接推送出去,但是这样做显然是不合适的,因为这些报文的目的地非常明确,就是RP。
  2. 如果将组播报文沿着R1与RP之间的一条最优路径(在R1与RP之间事先建立一条组播分发树SPT的分支)来传递,这也是无法做到的,因为在Source发送组播流量之前,RP并不知道组播源的所在,因此不可能事先建立一段组播分发树的分支。

(2)封装着组播报文的注册报文被R1发送给R2,再被R2转发到R3(实际上对于R2而言,这只是一个发往R3的普通单播报文),现在报文达到了RP。

(3)RP处理流程:

  • RP将收到注册报文解封装,可以得到里面的组播报文,它将这个组播报文沿着RPT转发下去(假设当前RPT已经建立完成,PC1是组播组239.1.1.87的成员)。

引入问题

  • 通过上文的介绍,大家知道第一跳路由器R1将Source发送的组播报文封装在单播报文中发往RP实际上是一个无奈的办法。
  • 并且,Source发送的组播报文会源源不断地被R1收到,如果R1对每一个收到的组播报文都封装成注册报文发往RP,这显然是非常低效的(第一跳路由需要封装报文,RP需要解封装报文),
  • 而且也加重了R1及RP (RP需要对每一个注册报文进行解封装)的负担。

解决方法

实际上,当RP收到第一个注册报文并成功解封装后,它就已经知道了组播源Source的IP地址。因此按照我们之前的分析,此时RP完全具备了在自己与组播源之间建立组播分发树(SPT)的条件。

(4)RP处理流程:

  • RP在自己的单播路由表中查询到达Source的路径及出接口,然后朝着Source的方向发送(10.1.1.1,239.1.1.87) PIM加入报文,试图在自己与源之间构建一个SPT分支。这个加入报文被RP发往自己的上游邻居R2,如图下图所示。
    在这里插入图片描述

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

  • R2收到这个(10.1.1.1, 239.1.1.87)PIM加入报文后,会创建(10.1.1.1,239.1.1.87 )表项,并将接收该报文的接口添加到下游接口列表中,
  • 然后继续向自己的上游邻居R1发送(10.1.1.1, 239.1.1.87)加入报文。

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

  • R1收到R2发送的(10.1.1.1,239.1.1.87 )加入报文后,将接收该报文的接口添加到(10.1.1.1,239.1.1.87)表项的下游接口列表中。如此一来,R1到RP之间的SPT就构建完成了。

(7)到现在为止,当R1再收到Source发往239.1.1.87的组播报文时,

  • 由于(10.1.1.1,239.1.1.87)表项的下游接口列表为非空,因此R1将组播报文从下游接口转发出去。
  • 另一方面,R1依然将组播报文封装在注册报文中,通过单播的方式发往RP。

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

  • R2收到R1发送的组播报文后,发现组播报文是在(10.1.1.1,239.1.1.87 )表项的上游接口到达,因此该报文通过了RPF检查,R2将其从自己的下游接口转发给R3。
  • 并且单播的注册报文也会被R2转发给R3。

(9)RP处理流程:

  • 对于R3而言,一方面会在SPT上收到(10.1.1.1,239.1.1.87)组播报文,
  • 另一方面对注册报文解封装后,又会得到同一组播报文的另一份拷贝,这是两份相同的组播报文,
  • 收到两份相同的组播报文,显然是没有意义的。而且,由于SPT已经构建完成,RP已经能够直接从SPT接收组播流量,因此R1没有必要再将组播报文封装在注册报文中发往RP。
  • RP通过向R1发送一个PIM注册停止报文,以便让R1停止向其发送注册报文。

(10)R1收到注册停止报文后,将不再将组播报文封装在注册报文中发往RP。于是,组播报文只是顺着SPT从R1转发到RP。

发布了17 篇原创文章 · 获赞 1 · 访问量 214

猜你喜欢

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