IP组播基础及工作原理——5

组播路由管理

“组播路由管理”主要包括组播路由和转发、RPF检查、组播静态路由和组播负载分担几个方面。通过组播路由可以控制组播报文的转发,通过RPF可以组播转发路径的检测和维护,通过单播路由、MBGP路由、组播静态路由可实现RPF检查,通过组播负载分担可实现不同转发路径下的流量分担。

一、组播路由和转发

“组播路由和转发”与“单播路由和转发”类似,首先,每个组播路由协议(典型代表为PIM和MBGP)都各自建立并维护了一张协议路由表(称之为“组播协议路由表”,这是组播路由的基础路由信息)。这就相当于单播路由中的各单播路由协议路由表,如RIP路由表、OSPF路由表、BGP路由表等。其次,各“组播协议路由表”的组播路由信息经过综合又形成一个总的“组播路由表”(Multicast Routing-Table),就相当于各单播路由协议的路由表最终形成了统一的IP路由表。最后,组播路由器再根据“组播路由和转发”策略,从组播路由表中选出最优的组播路由下发到“组播转发表”(Multicast Forwarding-Table,相当于单播路由中的三层转发表)中,直接用于控制组播数据的转发。通过“组播转发表”整个网络建立了一条以组播源为根,组成员为叶子的一点到多点的组播转发路径。

从以上可见,在整个组播路由中至少包括以下三张“表”:组播协议路由表、组播路由表、组播转发表。另外在二层组播中,运行IGMP/MLD协议的路由器上还要维护两张“表”,即“IGMP/MLD组项”和“IGMP/MLD路由项”。以IPv4网络为例,各表信息在实现组播路由和转发中所起的作用如下:

1、IGMP组和路由表

“IGMP组和路由表”包括“IGMP组表”和“IGMP路由表”两部分。IGMP组表是由用户主机发送的IGMP加入报文触发创建的,用于维护组成员加入信息并通知组播路由协议创建相应的(*,G)表项。只要设备接口使能了IGMP协议,并收到组成员加入报告报文就会为每个接口维护一个组加入信息表项。IGMP组表项可以通过display  igmp group命令查看,如下:


从上表可看出,IGMP组表项是由“组播组IP地址”、“最近一次从接口上发送组成员加入报文的组成员IP地址”、“最近一次更新至今的时间”和“表项即将过期的时间”四大部分组成。主要是前面两部分,通过这个表项的信息,就可以通过上层的组播路由协议为对应的组成员创建对应的组表项。

“IGMP路由表项”也是IGMP协议维护的,但它只有在接口没有使能PIM协议才会存在。它的作用主要是用来扩展组播路由表项的出接口。IGMP路由表项可通过display igmp routing-table命令查看,如下:


从上表可见,IGMP路由表项主要用途就是指定对应组播组的下游组成员接口列表,以便组播报文可以从这些出接口上发送给组播成员。

2、组播协议路由表

“组播协议路由表”是组播路由器在运行各种组播路由协议(典型代表就是PIM)时由各个协议自己维护的表项,是组播路由和转发的基础,也是对应组播路由协议自己进行组播数据路由的依据。就像单播路由中的RIP、OSPF等路由协议在同路由协议的网络中主要还是采用各自的路由表一样。PIM路由表项可通过display pim Routing-Table命令查看:


从上表可见,组播路由协议表项中包括的信息比较丰富,其中主要包括组播组(包括组播源IP地址和组播组IP地址)、RP地址、上游接口、上游邻居、RPF邻居和下游接口。这些信息就构成了对应组播路由协议自己的组播转发路径基本信息。同时为组播路由表提供基本信息。

3、组播路由表

“组播路由表”是组播路由管理模块生成的路由表,对应于单播路由中的IP路由表,是通过综合各种组播路由协议表信息而形成的。如果组播路由管理支持多种组播协议,那这里应该能够看到多种组播路由协议生成的优选路由信息。但目前PIM DM和PIM SM不能同时运行。组播路由表的主要功能就是创建组播转发表。组播路由表信息可通过display Multicast Routing-Table命令查看:


“组播路由表”信息比较简单,主要包括组播组和上游接口。主要用于生成“组播转发表”。

4、组播转发表

“组播转发表”是路由管理模块依据“组播路由表”信息生成的用于指导组播数据实际转发的表项,通常称为MFIB(组播转发信息库),这张表项与单播中FIB表的功能是一样的,用于指导组播数据转发。通过display Multicast forwarding-table命令查看:


从上可见,“组播转发表”中包括的信息主要用于控制组播报文的转发,包括了各组播路由协议自己的路由表中的一些基本信息(如组播组、入接口列表、出接口列表)和报文转发统计信息。组播转发表主要用于RPF检查(因为它包括了RPF检查过程中必须要检查的“入接口”信息),组播报文的路由最终仍是由对应的组播协议路由表来完成的。

二、RPF检查

在单播路由与转发中,单播报文是沿着一条点到点的路径传输的,路由器只需考虑报文需要到达的位置(即目的地址),就知道应该从哪个接口转发出去。组播路由与转发则不同,因为组播报文的目的地址为组播地址,只是标识了一组接收者,并不是一个可以唯一确定其位置的IP地址,所以无法通过“目的地址”来找到接收者的位置。但是组播报文的来源位置(即源地址)是可以确定的,所以组播报文的转发路径可根据其源地址的逆向查找来确保转发路径的正确性。具体过程如下:

(1)组播路由器在收到一份组播报文后,会根据报文的源地址通过单播路由表查找到达“报文源”的路由,查看到“报文源”的路由表的出接口是否与收到该组播报文的入接口一致。

(2)如果一致,则认为该组播报文是从正确的接口到达,从而保证了整个转发路径的正确性和唯一性。

(3)如果不一致,则认为该组播报文非法,将被直接丢弃。

以上这个过程就是“RPF”(逆向路径转发)检查。检查通过后的“正确的接口”通常被称为RPF接口。RPF检查过程如下:

1、RPF检查过程

在RPF检查的过程中除依据单播路由表外,还会依据MBGP路由表、组播静态路由表。且缺省情况下,组播静态路由、MBGP路由和单播路由的优先级是依次降低的。当路由器收到一份在这全个路由表中均存在对应路由表项的组播报文后,按照以下原则进行具体检查。

(1)首先,通过报文源地址(是单播IP地址)分别从单播路由表、MBGP路由表和组播静态路由表中各选出一条最优路由。单播路由、MBGP路由的出接口为RPF接口,下一跳为RPF邻居;而组播静态路由实际上属于手工配置的组播路由,已经明确指定了RPF接口与RPF邻居。

(2)根据以下原则从这三条最优路由中选择一条作为RPF路由。

①如果配置了按照最长匹配原则(也就是掩码最长,路由最精确)来选择路由,则从这三条路由中选出最长匹配的那条路由,如果这三条路由的掩码长度一样,则选择优先级最高的那条路由;如果它们的优先级也相同,则按照组播静态路由、MBGP路由、单播路由的先后顺序进行选择。

②如果没有配置按照最长匹配原则来选择路由,则从这三条路由中选出优先级最高的那条路由;如果它们的优先级相同,则也按照组播静态路由、MBGP路由、单播路由的先后顺序进行选择。

(3)最后,路由器会将报文的入接口与上面最终选择的RPF路由的RPF接口进行比较。如果一致则RPF检查通过,表明该报文来源路径正确,会将其向下游转发;如果不一致即RPF检查失败,表明该报文来源路径错误,就将其丢弃。


如上图,来自组播源152.10.2.2的组播流从S1口到达路由器。路由器检查IP路由表,发现连接152.10.0.0/16网络的接口是S0(表示可以转发该组播流的端口为S0),于是RPF检查失败,达到S1口的数据流被丢弃。

如果来自组播源152.10.2.2的组播流是从S0口达到路由器,则在检查IP路由表时发现入接口与接收该组播流的接口S0一致,RPF检查成功,组播流将被正确地转发。

2、RPF检查在组播数据转发中的应用

组播路由协议通过已有的单播路由、MBGP路由或组播静态路由信息来确定上、下游邻居设备,创建组播路由表项。运用RPF检查机制来确保组播数据流能够沿组播分发树(路径)正确地传输,同时可以避免转发路径上环路的产生。

在实际组播数据转发过程中,如果对每一份接收到的组播数据报文都通过单播路由表进行RPF检查会给路由器带来很大的负担。因此,路由器在收到一份来自原S发往组G的组播数据报文之后,首先会在组播转发表中查找有无相应的(S,G)组播转发表项。

(1)如果不存在(S,G)转发表项,则对该报文执行RPF检查,检查通过后将检查到的RPF接口作为入接口,创建组播路由表项,下发到组播转发表中,这样下次来自相同组播组的报文可以不再进行RPF检查。

(2)如果存在(S,G)转发表项,且接收该报文的接口与对应的组播转发表项的入接口一致,则向所有的出接口转发该报文。

(3)如果存在(S,G)转发表项,但是接收该报文的接口与对应的组播转发表项的入接口不一致,则对此报文进行RPF检查。对RPF检查结果的处理方式如下:

①如果经过RPF检查得出的RPF接口与对应的组播转发表项的入接口一致,则说明在组播转发表中的(S,G)表项是正确的,但报文的来源路径有错误,将其丢弃。

②若RPF检查选取出的RPF接口与对应的组播转发表项的入接口不符,则说明在组播转发表中的(S,G)表项已过时,于是把对应的组播转发表项中的入接口更新为RPF接口。然后根据RPF检查规则进行判断:如果接收该报文的接口正是其RPF接口,则向转发表项的所有出接口转发该报文,否则将其丢弃。

三、组播静态路由

组播静态路由是RPF检查的重要依据之一。根据不同的应用场景,组播静态路由有如下两种作用。但组播静态路由仅在配置的组播路由器上生效,不会引入或广播给网络中的其他路由器。

1、改变RPF路由

在相同拓扑的网络中可以通过配置组播静态路由改变RPF路由,为组播数据创建一条与单播不同的传输路径。


如上图所示,RouterC到组播源(Source)的RPF邻居为RouterA,从Source发出的组播报文会沿着Source——>RouterA——>RouterC的路径传输。此时,如果在RouterC上配置组播静态路由,指定RouterC的RPF邻居为RouterB(也就相当于“下一跳”),则从Source发出的组播报文的传输路径将发生改变,改为沿Source——>RouterA——>RouterB——>RouterC的路径传输,区别于原来的单播路由路径,可以实现单播和组播报文的分流。

2、衔接RPF路由

当某组播网络中的单播路由被阻断时,组播数据流传输将因为没有RPF路由而中断。此时,可以通过配置组播静态路由,生成新的RPF路由,从而在设备上创建新的组播转发表项来指导组播数据的转发。


如上图,Domain1和Domain2是单播路由隔离的两个路由域(如RIP和OSPF),Domain2中的Receiver无法接收来自组播源的组播数据。此时在Domain2中的RouterC、RouterD上分别配置组播静态路由,重新指定其RPF邻居(RouterC邻居指定为RouterB,RouterD邻居指定为RouterC),这样Receiver就能接收组播源的数据流了。从中可以看出,通过配置组播静态路由可以绕过单播路由中路由不通的问题,独立地创立组播传输路径。

四、组播负载分担

“负载分担”是指如果发往某一目的地的数据流存在多条等价的转发路径,就将数据在这多条路径上转发,以达到分流的目的。在进行数据转发时,每一条路径上转发的数据流量并不一定相同,转发流量多少需要根据负载分担方式来决定。

缺省情况下,组播报文转发过程中如果存在多条等价的最优转发路径,按照RPF检查对等价路由的处理规则分两种情况。

(1)如果这几条等价路由都是来自同一个路由表,比如单播路由表、组播静态路由表或者MBGP路由表中的一种,则选取下一跳IP地址最大的路由作为RPF路由。

(2)如果这几条等价路由来自不同的路由表,首先会比较路由优先级,再比较掩码长度(掩码长度越长越优先,因为这样的路由更精确)选择一条路由作为RPF路由。如果上述都相同,则设备会根据一定的函数计算选取出一条路由作为RPF路由。

无论上述哪种情况,设备在RPF检查时都只会选取出一条路由作为RPF路由,进行组播报文转发。

要实现组播负载分担,就需要在多条等价的最优转发路径上根据一定的负载分担方式同时转发流量,不按照以上介绍的RPF检查规则来选取一条最佳的RPF路由。

如下图左边所示,组播源Source向组播组G发送组播流,路由器RouterA和RouterD之间运行某种IGP协议(如OSPF),RouterA——>RouterB——>RouterD和RouterA——>RouterC——>RouterD是两条等价转发路径。缺省情况下,根据RPF检查规则,组播流会从Int0端口转发,因为Int0接口的IP地址比Int1接口IP地址大。配置组播负载分担之后,就不会根据下一跳地址来选取转发路径,此时RouterA——>RouterB——>RouterD和RouterA——>RouterC——>RouterD这两条路径都会转发组播流,如右边图所示。


对于来自任意源组播(*,G)或指定源(S,G)组播的数据流,“组播负载分担”提供了不同的负载分担方式来支持不同应用场合。

1、基于组播组G的负载分担


如上图,从同一源Source发往不同组播组G(G1~G10)的数据流,沿途的Router7、Router6和Router5分别存在两条来自源Source的等价路由。组播路由器经过一系列算法,从等价路径中为不同的组播组G选择一条合适的路径作为转发路由。实现负载分担后,不同转发路径上的流量属于不同的组播组G。

2、基于组播源S的负载分担


如上图,从不同源Source(S1~S10)发送相同组播组G的数据流,沿途的Router7、Router6和Router5也分别存在两条来自源Source的等价路由。组播路由器经过一系列算法,从等价路径中为不同的组播源S选择一条合适的路径作为转发路由。实现负载分担后,不同转发路径上的流量属于不同的组播源S。

3、基于组播源组(S,G)的负载分担


如上图,从不同源Source(S1~S10)发往不同组播组G(G1~G10)的数据流,沿途的Router7、Router6和Router5也分别存在两条来自源Source的等价路由。组播路由器经过一系列算法,从等价路径中为不同的组播源组(S,G)选择一条合适路径作为转发路由。实现负载分担后,不同转发路径上的流量属于不同的组播源组(S,G)。

4、其他负载分担方式

除以上几种负载分担方式,还有以下几种负载分担方式:

(1)稳定优先负载分担。当组播网络中发生路由震荡时,如果组播路由器频繁调整负载会加剧路由的不断振荡。配置稳定优先负载分担的路由器不会立刻调整负载,而是等到振荡结束后才进行调整。当网络拓扑稳定无振荡时,路由器上来自同一个组播源的路由表项会均衡分布在各等价路径上。

(2)均衡优先负载分担。当组播网络中发生路由振荡时,配置均衡优先负载分担的路由器,会立刻重新调整负载到均衡状态。当网络拓扑稳定无振荡时,路由器上来自同一组播源的路由表项会均衡分布在各等价路径上。

(3)不均衡负载分担。是对上述两种“稳定优先”和“均衡优先”负载分担方式的补充,不改变这两种方式的基本行为,只是让路由表项按比例分布在各等价路径上。实际网路中各路径的负载能力存在差异,或者需要人为干预某路径上的负载。不均衡负载分担模式允许在路由器指定接口上配置权值,权值越大的接口所在路径上分布的路由表项越多,从而解决上述问题。

 


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页