YESLAB学霸日记-- 数通HCIE-PIM SM实验作业

image.png


实验名称:PIM SM组播实验

实验目的

1、 配置PIM SM

2、 查看PIM SM相关表项,包括邻居、(S,G)、(*,G)表项、RP

3、 观察共享树的形成过程

4、 观察源树形成过程

5、 观察并分析先有组播源后有接收者与先有接收者后有组播源的区别

6、 观察并分析RPT向STP的切换过程


实验拓扑

image.png

实验步骤

1:基本的IP地址配置(本步骤省略)

2: 

1)在各路由器上配置PIM SM以及RP,RP采用静态RP配置方法,其中将R5的loopback0接口地址设置为RP

image.png

在最后一跳路由器R6和R7上同时配置PIM SM和IGMP V2,以R7为例:

image.png

2)查看PIM SM邻居表项

查看各路由器的pim邻居关系是否正常,以R2为例:

image.png

查看各路由器使能pim的接口,以R2为例:

image.png

查看个路由器的RP,以R7为例:

image.png

由于Sparse Mode采用pull模式,所以在无用户加组时,没有RPT和SPT,自然也没有组播路由表项。将PC1和PC2加入组播组239.1.1.1,同时在AR5的g0/0/0接口开启抓包。

3)当有用户加入组播组后,最后一跳路由器的DR收到IGMP Membership Report,将向RP方向逐跳发送(*,G)join构建RPT。

image.png

查看R5和R7的(*,G)表项

image.png

image.png

至此RPT构建完成。

当有组播源向组播组发送数据时,第一跳路由器的DR在收到组播数据流后将该组播数据封装成Register报文并以单播方式发送给相应的RP。RP收到注册消息后,一方面从Register消息中提取出组播报文,并将该组播报文沿RPT分支转发给接收者。另一方面,RP向源端DR发送(S,G)Join消息,沿途路由器上都会生成相应(S,G)表项。从而建立了一颗由组播源至RP的SPT树。(说明:第一跳路由器在收到组播报文时即创建(S,G)表项,只是该表项只有上游接口没有下游接口,所以不转发组播数据)SPT树建立后,组播源发出的组播报文沿该SPT转发至RP。RP沿SPT收到该组播报文后,向源端DR单播发送Register-stop消息(60S内起作用)。

注意:当组播源开始发送组播数据流时,当源端DR未收到RP发送的Register-Stop或者PIM-Join消息时,所有的组播报文都将封装在Register报文中单播发送给RP,抓包可以看到好多个Register消息发往RP。

image.png

SPT构建完成后,组播数据将延SPT转发至RP,然后通过RPT转发至接收者。

5)对于先有组播源后有接收者情况,组播源向组播组发送第一个组播报文,源端DR将该组播报文封装成Register报文并以单播方式发送给相应的RP。RP收到注册报文,由于没有RPT的(*,G)表项,所以RP不会向源端DR发送(S,G)Join消息,仅是立即向源端DR单播发送Register-stop消息(60S内起作用)。注册消息解封后在本地生成(S,G)表项,该表项上游接口显示为“Register”,下游接口列表为空。当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,组成员端DR向RP发送(*,G)Join报文,在通向RP的路径上逐跳创建(*,G)表项,生成一棵以RP为根的RPT。当RP收到(*,G)Join消息后,由于其有(S,G)表项,所以知道已经有了发往组播组G的组播源,便立即向源端DR(RPF目标是组播源,但由于join消息是逐跳组播发送,所以组播源侧DR一定能收到)发送(S,G)Join消息,沿途路由器上都会生成相应(S,G)表项。从而建立了一颗由组播源至RP的SPT树。当SPT建立完成后,组播数据将沿SPT发送至RP(注册及注册停止消息周期性发送),然后沿RPT发送至接收者。

第一跳路由器在收到组播数据流后即形成(S,G)表项

image.png

RP在收到注册报文解封装后也形成(S,G)表项,但上下游接口均为空

image.png

image.png

image.png

将接收者加入组播组239.1.1.1

image.png

image.png

image.png

RP上的(S,G)表项是由源端DR向RP发送的单播Register报文,解封装后触发建立的。上述两种情况,不管哪种情况、处在何种状态,源端DR都会周期性的(60秒)复制一份组播流量(除先有接收者后有组播源,组播源发送的第一份组播流量外)封装为Register报文,向RP发送注册消息,以维护其(S,G)表项,RP收到Register后立即回复Register-Stop消息(先有接收者后有组播源的情况,RP只有在收到沿SPT发送的组播数据流后才会回复Register-Stop消息),使源端DR不再(60S内)发送注册消息。当然如果一直有组播流(S,G)表项是不会超时的,该机制的主要目的还是为了先有组播源后有接收者的情况,因为先有组播源后有接收者,如果不是周期性的Register报文维护(S,G)表项,(S,G)表项超时消失后,RPT建立完成后,RP不知道有组播源,自然不会朝源端DR发送(S,G)Join,无法将组播流拉下来。

华为在先有组播源后有接收者的情况,完全同上述标准过程。但在先有接收者后有组播源的情况有些不同,SPT树建立后,组播源发出的组播报文沿该SPT转发至RP,源端DR不再复制组播流为Register消息向RP发送注册。RP沿SPT收到该组播报文后,RP也不回复Register-Stop消息。此后也不再有周期性的Register/Register-Stop消息。此时如果所有接收者离开了该组播组,组成员端DR会向源端DR发起修剪,修剪后组播流量将不再发送至RP,由于没有周期性的Register/Register-Stop消息,RP上的(S,G)表项将因超时最终被删除,此后再有接收者加入组播组G,由于没有Register消息,组播流将无法拉至RP,接收者也就无法接收到。ENSP已验证存在此问题,未验证华为真机是否也是此处理机制。

6)由于组播数据经过RP转发可能形成次优路径,且对对RP形成巨大的负担,为了解决该问题,当组播数据流到达最后一跳路由器时,组成员端DR依据(S,G)报文的转发速率阈值,触发RPT到SPT切换。组成员端DR逐跳朝向组播源逐跳发送Join报文并创建(S,G)表项,建立源端DR到组成员DR的SPT。新SPT建立后,组播数据沿该SPT转发,组成员端DR会沿着RPT逐跳向RP发送剪枝报文,删除RPT沿途各路由器(S,G)表项中相应的下游接口(RPT依旧存在)。剪枝结束后,RP不再沿RPT转发组播报文到组成员端。如果新SPT不经过RP,RP会继续向源端DR逐跳发送剪枝报文,删除原SPT (S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP。

将PC3加入组播组,由于R6和R5之间的RPT与R6和组播源的SPT不一致,当R6收到R5沿RPT发送的组播数据流后将触发(华为默认切换阈值为0)RPT向SPT切换,R6朝组播源方向发送(S,G)join,直至第一跳路由器,构建组播源至接收者的SPT,SPT构建完成后,R6沿SPT收到组播数据后会向R7发送剪枝报文,由于R7还有其他下游设备,剪枝到此结束。


image.png

image.png

image.png

image.png

image.png

R4的组播路由表会发生如下变化:

image.png

R6收到沿新SPT的组播数据流后,朝RP方向发送剪枝报文,修剪RPT上的流量(仅仅是将RPT上的相关(S,G)表项接口删除,RPT依旧存在,目的时为了当流量小于阈值后可以再切换回RPT)。

image.png

image.png


实验心得

1、源端DR的出接口列表,当到达一分钟周期时会显示register,收到register stop后出接口列表为空

2、先有组播流后有接收者时,当有了接收者,组播流通过SPT发送给RP后,register依旧时周期进行的

3、当组播源端DR和RP关于组播源的RPF邻居不一致时如何处理?在ENSP中,register由组播源端DR发送,register stop却发送给了RP关于组播源的RPF邻居。可能是bug,再重开ensp后好了。在有接收者后,SPT构建时发送的(S,G)join时组播发送的,第一跳路由器都能收到,同时第一跳路由器也都可以收到组播源发送的组播数据,但并未触发Assert机制,而组播数据却由RP关于组播源的RPF邻居转发,这是为什么?

image.png

由于R2收到该join信息不处理:不创建组播路由表项出接口,所以只有R3向下转发组播数据流。

猜你喜欢

转载自blog.51cto.com/14476517/2479350