PIM组播路由协议
-
大家知道直播,小区视频点播等是怎么实现数据准确到达接收者的吗,和小罗一起学习今天的组播路由协议,相信大家会清晰很多
组播路由协议:运行在三层在组播设备之间,用于建立和维护组播路由表,并正确高效的转发组播报文
-
建立了一个从组播源到组播接收者的无环传输路径,即组播分发树,组播分发树模型
-
SPT(Shortest Point Tree)模型:树根为组播源,从树根触发到达每一个接收者所经过的路径都是最优的
-
RPT(Rendezvous Point Tree)模型:树根为网络中某一台路由器称为RP(Rendezvous Point 汇聚点),所有接收者共享RP,组播源发出的数据必须首先到达RP,再由RP分发给各个接收者。无法保证路径最优
-
-
根据不同的组播模型分为:基于ASM(任意信源模型),和基于SSM(指定信源模型)
-
对于ASM模型,分为域内和域间组播路由协议
-
域内组播路由协议用于在AS内发现组播源并构建组播分发树
-
域间组播路由协议用于实现组播信息在AS之间传递,与域内侧重点不一样
-
-
SSM模型为指定源组播提供解决方案,IANA为SSM分配了特定的组播地址段:232.0.0.0~232.255.255.255
-
-
根据应用环境中组播接收者疏密程度有密集和稀疏模式
-
组播数据流采用“推”的方式从组播源泛洪道每一个角落,接收者被动接收。适用成员众多的场合
-
组播数据流采用“拉”的方式从组播源发送到组播接收者,接收者主动向组播源发送接收请求,组播只会发送到真正有需求的端。适用较复杂但节省带宽,接收者较少场合,如小区视频点播
-
-
域内组播路由协议:DVMRP(距离矢量组播路由协议),MOSPF(组播OSPF协议),PIM(协议无关组播)。知道计算路由算法是什么即可
-
PIM-DM
-
PIM-SM
-
PIM-SSM
-
PIM协议报文基于UDP协议,端口号103,专门组播IP地址224.0.0.13,根据实现机制不同分为三种
PIM-DM(Protocol Independent Multicast-Dense Mode-密集模式)是基于SPT模型且采用密集模式的组播路由协议,采用“推”的方式将组播流量周期性的扩散到网络中所有设备上,适用于组播组成员较密集的小型网络。
-
邻居发现机制
-
周期性以组播方式发送PIM Hello消息,地址为224.0.0.13,所有PIM路由器都是该组播组成员,发现PIM邻居并建立维护PIM邻居关系
-
仅当组播接收者共享网段上有多台路由器,且路由器运行IGMPv1时才选举DR,通过PIM的Hello消息为该网段接收者主机选举DR,且DR充当IGMPv1的查询器(发布查询报文的路由器)
-
选举规则:Hello消息优先级,路由器接口IP地址。越大越优先
-
超时没有收到DR发送的Hello消息触发新的DR选举
-
-
-
-
扩散过程
-
将组播报文扩散到每一个运行PIM-DM网段沿途每一台路由器都创建(S,G)表项。
-
从入接口接收,进行RPF检查,检查正确,从除RPF接口外所有连接PIM-DM邻居接口(只有PIM-DM网段才有扩散)以及直接连接组播组G成员主机的接口转发出去
-
-
-
-
剪枝/加入过程:Prune消息,Join消息组播
-
如果不需要PIM邻居发送组播报文给自己,发送Prune消息给PIM邻居,收到消息后不再转发该组播组报文到本网段
-
如果共享网段上有路由器连接接收者,则向上游发送Join消息覆盖自己收到的其他路由器的Prune消息
-
两种情况发生Prune消息:将接收到Prune消息接口从出接口列表删除
-
路由器维护的(S,G)表项中出接口列表为空,向上游RPF邻居发生Prune消息
-
路由器从非RPF接口收到组播报文,触发Assert过程,Assert失败的一方向获胜的一方发送Prune消息
-
-
发送Join消息(加入需要Prune消息**):将接收到Join消息接口加入出接口列表
-
路由器从RPF接口收到Prune消息,但下游还存在接收者时,向RPF邻居发生Join消息
-
-
-
-
SPT的形成
-
SPT的形成即是扩散-剪枝的过程才形成组播源和接收者之间的SPT
-
网络中所有路由器都会维护(S,G)表项,只有当组播源S不再发生组播流之后,才会删除该组播源对应的(S,G)表项信息
-
剪枝计时器,扩散-剪枝是周期性发生的,各个被剪枝的接口提供超时机制
-
-
-
嫁接过程:Graft消息,Graft ACK消息单播
-
被剪枝的路由器上出现组播接收者,不需要等待下一次的扩散
-
Graft机制快速恢复上游RPF邻居对组播报文的转发,收到Graft消息的将收到Graft消息的接口添加到(S,G)表项出接口列表中,并回复Graft ACK消息
-
-
-
断言机制
-
同一网段出现多台转发组播路由器,相同的组播报文可能被重复发送到此网段
-
断言机制选择网段唯一组播数据转发者,在收到重复组播报文接口上发生Assert消息,其中携带了组播源S,组播组G,到达组播源的单播路由优先级和度量值
-
选举规则:
-
1.到S的单播路由优先级,值小获胜
-
2.到S的度量值,值小获胜
-
3.接口IP地址,值大获胜
-
-
-
唯一转发者上游接口故障时,会发送度量值无穷大的Assert消息引发新一轮的断言
-
-
-
PIM-DM状态刷新机制
-
通过“扩散-剪枝”过程可以快速建立组播源到接收者的SPT,但由于存在剪枝计时器,该过程是周期性的,过一段时间后被剪枝的接口又会向下游设备发送组播报文,网络中每隔一段时间就充斥组播报文,而不需要接收组播报文的接口又需要重新发送剪枝消息,很浪费占用带宽
-
使用周期性的协议报文代替周期性的组播数据扩散,减少网络消耗,优化网络资源
-
PIM-DM状态刷新机制,和组播源直接相连的路由器发出State Refresh消息,沿途收到此消息后都会重置剪枝超时定时器,同时向除入接口之外的所有连接PIM邻居的接口发送State Refresh消息,处于转发状态时剪枝标志位置0,剪枝状态时剪枝标志位置1
-
-
-
关于查询器,DR,断言:都是选举出来负责转发组播数据。当只配置IGMP协议,查询器负责,当配置了PIM协议,DR负责,当Assert竞选则Assert负责
PIM-SM(Protocol Independent Multicast-Sparse Mode-稀疏模式)是稀疏模式的组播路由协议,采用“拉”的方式根据接收者的需求在组播源和接收者之间建立RPT组播分发树,适用于任何形式的网络。
-
PIM-SM与DM不同,使用了RP汇聚点
-
组播源侧的DR向RP注册
-
接收者侧的DR向RP发起加入
-
-
邻居发现和DR选举
-
邻居发现和PIM-DM过程相同组播发送Hello消息
-
DR选举,与PIM-DM不同,PIM-SM无论路由器运行什么样的IGMP版本,接收者侧或发送源侧路由器都需要进行DR选举
-
选举规则:和PIM-DM一样,Hello消息后接口IP地址,大优先
-
-
-
-
加入过程
-
接收侧
-
接收者发送Report通知DR加入某组播组,DR在本地建立(*,G)表项,向RP发送Join消息,接收Report接口加入表项出接口列表,指向RP单播路由下一跳出接口作为表项入接口。
-
(助理解:因为是接收者主动发起的join还并没有任何组播源的信息,所以建立的是(*,G)表项,不像PIM-DM是组播源扩散是带有组播源信息建立的是(S,G)表项)
-
-
Join消息指向RP沿途经过的路由器建立对应的(*,G)表项
-
只要DR有组播组G接收者,就会周期性向上游发送Join消息,当没有组播组G的接收者即出接口列表空,发送Prune消息
-
-
-
组播源侧如下
-
-
组播源注册:Register消息单播
-
组播源不关心有没有接收者,会一直向某组播组G发送组播数据,组播源侧DR收到组播组G报文时,会建立(S,G)表项同时选择入出接口
-
DR将收到的报文封装在Register消息中,单播到对应的RP,RP收到后将查看(*,G)表项是否存在将组播报文从(*,G)表项出接口列表转发
-
RP为该组播源建立(S,G)表项,并选择入出接口,随后向组播源发送特定源和组的Join消息沿途建立(S,G)表项形成一棵组播源DR到RP的SPT
-
-
-
组播源注册停止
-
组播源发出的报文会有两种形式到达RP
-
单播封装在注册报文中到达;通过DR本地的(S,G)表项沿着SPT到达
-
-
两种报文到达RP时,RP会丢弃单播注册封装的报文,而以组播方式将接收到的报文发送到RPT上。同时,也向组播源侧DR发送Register Stop单播消息通知DR停止发送注册报文
-
注册抑制计时器,组播源侧DR维护,定时器范围内第一次接收到stop消息后有的定时器,以组播方式发送数据而不通过单播注册发送组播数据。
-
在定时器快超时之前,DR为了提示RP该发送Register Stop消息了,DR会发送一些空的没有封装组播数据的Register消息
-
RP收到之后,更新本地(S,G)表项(其实我觉得是(*,G)表项因为单播会通过此表项出接口列表转发),回应Register Stop消息。DR收到Stop重置注册抑制计时器
-
-
-
-
RPT向SPT切换
-
DR收到第一个组播报文时,可以获取到组播源地址,为了获得更小的报文延迟,会向组播源发送特定源组的Join消息沿途建立路由器建立(S,G)表示生成一棵接收者DR到组播源的SPT
-
此后,组播源的报文会沿着两个方向到达接收者侧DR,沿着SPT和沿着RP来的RPT。收到两封报文的路由器会丢弃从RP收到的报文并向RP发送Prune消息(即是RPT上RP的下游发出的Prune消息),而RP当出接口列表为空了,也向组播源DR发送Prune消息
-
1.向组播源发送特定源组的Join消息沿途建立路由器建立(S,G)表示生成一棵接收者DR到组播源的SPT
-
-
-
-
2.收到两封报文的路由器会丢弃从RP收到的报文并向RP发送Prune消息(即是RPT上RP的下游发出的Prune消息)
-
-
-
3.最终形成组播源到接收者的SPT
-
-
-
-
-
RP的选择
-
静态指定RP
-
但当网络规模比较大,RP转发组播信息量巨大,所以为了缓解RP优化RPT的拓扑结构
-
-
动态选举
-
在PIM-SM域中配置多个候选C-RP,通过BootStrap机制动态选举RP,使不同的RP服务于不同的组播组
-
BSR自举路由器是PIM-SM域的管理核心,一个域内只能有一个BSP,多个C-BSR备份自动选举BSR,它可以将所有C-RP的信息收集起来汇总成一个RP-Set集然后发布到整个PIM-SM域内
-
C-RP周期性单播发送宣告报文(包括C-RP地址,优先,服务组播组范围)给BSR,BSR收集所有C-RP信息汇总成RP-Set集封装在BootStrap报文中以组播方式发送到整个PIM-SM域内,路由器自行比较选举出RP
-
RP选举规则:
-
C-RP优先级,值低获胜
-
计算出的Hash值,较大获胜
-
C-RP地址,较大获胜
-
-
BSP选举规则:
-
优先级,值低获胜
-
接口IP地址,较大获胜
-
-
-
-
-
PIM-SSM可以看作是PIM-SM的子集,采用PIM-SM一部分技术实现PIM-SSM,机制包含邻居发现和DR选举以及加入过程,邻居发现和DR选举和PIM-SM机制相同,由于通过某些途径接收者事先知道了组播源的IP地址,加入过程有点区别
-
PIM-SSM接收者加入过程,必须
-
主机端DR会周期发送IGMPv3查询报文,若网段上有主机想要接入某特定源的组播报文,回复Report报文包含组播源S和组播组G。或当主机想要接收某组播源发送的报文时,也可以主动发起Report报文向DR发出请求。
-
DR收到Report报文,判断组播组是否属于SSM模型规定的232.0.0.0~232.255.255.255范围内,若是则维护组成员信息,建立(S,G)表项,随后DR向组播源发出Join消息,途径路由器建立(S,G)表项形成一棵从组播源到接收者的SPT
-