PIM-DM的工作机制
PIM(Protocol Independent Multicast)协议无关组播,直接封装在IP报文中,协议号为103,组播地址224.0.0.13
以组播组建立从组播源到组成员的转发路径,组播转发路径为树型结构,也称组播分发树
特点:无论网络中的组成员有多少,每条链路上的组播数据只能发送一份
被传递的组播数据在距离组播源源的分叉路口开始复制和转发
PIM有两种模式:
PIM-DM(密集模式)
PIM-SM(稀疏模式)
首先将组播数据报文扩散到各个网段,然后再裁剪掉不存在组成员的网段,通过周期性的“扩散—剪枝”,构建并维护一棵连接组播源和组成员的单向无环SPT
采用推(push)模式,来转发组播报文
目的:建立SPT树(最短路径树)
工作机制:
- 邻居发现
- 扩散和剪枝
- 状态刷新
- 嫁接
- 断言
PIM-DM邻居发现
使用Hello机制发现邻居
DR选举:
邻居发现:路由器周期性发送Hello消息来发现,建立并维护邻居关系(默认是30s,105s计时器超时)
PIM-DM构建SPT(扩散)
嫁接
在剪枝定时器超时之前(210s),如果由组成员加组的需求,需要通过嫁接机制,帮助组成员快速拿到组播流量
路由器收到组成员的报告后,根据报告报文中的组地址,查自身(S,G)表项,获取组播源S的信息
如果不存在对应的(S,G)表项,则无法嫁接,那么就要求全网路由器在组播源活跃期间都必须维护(S,G)表项的存在
PIM-DM模式在组播源活跃期间周期性扩散和剪枝,来保证(S,G)表项不会老化
当存在对应的(S,G)表项,路由器根据组播源的地址进行RPF检查,向去往组播源的RPF接口上的RPF邻居发送单播的嫁接报文
上游路由器接口收到嫁接报文后,将该接口加入到自身的(S,G)表项的下游接口中,引导组播流量的下发,同时恢复单播的嫁接确认报文
剪枝到哪,嫁接到哪
状态刷新
这是PIM-DM新增的机制,华为设备默认开启,思科设备默认关闭,在连接组播源的接口上开启状态刷新机制
由于PIM-DM周期扩散和剪枝,而嫁接的需求不多不频繁,带来带宽和设备资源的浪费
该功能开启后,连接组播源的第一跳路由器在组播源活跃期间,每隔60s向所有的pim邻居发送状态刷新报文,状态刷新报文中携带组播源的地址和组地址,当路由器收到状态刷新报文,则意味着组播源是活跃的,所以重置剪枝接口的剪枝计时器,维持剪枝机制,同时重置(S,G)的老化时间,这样全网路由器依然可以在组播源活跃期间维护(S,G)表项的存在,并保持接口剪枝状态,无需通过周期性扩散和剪枝维护(S,G)表项节省设备资源和链路带宽
Assert(断言)
断言:为了防止在链路上出现相同的组播数据,开发的机制
当路由器在某个下游接口发送(S,G)流量的时候,同时在这个接口也收到该(S,G)的流量,就能感知到该网段存在重复的组播流量,此时该接口就会发送断言报文
断言报文携带三个参数,进行断言的选举,断言的优胜者继续发送组播流量,断言的失败者,将断言失败的接口从自己的(S,G)表项中剪掉
断言报文中携带自身去往组播源地址的路由协议的优先级
自身去往该组播源地址路由的开销值
自身接口的IP地址
先比较: 路由协议优先级,越小越优,相同则比较开销,开销小的优先,开销值相同则比较接口的IP地址,越大越优
PIM-SM(稀疏模式)
使用“拉(Pull)模式”转发组播报文。
在SM中找RP(汇聚点,其实就是一台被设置为RP的网络设备)去拉组播流量
也就是要求全网的路由器都需先知道某个组的RP的地址
连接组成员的路由器会逐跳构建一个以RP为根的RPT树,即共享树,RPT的根是RP,用(*,G)描述
连接组播源的路由器只需要将组播流量分发给这个组的RP即可,构建一颗源到RP 的SPT树,SPT的根是组播源,用(S,G)描述
RPT树的建立过程:
1.当连接组成员的DR路由器收到IGMP报告报文,创建(*,G)表项,根据G查找对应的RP地址,收到报告报文的接口为(*,G)的下游接口
2.根据RP的地址进行RPF检查,找到去往RP的RPF接口,并发送(*,G)join报文,该RPF接口为(*,G)表项的上游接口
3.上游路由器收到(*,G)的join报文后,创建(*,G)表项,收到(*,G)Join的接口为下游接口,根据G的地址查RP地址,找到RP的RPF接口为上游接口,并继续向RPF接口发送(*,G)join,逐跳构建RPT树到RP
源到RP的SPT的建立过程
1.当连接组播源的DR路由器收到组播流量后,根据组地址查到RP的地址,将组播报文通过单播的注册报文(携带源信息和组信息)发送给RP
2.如果RP存在对应(*,G)表项,并存在下游接口,则解封装注册报文,根据RPT树转发组播流量,并根据组播源地址查找RPF接口,发送(S,G)join 逐跳构建SPT树,源端DR构建SPT树后,直接转发组播流量到RP,RP收到后发送注册停止报文
3.如果RP上不存在(*,G)表项或者没有下游接口,则直接注册停止报文给源端DR,源端DR将停止将组播报文封装在注册报文中,RP也不会发送(S,G)的join报文
SPT切换
- 用户端DR逐跳向源端DR发送(S,G)Join报文并创建(S,G)表项,建立源端DR到用户端DR的SPT。
- SPT建立后,组成员端DR会沿着RPT逐跳向RP发送剪枝报文,删除(*,G)表项中相应的下游接口。剪枝结束后,RP不再沿RPT转发组播报文到组成员端。
- 如果SPT不经过RP,RP会继续向源端DR逐跳发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP。