华为NP课程笔记13-PIM
一、PIM
1.组播路由器之间运行组播路由协议,组播路由协议用于建立和维护组播路由,并正确、高效地转发组播数据包。PIM(Protocol Independent Multicast协议无关路由)是典型的域内组播路由协议,分为DM(Dense Mode密集模式)和SM(Sparse Mode稀疏模式)两种模型。
2.组播路由协议概述
和单播路由一样,组播路由也分为域内和域间两大类:
(1)域内组播路由协议:通过发现组播源并构建组播分发树,将信息传递到接收者,比如PIM-DM,PIM-SM,PIM-SSM,CBT,DVMRP,MOSPF
(2)域间组播路由协议:需要一种机制能发现其他组播域内的组播源,如MSDP、PIM-SSM;用于RFP检测的路由信息如何在自治系统之间传递,M-BGP、BGP
3、域内组播路由协议分为密集模式和稀疏模式
密集模式:使用Push方式,Push原理假设网络里的每个子网至少有一个组播信息的接收点,因此,信息扩散到网络中的所有点。然后再利用扩散、剪枝和嫁接来维护组播分发树。
稀疏模式:使用Pull方式,即组播信息被拉入网络中的接收站点。这种方式假定组播数据不被需要,除非有加入申请,否则组播信息不会被传送到接收站点。
4、PIM称为协议无关组播,表示组播依靠 单播路由可以由静态路由、RIP、OSPF、IS-IS、BGP等提供,组播路由和单播路由协议无关,只要单播路由协议产生所需路由表能完成RPF检查即可。协议号:103;PIM路由器组播地址为:224.0.0.13.
5、PIMv2报文头格式
版本:标识版本信息,当前为2
类型:0代表hello,3代表加入/剪枝,5代表Assert,6代表嫁接,7代表嫁接回应,9代表状态刷新。这些都是DM模式里的报文
6、PIM-DM
PIM(Protocol Independent Multicast)协议无关组播,目前常用版本是PIMv2,PIM报文直接封装在IP报文中,协议号为103,PIMv2组播地址为224.0.0.13。
(1)PIM路由表项即通过PIM协议建立的组播路由表项。PIM网络中存在两种路由表项:(S,G)路由表项或(*,G)路由表项。S表示组播源,G表示组播组,*表示任意。
(S,G)路由表项主要用于在PIM网络中建立SPT。对于PIM-DM网络和PIM-SM网络适用。
(*,G)路由表项主要用于在PIM网络中建立RPT。对于PIM-SM网络适用。
PIM路由器上可能同时存在两种路由表项。当收到源地址为S,组地址为G的组播报文,且RPF检查通过的情况下,按照如下的规则转发:
如果存在(S,G)路由表项,则由(S,G)路由表项指导报文转发。
如果不存在(S,G)路由表项,只存在(*,G)路由表项,则先依照(*,G)路由表项创建(S,G)路由表项,再由(S,G)路由表项指导报文转发。
(2)PIM-DM工作机制:
邻居发现:在PIM-DM网络中,路由器周期性发送Hello消息来发现、建立并维护邻居关系。
pim timer hello interval,在接口视图下配置发送Hello消息的时间间隔。 Hello消息默认周期是30秒。
pim hello-option holdtime interval,在接口视图下配置Hello消息超时时间值。默认情况超时时间值为105秒。
DR的选举:
在PIM-DM中各路由器通过比较Hello消息上携带的优先级和IP地址,为多路访问网络选举指定路由器DR。
DR充当IGMPv1的查询器。
接口DR优先级大的路由器将成为该MA网络的DR,在优先级相同的情况下,接口IP地址大的路由器将成为DR。
当DR出现故障后,邻居路由器之间会重新选举DR。
扩散:通过RPF检测,确定上游接口,其他连接接收者和其他PM邻居的端口为下游端口;这个过程中,PIM routing-table中会产生(S,G)表项,然后将数据向所有下游PIM-DM节点转发,这个过程称为扩散(Flooding)。如果RPF检查没有通过,则将报文丢弃。
RPF检查: 为了防止组播报文在转发过程中出现重复报文及环路的情况,路由器必须执行RPF检查。
所谓RPF检查,就是指路由器通过查找去往组播源的路由来判断所收到的组播报文是否来自于“正确的”上游接口。某一路由器去往某一组播源的路由所对应的出接口称为该路由器上关于该组播源的RPF接口。一台路由器从某一接口收到一个组播报文后,如果发现该接口不是相应组播源的RPF接口,就意味着RPF检查失败,所收到的组播报文将被丢弃。
剪枝(prune):当下游有没有组播成员,扩散组播报文会导致带宽资源的浪费。为避免带宽的浪费PIM-DM使用剪枝机制。
当下游节点没有组播组成员,则路由器向上游节点发Prune消息,通知上游节点不用再转发数据到该分支。上游节点收到Prune消息后,就将相应的接口从其组播转发表项(S,G)对应的输出发送列表中删除。剪枝过程继续直到PIM-DM中仅剩下了必要的分支,这就建立了一个以组播源为根的SPT。
各个被剪枝的节点同时提供超时机制,当剪枝超时时重新开始扩散—剪枝过程。剪枝状态超时计时器的默认值为210秒。
在MA网络中(一个接口有多个PIM邻居),A路由器接口收到下游路由器B剪枝报文后,会有3秒的剪枝延迟,其他下游路由器C收到相同的B的剪枝报文后,会发送给上游路由器A一个(S,G)join消息,A在3秒内收到C的(S,G)join报文,就会停止剪枝。
嫁接(graft):当一个路由器有(S,G)表项和(*,G)表项,同时又没有组播流量,就会触发嫁接。剪枝之后,路由器下游出现新的接收者后,接收者向上游发送igmp report报文,路由器收到后,会记录下接收者信息,产生(*,G)表项,(S,G)表项会添加该下游接口(路由器必须有SG表项,否则无法进行嫁接),并向上游发送graft报文,上游路由器收到graft报文,会回复graft ack报文,并在相应(S,G)表项中添加该下游接口,并再向上上游路由器发送graft报文,依次类推,到达第一跳路由器,最终组播流量恢复正常。
如果剪枝路由器没有收到graft ack报文,会继续每3秒发送graft报文。
PIM routing-table中的(S,G)表项有210s的老化时间,老化时间到了后,路由器就会泛洪剪枝报文。
而第一跳路由器(又称之为DR)会每60s发送一次状态刷新报文(组播224.0.0.13,逐跳泛洪,TTL=1,),所有的PIM路由器都会收到。状态刷新报文有如下作用:
1)刷新(S,G)表项老化时间(210s)
2)刷新剪枝计时器老化时间(210s)
断言assert:从一个接口发出组播报文,但是有从这个接口收到相同的组播报文,就会触发断言,相互发送断言报文。断言报文内携带了优先级(IGP路由协议优先级)、cost(去往源地址的开销)、IP地址等信息,优先级高、cost小、IP地址大接口的成为winner,反之成为loser,loser会删除下游端口,并向该网络发送剪枝报文。当一个路由器上游接口down掉后,也会向外发送断言消息。
所有Assert Loser可以周期性地恢复组播报文转发,从而引发周期性的Assert机制
- PIM-DM实验分析
拓扑图:
说明:
(1)AR1到AR6配置OSPF互联,具体配置过程省略
(2)配置PC1、PC2加入组播组224.1.1.1
(3)AR6配置IGMP
AR6:
multicast routing-enable
int g0/0/2
pim dm
igmp enable //默认是v2版本,igmp version配置版本
quit
dis igmp group //查看igmp组播地址
IGMPv2中,因为响应抑制的原因,只有PC2被记录了下来,成为last reporter。
(4)AR1-AR6全局下配置multicast routing-enable,端口下配置组播路由协议pim dm,实现组播数据包转发。配置这一步,使得MCS1的组播数据可以被路由器正常路由到AR6。
dis pim neighbor //查看pim邻居
dis pim routing-table //查看PIM组播路由表项,因为没有组播数据,AR6上暂时只有一条(*,G)表项,(S,G)表项为空:
此时,在AR6的pim routing-table中可以看到,上游接口是空的,上游邻居为空,RPF邻居为空,下游接口有一个为g0/0/2。而其他路由器此时因为没有组播流量,路由表项为空。
(5)配置MCS1的组播流和VLC播放器
VLC下载地址:https://iso.mirrors.ustc.edu.cn/videolan-ftp/vlc/3.0.6/win32/vlc-3.0.6-win32.exe
在ENSP中设置路径:
设置VLC完成后,配置MCS1组播源,点击运行:
此时,点开PC1的启动VLC,就可以播放视频,因为电脑性能的原因,视频会有大量的马赛克:
此时,各个路由器的PIM ROUTING-TABLE都多了(S,G)表项:
(6)组播SPT树分析
组播流从MCS1发出,通过PIM-DM进行扩散。
其中AR5的上游接口为g0/0/0(根据RPF来确定),G0/0/1为下游接口;AR6的上游接口为G0/0/0,下游接口为G0/0/1和G0/0/2,AR6从上游接口接收的组播数据会从下游端口进行转发,这样AR5的G0/0/1就接收到了同样的组播数据,从而触发断言,AR5和AR6互相发送断言报文,比较各自端口地址,AR6的IP地址设置的更大,成为winner,AR5作为loser,删除掉自己的G0/0/1这个下游端口,同时从这个端口发送剪枝报文;AR6收到AR5的剪枝报文,删除掉G0/0/1这个下游端口;AR5此时没有了下游端口,会想上游AR3发送剪枝报文,AR3收到剪枝报文后,删除掉下游端口G0/0/1,AR3因为没有下游端口,再向上游发送剪枝报文。
AR2和AR1也会收到相同的组播数据,触发断言,互相发送断言报文,AR2的IP地址设置得较大,成为winner,AR1作为loser删除掉g0/0/1这个下游端口,同时从这个端口发送剪枝报文,因为自己上联组播源,所以不会向上游发送剪枝报文。AR2、AR3、AR4都会对应地收到来自AR2和AR3组播的剪枝报文,AR2触发3秒的剪枝延迟,AR4会发送(S,G)join报文,AR2收到AR4的(S,G)join报文停止剪枝。
这样最终形成的SPT树就是:MCS1-->LSW1-->AR2-->LSW2-->AR4-->AR6-->LSA3-->PC1/PC2