IP组播基础及工作原理实战——6

二层主播基础及工作原理

二层组播是指组播信息在数据链路层的按需分发。二层组播的基本原理是使二层设备可以识别组播组IP地址建立组播组IP地址与端口对应关系的组播转发表,指导组播数据在数据链路层的转发。

一、二层主播概述

在很多情况下,组播报文要不可避免地经过一些二层交换设备,尤其是在局域网环境里,许多接入交换机都是二层的。如下图,在组播用户和三层组播设备Router之间,经过二层交换机Switch。

Router将组播报文转发至Switch以后,Switch负责将组播报文转发给组播用户。由于组播报文的目的IP地址为组播组IP地址,在二层设备上是学习不到这一类MAC表项的,因此,组播数据报文就会在所有接口进行广播,和它在同一广播域内的组播成员和非组播成员都能收到组播数据报文。浪费网络带宽,影响网络信息安全。

通过以下这些二层组播技术,可以控制这种广播。

(1)IGMP Snooping/MLD Snooping:二层设备侦听组播用户和上游路由器之间的IGMP/MLD报文建立二层组播转发表,控制组播数据报文转发。

(2)IGMP Snooping Proxy/MLD Snooping Proxy:IGMP Snooping/MLD Snooping协议报文代理,可减少协议报文转发,减低上游设备的性能压力,节省上游网络带宽。

(3)组播VLAN:上游设备只把组播数据传送给一个指定VLAN,然后由此VLAN在二层设备上把组播流复制到其他VLAN,可大大减少上游网络带宽的浪费。

(4)二层组播CAC(Call Admission Control,呼叫许可控制):控制组播组的数量和带宽,避免出现接入带宽需求超出汇聚网络带宽的情况,保证大多数用户的服务质量。

(5)基于VLAN的可控组播:控制用户加入某个组播组的权限。当用户请求加入某个组播组时,二层设备必须对这个请求进行验证,拒绝非法或越权的请求。

此外,通过二层组播SSM Mapping,还可使IGMPv1和IGMPv2版本的主机享受SSM的组播服务。

二、IGMP Snooping/MLD Snooping基本原理

IGMP Snooping/MLD Snooping是二层组播的基本功能,可以实现组播数据数据链路层的转发和控制。当主机和上游三层设备之间传递的IGMP/MLD协议报文通过二层设备时,IGMP Snooping/MLD Snooping分析报文携带的信息,根据这些信息建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。

IGMP Snooping用于IPv4组播网络,MLD Snooping用于IPv6组播网络。除了使用的地址和协议报文名称不同,二者实现原理相同。

当组播数据从三层组播设备Router转发下来以后,处于接入边缘的二层设备Switch负责将组播信息转发给用户。

当二层设备没有运行IGMP Snooping时,组播数据在二层被广播(因为二层交换机无法识别组播IP地址),包括非组播成员都会收到该组播报文;而当二层设备运行了IGMP Snooping后,已知组播组的组播数据不会在二层广播,而是会被组播发送给指定的接收者,没有加入对应组播组的用户不会收到组播报文。因为使能IGMP Snooping功能后,二层设备会侦听主机和上游三层设备之间交互的IGMP报文通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。

1、端口角色

在二层组播IGMP Snooping协议中涉及几种端口角色,下图所示:

二层交换机上的路由器端口和成员端口是二层组播转发表项中的一个重要信息代表出接口。其中路由器端口相当于上游接口成员端口相当于下游接口。通过协议报文学习到的端口,对应的为动态表项;而手工配置的端口,对应的为静态表项。

除了出接口外,每条二层组播转发表项还包括组播组地址和VLAN编号组播组地址,可以为组播IP地址,也可以为组播IP地址映射后的组播MAC地址。按照IP地址转发的模式可以避免MAC地址转发模式中的地址重复问题。

VLAN编号指定了二层广播域范围。如果使用了组播VLAN功能VLAN编号为组播VLAN的编号,出VLAN编号为主机所在的用户VLAN编号否则入VLAN编号和出VLAN编号均为主机所在VLAN的编号

2、工作机制

在二层设备运行了IGMP Snooping后,收到不同的IGMP协议报文会进行不同的处理,并在此过程中建立起二层组播转发表项。

此外,当二层设备收到PIM Hello报文时,会向VLAN内除接收接口外的其他所有接口转发,并对接收接口做如下处理。

(1)如果路由器端口列表中已包含该动态路由器端口,则重置老化定时器。

(2)如果路由器端口列表尚未包含该接口,则将其添加进去,并启动老化定时器。

收到PIM Hello报文时,动态路由器端口的老化时间为Hello报文中Holdtime字段的值。

如果是静态配置路由器端口,二层设备收到IGMP Report和Leave报文也会向静态路由器端口转发。如果配置了静态成员端口,则转发表项中会添加该接口为出接口。

二层设备上建立了二层组播转发表项以后,在接收到组播数据报文时会依据报文所属VLAN和报文的目的地址(即组播地址)查找转发表项是否存在对应的“出接口信息”。如果存在,则将报文发送到所有组播组成员端口;如果不存在,则丢弃该报文或将报文在VLAN内广播。

三、IGMP Snooping Proxy/MLD Snooping Proxy基本原理

为了减少上游三层设备收到的IGMP Report/MLD Report报文和IGMP Leave/MLD Done报文的数量,可以在二层设备上部署IGMP Snooping Proxy/MLD Snooping Proxy功能,使其能够代理下游主机来向上游设备发送成员关系报告报文。配置了IGMP Snooping Proxy/MLD Snooping Proxy功能的设备称为IGMP Snooping/MLDSnooping代理,在其上游设备看来,它就相当于一台主机;在其下游设备看来,它相当于一台查询器

IGMP Snooping Proxy用于IPv4组播网络,MLD Snooping Proxy用于IPv6组播网络。工作原理如下:

1、在组播报文传递上的改变

如下图所示,当Switch上运行IGMP Snooping时,Switch对上游Router的Query报文和下游主机的Report/Leave报文都是原封不动地转发。当网络中存在大量用户主机时,冗余的IGMP报文给上游设备带来处理压力。

当Switch上配置IGMP Snooping Proxy时,Switch可以终结上游的IGMP Query报文,并且自己构造Query报文向下游主机发送;终结下游主机的IGMP Report/Leave报文,并自己构造统一的Report/Leave报文向上游发送。

部署IGMP Snooping Proxy后,三层设备会感知到下面只有一个用户,二层设备直接跟下游用户和三层设备进行对话,而不再是一个完全透明的转发角色。IGMP Snooping Proxy可有效减少IGMP协议在网络中的交互程度,节约带宽;有效屏蔽来自下游主机的大量协议报文,并接管了对主机的查询器功能,分担上游三层设备的性能负荷。

2、工作机制

运行IGMP Snooping Proxy的设备会参与二层组播转发表的建立和维护,依据转发表向有需要的用户主机发送组播数据。

IGMP Snooping运行在数据链路层,用于管理和控制组播组,解决组播报文在二层广播的问题。运用了IGMP Snoopig的设备通过监听主机发出的IGMP报文,判断主机是否期望加入或离开某个组播组,从而建立MAC组播地址表。

IGMP Snooping工作机制

● IGMP Snooping运行在链路层,是二层以太网交换机上的组播约束机制,用于管理和控制组播组。

● 当二层以太网交换机收到主机和路由器之间传递的IGMP报文时, IGMP Snooping分析IGMP报文所带的信息。当监听到主机发出的IGMP主机报告报文时,交换机就将该主机加入到相应的组播表中;当监听到主机发出的IGMP离开报文时,交换机就将删除与该主机对应的组播表项。通过不断地监听IGMP报文,交换机就可以在二层建立和维护MAC组播地址表。之后,交换机就可以根据MAC组播地址表转发从路由器下发的组播报文。

● 没有运行IGMP Snooping时,组播报文将在二层广播,运行IGMP Snooping后,报文将不再在二层广播,而是进行二层组播。

● 以太网交换机通过运行IGMP Snooping实现对IGMP报文的侦测,并为主机及其对应端口与相应的组播组地址建立映射关系。为实现IGMP Snooping,二层以太网交换机对各种IGMP报文的处理过程如胶片所示:

● 当收到IGMP通用查询报文时,如果收到通用查询报文的端口原来就是路由器端口,以太网交换机就重置该端口的老化定时器;如果收到通用查询报文的端口原来不是路由器端口,则交换机启动对该端口的老化定时器。

● 当以太网交换机收到IGMP特定组查询报文时,只向被查询的IP组播组发特定组查询。

● 当以太网交换机收到IGMP报告报文时,首先判断该报文要加入的IP组播组对应的MAC组播组是否已经存在。 如果不存在则新建MAC组播组,并将接收报告报文的端口加入该MAC组播组中,同时启动该端口的老化定时器,将该端口所属VLAN下存在的所有路由器端口加入到此MAC组播转发表中,而且新建IP组播组,并将接收报告报文的端口加入到IP组播组中。

如果该报文对应的MAC组播组已经存在,但是接收报告报文的端口不在该MAC组播组中,则将接收报告报文的端口加入MAC组播组中并启动该端口的老化定时器,然后判断此报文对应的IP组播组是否存在:如果不存在,则新建IP组播组并把接收报告报文的端口加入到IP组播组中,如果存在则将接收报告报文的端口加入到IP组播组中。

如果该报文对应的MAC组播组已存在,并且接收报告报文的端口也已经存在于该MAC组播组,则仅重置接收报告报文的端口上的老化定时器。——从这段描述中可以看出,在二层交换机中建立的组播组有两种,一个是MAC组播组,一个是IP组播组,这个跟IP组播地址与组播MAC地址映射有关,可能多个IP组播地址映射到一个MAC组播地址

利用IGMP Snooping建立和维护组播组的过程:

● 1、在上图中, PC2希望加入组播组224.1.2.3,因此以组播方式发送一个IGMP成员报告给该组,报告中具有目的MAC地址0x0100.5e01.0203。最初转发表上没有这个组播MAC地址的表项,所以该报告被扩散到交换机的所有端口,包括与交换机CPU相连的内部端口0;

● 2、当CPU收到PC2组播的IGMP报告时, CPU利用IGMP报告中的信息建立了一个转发表项,此表项包括PC2的端口号,连接路由器的端口号和连接交换机内部CPU的端口号;

● 3、形成此转发表项的结果是使后面任何目的地址为0x0100.5e01.0203的组播帧都被抑制在端口0、 1和3,而且不向交换机其他端口扩散。

● 4、假设PC4要加入该组,并主动发一个IGMP报告给该组,交换机根据转发表项向外部端口1和3转发此报告。交换机的CPU也收到此报告,它在转发表项上为MAC地址0x0100.5e01.0203增加一个端口(端口5)。

——这里有个疑问,CPU建立组播MAC地址表项时,为什么会加入端口1,按照前面的描述,这个端口应该是在PIM普遍组查询报文来的时候加入的

二层组播SSM Mapping

SSM(指定源组播)与ASM(任意源组播)技术相比就是SSM可以指定组播源,具有更好的安全性。在三层IGMP和MLD组播协议中,只有IGMPv3或MLDv2版本协议支持SSM,如果用户主机只能运行IGMPv1/IGMPv2或MLDv1,则不能直接使用SSM模型。这时,为了使其能够使用SSM服务,则需要借助SSM Mapping功能。

同样,在二层组播中也可通过SSMMapping实现对SSM服务的支持,但是目前只实现了IPv4组播网络中的二层SSM Mapping,即基于IGMP Snooping的SSM Mapping。通过在IGMP Snooping协议的二层设备上静态配置SSM地址的映射规则,可IGMPv1IGMPv2 Report报文中的(*G)信息转化为对应的(S,G)信息,以提供SSM组播服务。S表示组播源,G表示组播组,*表示任意组播源。缺省情况下,SSM组播组IP地址范围为232.0.0.0~232.255.255.255。

如下图,3个接收者(Receiver)运行不同的IGMP版本,且HostB和HostC无法升级到IGMPv3。如果要为该网段中的所有主机提供SSM服务,则必须在二层设备Switch上使用二层组播SSM Mapping功能。

这时,如果在Switch上配置了如下组播地址和组播源地址映射关系:

(1)232.1.1.0/24——>10.10.1.1

(2)232.1.2.0/24——>10.10.2.2

(3)232.1.3.0/24——>10.10.3.3

经过映射后,Switch在收到HostB和HostC的成员报告报文时,首先判断报文携带的组地址是否在SSM范围内,经过映射后则肯定在SSM范围内,此时就可以根据配置的映射规则生成如下所示的组播表项。

(1)232.1.1.1(来自HostC):(10.10.1.1,232.1.1.1)

(2)232.1.2.2(来自HostB):(10.10.2.2,232.1.2.2)

如果Report报文携带的组地址在SSM范围内,但是Switch上没有对应的SSM Mapping规则,则无法提供SSM服务,丢弃该报文。如果Report报文携带的组地址不在SSM范围内,则只提供ASM服务。

组播VLAN

IGMP Snooping/MLD Snooping二层组播侦听功能很好地弥补了组播数据在二层广播网络只能进行广播的不足。但是这种功能仍是基于一个广播域即基于VLAN来实现的。如果不同VLAN的用户有相同的组播数据需求时上游路由器仍然需要发送多份相同报文到不同VLAN。这时就得使用组播VLAN功能了。他实现了组播路由器只需发送一份数据就可在二层网络设备上进行跨VLAN组播复制,大大减轻了组播路由器和网络的负担。

1、组播VLAN基本原理

如下图所示,属于不同VLAN(VLAN2和VLAN3)的用户需要接收相同的组播流,上游路由器RouterA就会把组播数据在每个VLAN内都复制一份然后发送给下游交换机SwitchA。这样,既造成了路由器与二层设备之间带宽的浪费,也增加了路由器额外的负担。

通过在二层设备上配置组播VLAN功能就可以解决这个问题。如在图中的Switch上部署了组播VLAN功能后,上游路由器不必在每个用户VLAN(VLAN2和VLAN3)内都复制一份组播流,而组播路由器只需向组播VLANVLAN4)内复制一份数据发送给二层设备。这样就避免了组播流在上游设备的重复复制。

在这里涉及两种VLAN组播VLAN和用户VLAN“组播VLAN”是网络侧接口(也就是连接组播路由器的接口)所属VLAN,用于实现组播流的汇聚“用户VLAN”是用户侧接口(也就是连接组播接收者的接口)所属VLAN,用于接收组播VLAN复制、发送的组播数据副本一个组播VLAN可以绑定多个用户VLAN,但一个用户VLAN只能加入一个组播VLAN

2、组播VLAN的扩展

通常情况下,组播VLAN的应用场景是通过组播VLAN将相同的组播数据复制分发到不同的用户VLAN中来节省网络带宽。但是,有时候也会存在单个用户VLAN需要接收多个组播VLAN的组播数据的场景。为此,组播VLAN进行了如下扩展:

(1)组播VLAN多对多

“组播VLAN多对多”是对传统的“组播VLAN一对多”(即多个用户VLAN可以加入一个组播VLAN,但是一个用户VLAN不能加入多个组播VLAN)的补充。如下图,用户VLAN(UVLAN)需要接收来自两个组播VLAN(MVLAN1、MVLAN2)的组播数据。通过组播VLAN多对多功能实现一个用户同时接收两个组播VLAN数据的过程如下:

①在用户VLAN上使能静态组播流触发功能。

②在组播VLAN上分别配置Source1、Source2的静态组播流。

③用户VLAN分别加入两个组播VLAN。

从上述过程可见,组播VLAN多对多主要是依靠静态组播流触发机制+组播VLAN一对多功能共同来完成

(2)基于接口的组播VLAN

在组播VLAN中还会出现这样一种场景:网络中的组播业务批发给了多个ISP,单个用户VLAN中不同用户定制了不同的ISP所提供的组播业务。这时候如果再使用组播VLAN多对多功能,就会造成只定制某ISP提供的组播业务的用户能够接收到其他ISP提供的组播业务。

为了保证相同用户VLAN中的不同用户之间的组播业务隔离,可通过为不同ISP分配一个VLAN作为组播VLAN,然后基于接口将组播VLAN与用户VLAN进行绑定来实现,这就是基于接口的组播VLAN。这样,ISP对应的组播VLAN就与{用户接入接口、用户VLAN}形成了一一映射的关系,用户接入接口就不会向下游转发未绑定的组播VLAN的数据。但只有IGMP Snooping支持基于接口的组播VLAN。

如上图,组播业务批发给了ISP1、ISP2两个服务商,用户VLAN中的Host1和Host2定制的是ISP1提供的组播服务,而Host3和Host4定制的是ISP2提供的组播服务。为了使两个ISP提供的组播数据不会发送到所有的用户主机上,向ISP1ISP2分别配置一个组播VLANMVLAN1MVLAN2),将Host1Host2的接入接口与MVLAN1绑定,将Host3Host4的接入接口与MVLAN2绑定。这样,ISP1提供的组播数据只向Host1和Host2发送,ISP2提供的组播数据只向Host3和Host4发送。

 

组播路由管理

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

一、组播路由和转发

“组播路由和转发”与“单播路由和转发”类似,首先,每个组播路由协议(典型代表为PIMMBGP各自建立并维护了一张协议路由表(称之为“组播协议路由表”,这是组播路由的基础路由信息)。这就相当于单播路由中的各单播路由协议路由表,如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)不均衡负载分担。是对上述两种“稳定优先”和“均衡优先”负载分担方式的补充,不改变这两种方式的基本行为,只是让路由表项按比例分布在各等价路径上。实际网路中各路径的负载能力存在差异,或者需要人为干预某路径上的负载。不均衡负载分担模式允许在路由器指定接口上配置权值,权值越大的接口所在路径上分布的路由表项越多,从而解决上述问题。

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值