2024年3月18日发(作者:)
RPF机制,PIM-DM工作机制,PIM-SM工作机制
一、组播的RPF机制
路由器在接收到由源S 向组播组G 发送的组播报文后,首先查找组播转发表。
如果存在对应(S,G)表项,且该组播报文实际到达接口与Incoming interface 一致,
则向所有的outgoing interfaces 执行转发;
如果存在对应(S,G)表项,但是报文实际到达接口与Incoming interface 不一致,
则对此报文执行RPF 检查。如果检查通过,则将Incoming interface 修改为报文实际
到达接口,然后向所有的outgoing interfaces 执行转发。
如果不存在对应(S,G)表项,则对此报文执行RPF 检查。如果检查通过,则根据
相关路由信息,创建对应路由表项,然后向所有的outgoing interfaces 执行转发。
RPF 检查执行过程如下:
在单播路由表中查找RPF接口。单播路由表中汇集了到达各个目的地址的最短路径。
如果当前组播路径沿袭从组播源S 到客户端的SPT 或组播源S 到RP的源树,则路
由器以源S 的IP 地址为目的地址查找单播路由表,对应表项中的出接口为RPF接口。
路由器认为由该RPF 接口接收到的组播报文所经历的路径是从源S 到本地的最短路
径。
如果当前组播路径沿袭从RP 到客户端的RPT,则路由器以RP 的IP 地址为目的地址
查找单播路由表,对应表项中的出接口为RPF 接口。路由器认为由该RPF 接口接收
到的组播报文所经历的路径是从RP 到本地的最短路径。
将RPF 接口与组播报文的实际到达接口相比较,判断到达路径的正确性,从而决定是
否进行转发。
如果两接口相一致,那么就认为这个组播包是从正确路径而来,RPF 检查成功。
如果两接口不一致,将该组播报文丢弃。作为路径判断依据的单播路由信息可以来源
于任何一种单播路由协议、组播静态路由或者MBGP 路由协议。
当组播路径沿袭从组播源到客户端的SPT 时,RPF 检查过程如图13-1 所示。
RouterC 从接口POS1/0/0 接收到来自Source192.168.0.1/24 的组播报文,组播转发
表中没有相应转发表项。执行RPF 检查,发现单播路由表中到达网段192.168.0.0/2
4 对应的最短路径出接口是POS2/0/0,则判断该报文实际到达接口非RPF 接口。RP
F 检查失败,报文被丢弃。
RouterC 从接口POS2/0/0 接收到来自Source192.168.0.1/24 的组播报文,播转发表
中没有相应转发表项。执行RPF 检查,发现单播路由表中到达网段192.168.0.0/24
对应的最短路径出接口正是该报文实际到达接口。RPF 检查通过,对该报文进行转发。
RPF 的作用除了可以正确地按照组播路由的配置转发报文外,还能避免由于各种原因造成的
环路。
二、PIM-DM工作机制
PIM-DM 的工作过程可以概括为:邻居发现、构建SPT 树、嫁接阶段、Assert 机制。
邻居发现:
在PIM-DM 网络中,组播路由器需要使用Hello 消息来发现邻居,并维护邻居关系。通过比较
Hello 消息上携带的优先级和IP 地址,各路由器为多路由器网段选举指定路由器DR,充当IG
MPv1 的查询器。通过各路由器之间周期性地使用Hello 消息保持联系,从而构建和维护了S
PT 树。
构建SPT 树:
构建SPT 树的过程也就是扩散/剪枝过程(Flooding&Prune)。
PIM-DM 假设网络上的所有主机都准备接收组播数据,当某组播源S开始向组播组G发送数
据时,路由器接收到组播报文后,首先根据单播路由表进行RPF 检查,
如果检查通过则创建一个(S,G)表项,然后将数据向网络上所有下游PIM-DM 节点
转发,这个过程称为扩散(Flooding)
如果没有通过RPF 检查,则将报文丢弃。经过这个过程,PIM-DM 组播域内每个路由
器上都会创建(S,G)表项
如果下游节点没有组播组成员,则向上游节点发Prune 剪枝消息,通知上游节点不用
再转发数据到该分支
上游节点收到Prune 剪枝消息后,就将相应的接口从其组播转发表项(S,G)对应的
输出接口列表中删除
剪枝过程继续直到PIM-DM 中仅剩下了必要的分支,这就建立了一个以组播源S 为根的SPT
(一种组播转发树,被称为:源分布树或最短路径树)。
剪枝过程最先由叶子路由器发起,如图10-1 所示,没有接收者的路由器(例如和UserA 相连
的路由器)主动发起剪枝过程。
上述过程就称为扩散—剪枝过程。各个被剪枝的节点提供超时机制,当剪枝超时时重新开始扩
散—剪枝过程。PIM-DM 的扩散—剪枝机制周期性进行。
嫁接(Graft):
当被剪枝的下游节点需要恢复到转发状态时,该节点使用Graft 嫁接消息通知上游节点。例如
若图10-1 中的用户A 恢复接收组播数据,则Graft 嫁接消息逐跳向组播源S传递,中间节点
接收到Graft 嫁接消息后回应确认,从而先前被剪掉的分支恢复信息传输。
Assert 机制:
在共享网络(如Ethernet)中会出现相同报文的重复发送。例如LAN 网段上包含多台组播路
由器A、B、C 和D,各自都有到组播源S 的接收途径。如图10-2 所示。
当路由器A、B 和C 都从上游接收到组播源S 发出的组播数据报文后,都会向Ethernet网络
上转发该组播报文,这时下游节点组播路由器D 就会收到 三份完全相同的组播报文。为了避
免这种情况,就需要通过Assert 机制来选定一个唯一的转发者。网络中的各路由器通过发送
Assert 报文选出一条最优的路径,如果两条或两条以上路径的优先级和到组播源的开销相同,
则IP 地址最大的路由器获胜成为该(S,G)项的上游邻居,由它负责该(S,G)组播报文
的转发,而其他落选路由器则剪掉对应的接口以禁止转发信息。
三、PIM-SM工作机制
邻居发现:
邻居发现机制与PIM-DM 中的描述相同,也是通过各路由器之间彼此发送Hello 消息实现的,
这里不再介绍。
DR 选举:
借助Hello 消息可以为共享网络(如Ethernet)选举DR(Designated Router),DR 将作为
本网段中组播信息的唯一转发者。无论是和组播源S 连接的网络,还是和接收者连接的网络,
只要网络为共享媒介则需要选举DR,接收者侧DR 向RP 发送Join 加入消息;组播源侧DR
向RP 发送Register 注册消息。DR 选举如图10-3 所示。
共享媒介网络上的各路由器相互之间发送Hello 消息(携带DR 优先级选项),拥有最高DR
优先级路由器将被选举为本网络中的DR。假如优先级相同或网络中至少有一台路由器不支持
在Hello 报文中携带优先级,则拥有最大IP 地址的路由器被选举为DR。当DR 出现故障时,
接收Hello 消息将会超时,邻居路由器之间会触发新的DR 选举过程。
说明:
选举出的DR 对于PIM-SM 网络有意义;在PIM-DM 网络中,DR 主要是充当IGMPv1 的查
询器。
RP 发现:
RP 是PIM-SM 域中的核心路由器,在小型并且简单的网络中,组播信息量少,全网络仅依靠
一个RP 进行信息转发即可,此时可以在SM 域中各路由器上静态指定RP 位置。但是更多的
情况下,PIM-SM 网络规模都很大,通过RP 转发的组播信息量巨大,为了缓解RP 的负担同
时优化共享树的拓扑结构,不同组播组应该对应不同的RP,此时就需要自举机制来动态选举
RP,此时需要配置自举路由器BSR(BootStrap Router)。
BSR 是PIM-SM 网络里的管理核心,负责收集网络中Candidate-RP(C-RP)发来的Adverti
sement 宣告信息,然后将为每个组播组选择部分C-RP 信息以组成RP-Set 集(即组播组和
RP 的映射数据库),并发布到整个PIM-SM 网络,从而网络内的所有路由器(包括DR)都
会知道RP 的位置。RP 和BSR 在网络中的位置如图10-4 所示。
一个网络(或某管理域)内部只能选举出一个BSR,但可以配置多个Candidate-BSR(C-B
SR)。这样,一旦BSR 发生故障后,其余C-BSR 能够通过自动选举产生新的BSR,从而确
保业务免受中断。同样,一个PIM-SM 域内也可以配置多个C-RP,由BSR 机制计算出和每
个组播组对应的RP。
RPT 生成:
例如接收者为用户B、D 和E。当接收者加入一个组播组G 时,通过IGMP 报文知会与该主
机直接相连的叶子路由器,叶子路由器掌握组播组G的接收者信息,然后朝着RP 方向往上
游节点发送加入组播组的Join 消息。如图10-5 所示。
从叶子路由器到RP 之间途经的每个路由器都会在转发表中生成(*,G)表项,这些沿途经过
的路由器就形成了RP 共享树(RPT)的一个分支。其中(*,G)表示从任意源来的信息去
往组播组G。RPT 共享树以RP 为根,以接收者为叶子。
当从组播源S 来的发往组播组G 的报文流经RP 时,报文就会沿着已经建立好的RPT
共享树路径到达叶子路由器,进而到达接收者。
当某接收者退出组播组G 时,接收者侧DR 会逆着RPT 树朝RP 方向逐跳发送Prune剪枝消
息。第一个上游路由器接收到该剪枝消息,在其出接口列表中删除连接此下游路由器的接口,
并检查下游是否还存在组播组G 成员,如果没有则继续向上游转发该剪枝消息。
组播源注册:
为了向RP 通知组播源S 的存在,当组播源S 向组播组G 发送了一个组播报文时,与组播源
S 直接相连的路由器接收到该组播报文后,就将该报文封装成Register 注册报文,并单播发
送给对应的RP。如图10-6 所示。
当RP 接收到来自组播源S 的注册消息后,一方面解封装注册消息并将组播信息沿着RPT 树
转发到接收者,另一方面朝组播源S 逐跳发送(S,G)加入消息,从而让RP和组播源S 之
间的所有路由器上都生成了(S,G)表项,这些沿途经过的路由器就形成了SPT 树的一个分
支。SPT 源树以组播源S 为根,以RP为目的地。
组播源S 发出的组播信息沿着已经建立好的SPT 树到达RP,然后由RP 将信息沿着RPT 共
享树进行转发。当RP 收到沿着SPT 树转发的组播流量后,向与组播源S 直连的路由器单播
发送注册停止报文。组播源注册过程结束。
RPT 向SPT 切换:
针对特定的源,PIM-SM 通过指定一个利用带宽的SPT 阈值可以实现将最后一跳路由器(即离
接收者最近的DR)从RPT 切换到SPT。当最后一跳路由器发现从RP 发往组播组G 的组播报
文速率超过了该阈值时,就向单播路由表中到组播源S 的下一跳路由器发送(S,G)加入消
息,加入消息经过一个个路由器后到达第一跳路由器(即离组播源最近的DR),沿途经过的
所有路由器都拥有了(S,G)表项,从而建立了SPT 树分支。随后,最后一跳路由器向RP
逐跳发送包含RP 位的Prune 剪枝消息,RP 收到消息后会向组播源反向转发Prune 剪枝消息,
从而最终实现组播信息流从RPT 树切换到SPT 树。
切换到SPT 树后,组播信息将直接从组播源S 发送到接收者。通过RPT 树到SPT 树的切换,
PIM-SM 能够以比PIM-DM 更经济的方式建立SPT 转发树。
具体的RPT 到SPT 切换过程可以看这篇文章:/post/
发布评论