六、组播路由管理(IPv4)
组播路由管理(Multicast Route Management)主要介绍如何创建或更改组播路由来控制组播报文的转发,以及组播转发路径的检测和维护。
组播路由和转发与单播路由和转发类似,首先每个组播路由协议都各自建立并维护了一张协议路由表。各组播路由协议的组播路由信息经过综合形成一个总的组播路由表(Multicast Routing-Table)。
最后,路由器根据组播路由和转发策略,从组播路由表中选出最优的组播路由,并下发到组播转发表(Multicast Forwarding-Table),直接用于控制组播数据的转发。
通过组播转发表,整个网络建立了一条以组播源为根,组成员为叶子的一点到多点的转发路径。
为了实现转发路径的控制与维护,组播路由管理提供了一系列如下表1所示的特性。
组播网络中设备根据扮演的不同角色,分别需要维护5种不同类型的表项:IGMP组表项、IGMP路由表、组播协议路由表、组播路由表、组播转发表。下面介绍各表项信息在实现组播路由和转发中所起的作用。
1、组播IGMP组和路由表
IGMP组表项是由用户主机发送的IGMP加入报文触发创建的,用于维护组加入信息并通知组播路由协议(通常所说的为PIM协议)创建相应(*,G)表项。只要设备接口使能了IGMP并收到组加入报文就会为每个接口维护一个组加入信息表项,组表项形式如下所示:
Interface group report information of VPN-Instance: public net
Vlanif100(10.1.6.2):
Total 1 IGMP Group reported
Group Address Last Reporter Uptime Expires
225.1.1.2 10.1.6.10 00:02:04 00:01:17
IGMP组表项中主要字段含义如下表1所示:
而IGMP路由表也是由IGMP协议维护的,但它只有在接口没有使能PIM协议才会存在。它的作用主要是用来扩展组播路由表项的出接口。IGMP路由表项形式如下:
Routing table of VPN-Instance: public net
Total 1 entries
00001. (*, 225.1.1.1)
List of 1 downstream interface
Vlanif100 (10.20.20.1)
Protocol: IGMP
IGMP路由表项中主要字段含义如下表2所示:
从上面可以看出,生成出接口的协议类型为IGMP,表明当前接口没有使能PIM协议。如果使能了PIM协议,则以PIM协议优先。
2、组播协议路由表
组播协议路由表是运行各种组播路由协议时由各个协议自己维护的表项,是组播路由和转发的基础。现在应用最广泛的组播路由协议为PIM协议。PIM路由表项信息如下:
VPN-Instance: public net
Total 0 (*, G) entry; 1 (S, G) entry
(192.168.0.12, 227.0.0.1)
RP: 10.2.2.2
Protocol: pim-sm, Flag: SPT LOC ACT
UpTime: 02:54:43
Upstream interface: Vlanif 10
Upstream neighbor: NULL
RPF prime neighbor: NULL
Downstream interface(s) information:
Total number of downstreams: 1
1: Vlanif 20
Protocol: pim-sm, UpTime: 02:54:43, Expires: 00:02:47
PIM路由表项中主要字段含义如下表3所示:
3、组播路由表
组播路由表是组播路由管理模块生成的路由表。如果组播路由管理支持多种组播协议,那这里应该能看到多种协议生成的优选出的路由信息。比较类似于单播中同时运行OSPF、RIP、BGP多种路由协议时,然后汇总形成的IP路由表。组播路由表的主要功能就是下刷创建组播转发表。组播路由表项信息如下:
Multicast routing table of VPN-Instance: public net
Total 1 entry
00001. (192.168.0.2, 227.0.0.1)
Uptime: 00:00:28
Upstream Interface: Vlanif10
List of 2 downstream interfaces
1: Vlanif20
2: Vlanif30
组播路由表项中主要字段含义如下表4所示:
4、组播转发表
组播转发表是路由管理模块依据组播路由表信息生成的用于指导组播数据实际转发的表项,通常称为MFIB,通过display multicast forwarding-table可以查看到这类表项信息。这张表项与单播中FIB表的功能是一样的,用于指导组播数据转发。组播转发表项信息如下:
Multicast Forwarding Table of VPN-Instance: public net
Total 1 entry, 1 matched
00001. (10.10.10.2, 225.0.0.1)
MID: 10, Flags: ACT
Uptime: 00:08:32, Timeout in: 00:03:26
Incoming interface: Vlanif10
List of 1 outgoing interfaces:
1: Vlanif20
Activetime: 00:23:15
Matched 38264 packets(1071392 bytes), Wrong If 0 packets
Forwarded 38264 packets(1071392 bytes)
组播转发表项中主要字段含义如下表5所示:
从上面可以看出,真正指导组播数据转发的是组播转发表,转发表项中概括性记录了报文转发的统计信息。
5、组播RPF检查
1、RPF基本原理
在单播路由与转发中,单播报文沿着一条单点到单点的路径传输,路由器只需要考虑报文“需要到达的位置”,即目的地址,就知道从哪个接口转发出去。
组播路由与转发则不同。由于组播报文的目的地址为组播地址,只是标识了一组接收者,无法通过目的地址来找到接收者的位置,但是组播报文的“来源位置”,即源地址是确定的。
所以组播报文的转发主要是根据其源地址来保证转发路径正确性。
路由器收到一份组播报文后,会根据报文的源地址通过单播路由表查找到达“报文源”的路由,查看到“报文源”的路由表项的出接口是否与收到组播报文的入接口一致。如果一致,则认为该组播报文从正确的接口到达,从而保证了整个转发路径的正确性和唯一性。
这个过程就被称为RPF检查。
这里“正确的接口”通常被称为RPF接口,即RPF检查通过的接口。
2、RPF检查过程
除单播路由外,MBGP路由、组播静态路由也是RPF检查的依据。当路由器收到一份组播报文后,如果这三种路由表都存在,具体检查过程如下:
首先,通过报文源地址,分别从单播路由表、MBGP路由表和组播静态路由表中各选出一条最优路由。单播路由、MBGP路由的出接口为RPF接口,下一跳为RPF邻居。需要注意的是,组播静态路由实际上属于手工配置的组播路由,已经明确指定了RPF接口与RPF邻居。
然后,根据以下原则从这三条最优路由中选择一条作为RPF路由。
如果配置了按照最长匹配选择路由,则从这三条路由中选出最长匹配的那条路由;如果这三条路由的掩码一样,则选择优先级最高的那条路由;如果它们的优先级也相同,则按照组播静态路由、MBGP路由、单播路由的顺序进行选择。
如果没有配置按照最长匹配选择路由,则从这三条路由中选出优先级最高的那条路由;如果它们的优先级相同,则按照组播静态路由、MBGP路由、单播路由的顺序进行选择。
最后,路由器会将报文的入接口与RPF路由的RPF接口进行比较。如果一致则RPF检查通过,表明该报文来源路径正确,会将其向下游转发;如果不一致即RPF检查失败,表明该报文来源路径错误,就将其丢弃。
图1 RPF检查失败示例
如上图1所示,来自组播源10.10.2.2的组播流从Int1口到达路由器,路由器检查路由表,发现可以转发该组播流的端口为Int0,RPF检查失败。因此达到Int1口的数据流被丢弃。
图2 RPF检查成功示例
上图2中,来自组播源10.10.2.2的组播流从Int0口达到路由器,检查路由表发现入接口与接收该组播流的接口Int0一致,RPF检查成功。因此组播流将被正确的转发。
3、RPF检查在组播数据转发中的应用
组播路由协议通过已有的单播路由、MBGP路由或组播静态路由信息来确定上、下游邻居设备,创建组播路由表项。
运用RPF检查机制,来确保组播数据流能够沿组播分发树(路径)正确的传输,同时可以避免转发路径上环路的产生。
在实际组播数据转发过程中,如果对每一份接收到的组播数据报文都通过单播路由表进行RPF检查,会给路由器带来很大负担。
因此,路由器在收到一份来自源S发往组G的组播数据报文之后,首先会在组播转发表中查找有无相应的(S,G)组播转发表项:
如果不存在(S,G)转发表项,则对该报文执行RPF检查,将检查到的RPF接口作为入接口,创建组播路由表项,下发到组播转发表中。
其中,对RPF检查结果的处理方式为:如果检查通过,表明接收接口为RPF接口,向转发表项的所有出接口转发;如果检查失败,表明报文来源路径错误,丢弃该报文。
如果存在(S,G)转发表项,并且接收该报文的接口与转发表项的入接口一致,则向所有的出接口转发该报文。
如果存在(S,G)转发表项,但是接收该报文的接口与转发表项的入接口不一致,则对此报文进行RPF检查。对RPF检查结果的处理方式为:
若RPF检查选取出的RPF接口与入接口一致,则说明(S,G)表项正确,报文来源路径错误,将其丢弃。
若RPF检查选取出的RPF接口与入接口不符,则说明(S,G)表项已过时,于是把表项中的入接口更新为RPF接口。然后再根据RPF检查规则进行判断:如果接收该报文的接口正是其RPF接口,则向转发表项的所有出接口转发该报文,否则将其丢弃。
……