5.4 MOSPF操作
MOSPF(Multicast OSPF,多播OSPF)从两个方面对DVMRP做了改进。首先,MOSPF是链路状态协议,而DVMRP是距离矢量协议,两者的不同之处实际上就是链路状态协议与距离矢量协议相比所具备的优势——更好的收敛特性、更好的环路避免能力以及更少的周期性控制流量。其次,MOSPF在密集拓扑结构下具备更好的扩展性,这一方面归结于链路状态算法,另一方面与MOSPF通过泛洪/剪除机制使用显式加入(而不是隐式加入)有关。
顾名思义(如RFC文件名所描述的那样10),多播OSPF并不是一个无OSPF完全独立的路由协议,而是对OSPF协议的扩展。为支持多播能力,对OSPF进行了3个方面的扩展。首先,定义了一个新的LSA,被称为组成员关系LSA(Group Membership LSA),该LSA为 LSA类型6。
扩展后的选项(Options)字段包含一个被称为MC bit的标记,用来指示支持IP多播。在《TCP/IP路由技术(第一卷)》的第9章中描述的选项字段被携带在OSPF Hello包、数据库描述(Database Description)包以及所有的LSA中,MC bit的含义是OSPF和MOSPF路由器可以在同一个互联网络中混合使用,MOSPF路由器利用MC bit来表示其支持IP多播。虽然MC bit不匹配的路由器仍然处于邻接状态,但只有在数据库描述包中设置了MC bit的邻居才能在数据库同步进程中交换组成员关系LSA,并且只有设置了MC bit的LSA才被用于计算多播最短路径树。
最后,扩展后的路由器LSA(Router LSA)中的rtype字段包含了一个被称为W bit的标记,该标记表示发信路由器是一个万能多播接收路由器(wildcard multicast receiver),万能多播接收路由器的定义请参见5.4.2小节。
就像单播OSPF使用基于Dijkstra的SPF算法计算去往单播目的地的最短路径树一样,MOSPF也要计算从多播源到多播目的地的最短路径树。单播树和多播树都是从同一个链路状态数据库中计算得到的,但两者之间有一些差异,单播SPF树的根是源路由器,而多播SPF树的根是源多播子网。
5.4.1 MOSPF基础
描述MOSPF的最好环境就是连接了组成员的本地多路接入介质,与单播OSPF相似,MOSPF会选举一个DR(Designated Router,指派路由器)和一个BDR(Backup DesignatedRouter,备份指派路由器)。虽然连接在该介质上的所有MOSPF路由器都在本地链路上运行 IGMP以发现组成员,但只有DR发送IGMP成员关系查询消息并侦听IGMP成员关系报告消息。
回顾表5-4,MOSPF使用的是显式加入机制,当组成员发送一条指示其希望加入某多播组的IGMP消息时,MOSPF DR会在其本地组数据库(local group database)中创建一条表项,本地组数据库记录的是多播组以及组成员所驻留的网络。例如,图5-33中的路由器连接了3个子网,其中的两个子网上有3个组成员,位于不同子网的两个组成员属于同一个组,路由器只需要知道多播组以及该多播组成员所在的子网即可,而无需了解每个单独的组成员。
图5-33 本地组数据库记录的是所连接的组以及组成员所驻留的子网信息
之后,DR会向每个所连接的多播组发送一个组成员关系LSA,该LSA指定了组地址和发信路由器ID,并列出该路由器连接的驻留了组成员的所有网络。在某些情况下,路由器本身也可以运行某些多播应用程序,让其也成为组成员。LSA中包含了一个类型字段,路由器可以通过该字段来表示其正将自己宣告为组成员。
然后LSA被泛洪到发信路由器所在的整个区域,组成员关系LSA(类型6 LSA)在以下两个方面类似于网络LSA(类型2 LSA)。
• 只有一个指派路由器能够发起组成员关系LSA;
• 组成员关系LSA仅在区域范围内有效,也就是说,组成员关系LSA不能被泛洪到发信路由器的区域之外。
LSA泛洪的目的是确保区域内的所有MOSPF路由器都能得到源自本区域的所有组成员关系LSA。与单播OSPF类似,一个区域内的所有MOSPF路由器都有相同的链路状态数据库,OSPF链路状态数据库与给定区域内MOSPF数据库之间的惟一差别就是包含类似类型6 LSA。
通过同步化的数据库,区域内的每台MOSPF路由器都能计算出相同的最短路径树。该路径树的根是源网络,树枝扩展到每个包含了组成员的网络,但是,该最短路径树无法立即被计算出来,而是在多播组的第一个多播包到达的时候进行“按需”计算。这一点很清楚,因为虽然同步化路由器能够知道所有的目的地,但是并不知道多播源位于何处。
SPF计算过程根据组成员关系LSA可以了解所有连接了组成员的路由器的位置,根据该组第一个到达的数据包的源和目的地址还可以了解多播源的位置,之后就可以通过普通的单播路由器LSA和网络LSA(其MC bit被置位)来计算从源到每个目的地的最小代价路径。
基于组成员关系LSA的显式加入机制(结合按需SPF计算)的最大好处就是,路由器在计算路径之前就已经知道了目的网络的位置。因而与泛洪/剪除协议(如DVNRP)不同,从不会将多播包转发到路由域中的所有角落,因此可以说,MOSPF树是“预剪除”的多播树。
根据SPF计算结果,会在每台路由器的多播转发表中生成相应的表项。最短路径树是无环路的,每台路由器都知道哪些接口是上行接口,哪些接口上下行接口,因而无需像DVMRP那样进行RPF检查。对特定(S,G)来说,转发表项指示应该从哪个上游邻居接收匹配的数据包以及必须将数据包转发给哪些下游邻居。此外,本地组数据库也被用来为本地连接的包含组成员的网络在转发表中创建表项。
关于MOSPF有一些注意事项。首先,虽然单播OSPF支持等价多路径,但MOSPF不支持。MOSPF最短路径树描述的是源与所有包含组成员的网络之间的单一路径。
其次,如果OSPF和MOSPF路由器共存于同一个多路接入网络中,一定要注意将MOSPF选举为DR。如果OSPF路由器成为DR,那么将不可能为网络中的所有组成员发起组成员关系LSA,因而该组的多播包也就无法被转发到本网络。
最后,如果MOSPF域内的拓扑结构发生了变化,那么MOSPF路由器必须清除其转发表项并重新计算其最短路径树。因而,非常重要的一点是,尽可能地保持MOSPF域的稳定性。
5.4.2 区域间MOSPF
前一小节描述了源和所有组成员均位于同一区域中时MOSPF的操作方式,重点强调的是组成员关系LSA不会被泛洪到发起该LSA的区域之外。那么,当组成员与源位于多个不同区域时将会如何呢?
《TCP/IP路由技术(第一卷)》的第9章中说过,区域间OSPF的通信由ABR(Area Border Router,区域边界路由器)管理。ABR既是主干区域的成员,也是一个或多个非主干区域的成员。与区域内的其他路由器一样,ABR也是通过路由器LSA和网络LSA来学习每个所连接区域内的所有目的地。之后,ABR创建网络汇总LSA(类型3 LSA),将ABR所连接的某个区域内的目的地宣告到该ABR所连接的其他区域。与类型1和类型2 LSA相似,类型3 LSA从来也不会被泛洪到发起该LSA的区域之外。当某台ABR通过主干区域从其他ABR接收到网络汇总LSA(Network Summary LSA)后,会创建自己的网络汇总LSA,将这些信息宣告给其所连接的非主干区域。图5-34从概念上解释了ABR对类型1、2、3 LSA的使用情况。
MOSPF ABR被不恰当地称为域间多播转发路由器(inter-area multicast forwarder),MOSPF ABR的工作方式与单播ABR有相同之处,也有不同之处。通过从非主干区域接收到的组成员关系LSA,域间多播转发路由器可以了解其所连接的非主干区域中有哪些多播组的成员。对每个已知多播组来说,转发路由器都会创建一个新的组成员关系LSA,并将该LSA泛洪到主干区域(如图5-35所示)。到目前为止,上述操作方式与ABR使用类型3 LSA将学习自类型1和类型2 LSA的汇总信息宣告到主干区域的操作方式非常类似。
图5-34 单播OSPF使用网络汇总LSA将学习自某个其所连接的区域的目的地宣告给其他所连接区域
图5-35 域间多播转发路由器利用组成员关系LSA将非主干区域中组成员的信息宣告给主干区域
MOSPF ABR与单播ABR之间的相似性就是这些。与单播使用类型3 LSA的方式不同,域间多播转发路由器并不将类型6 LSA发送到非主干区域,从而将组成员的情况宣告到本区域之外。例如,图5-35中的RT1接收到由RT2发起的类型6 LSA(宣告组C),但并不创建一个将组C宣告到区域1(Area 1)的类型6 LSA。
结果就是在主干区域中为每个组计算一个SPF树,而且该SPF树的树枝延伸到每个区域(包含了组成员)的域间多播转发路由器,而非主干区域则不知道本区域之外的组成员情况。
但是,如果图5-35中组C的源位于区域1,那么其多播包该如何到达区域2和区域3的成员呢?答案就是万能多播接收路由器(wildcard multicast receiver),这些路由器通过设置其路由器LSA中的W bit来宣告自己。每个区域中的多播流量都要被转发给万能多播接收路由器,对非主干区域来说,域间多播转发路由器(即多播ABR)总是万能多播接收路由器。
当图5-35中组C的源发起一个组C数据包时,该多播包先被转发给RT1——即区域1的万能多播接收路由器。RT1本身又是主干区域的成员,因而会计算出到所有域间多播转发路由器(其所连区域中包含组C的成员)的最短路径树。由于RT2正在宣告组C的成员,因而将多播包通过主干区域转发给该路由器,作为区域2和区域3的成员,RT2为每个区域中的组C计算单独的SPF树,并将多播包拷贝转发到组C的目的地。
注意: 当然,如果区域1中有组C的成员,那么除了将多播包拷贝转发给RT1之外,还要通过本地SPF树转发给这些组成员。
请注意,对域内(intradomain)流量来说,主干区域中并不需要万能多播接收路由器。对MOSPF域中的每个组来说,都会在区域0中计算一个SPF树,该SPF树的树枝要么通向位于该区域的组成员,要么通向连接到其他区域的域间多播转发路由器。因此,如果多播源位于主干区域中,那么其数据包将能沿着正确的SPF树进行转发。
5.4.3 AS间 MOSPF
RFC 1584描述了多播包进出MOSPF域的路由机制,《TCP/IP路由技术(第一卷)》的第 9章中说过,将来自其他路由协议的路由重分发到OSPF域的路由器被称为ASBR(Autonomous System Boundary Router,自治系统边界路由器)。ASBR使用AS外部(AS-External)类型5)LSA来宣告OSPF域之外的目的地,而利用ASBR汇总LSA(ASBR Summary LSA,类型4 LSA)来宣告自己的位置,除了末梢区域(stub area)之外,这些LSA会被泛洪到OSPF域中的所有区域。
负责将MOSPF域连接到其他多播路由域(目前最可能的是DVMRP,将来也可能是其他多播EGP)的路由器被称为AS间多播转发路由器(inter-AS multicast forwarder)。这些路由器的操作行为与域间多播转发路由器类似,为了将多播包转发到MOSPF域之外的目的地,AS间多播转发路由器需要在其路由器LSA中设置W bit,以成为万能多播转发路由器。当路由器将来自外部多播源的数据包转发到MOSPF域时,路由器将成为“代理源(proxy source)”,且它们的外部链路将充当该多播组SPF树的树根。
与ASBR类似,AS间多播转发路由器可以位于任何区域,但需要注意的是,万能多播转发能力是由类型1 LSA中的W bit来指示的,而类型1 LSA又不会被泛洪到区域之外。如果AS间多播转发路由器位于区域0,那么不存在任何问题,因为此时的域间多播转发路由器已经将多播流量引入到了主干区域;但是,如果AS间多播转发路由器位于非主干区域,那么该区域的域间多播转发路由器也必须成为主干区域的一台万能多播转发路由器。因而,建议将AS间多播转发路由器设置于区域0。
由于多播域中的所有多播流量都要转发到AS间多播转发路由器,因而建议慎重选择这些路由器在MOSPF域中的摆放位置,否则,到这些路由器的链路很容易就会产生拥塞。
5.4.4 MOSPF 扩展格式
本小节仅描述OSPF进行多播扩展后的格式,有关OSPF包和LSA的完整描述请参见 《TCP/IP路由技术(第一卷)》第9章。
1.组成员关系LSA格式
组成员关系LSA携带标准的LSA头部,其类型号为6,图5-36显示了组成员关系LSA的格式。只有MOSPF指派路由器才可以发起组成员关系LSA,请注意,从该LSA的格式中可以看出,该LSA没有相关联的度量值。
图5-36 MOSPF组成员关系LSA格式
组成员关系LSA的各字段定义如下。
• 链路状态ID(Link State ID):携带被宣告多播组的地址。
• 宣告路由器(Advertising Router):总是多路接入网络中MOSPF指派路由器的路由器ID,这是因为只有DR才能发起类型6 LSA。
• 顶点类型(Vertex Type):指定目的地是路由器(类型=1)或转接网络(类型=2),如果发信路由器正在运行的某些应用程序需要其成为多播组的成员,那么就指定类型1;转接网络指的是发信路由器直连的网络,只有穿越该网络,多播包才能到达所连接的组成员。
• 顶点ID(Vertex ID):发信路由器的路由器ID。
2.扩展的路由器LSA格式
图5-37显示了为支持MOSPF而扩展后的路由器(类型1)LSA的格式,除了在rtype字段中增加了W bit之外,其格式与《TCP/IP路由技术(第一卷)》中的图9.55完全相同。rtype字段由域间多播转发路由器和AS间多播转发路由器进行设置,以便向区域中的其他 MOSPF路由器指示其为万能多播转发路由器。
3.扩展的选项字段格式
如图5-38所示,选项字段是所有OSPF Hello包及数据库描述(Database Description)包的一个组成部分,也是所有LSA头部的一部分。除了与本章内容相关的MC bit之外的本字段的其他标记都已经在《TCP/IP路由技术(第一卷)》第9章中进行了详细描述。当置位WC bit时,表示发信路由器支持多播功能。
图5-37 路由器LSA的格式,在rtype字段中增加了W bit以支持MOSPF
Hello包中的MC bit仅指示多播能力,即使两台路由器中一台设置了MC bit,另一台没有设置MC bit,这两台路由器仍然是邻接状态。MC bit真正起作用的是在数据库描述包和 LSA中。
图5-38 选项字段的格式
在数据库同步过程中,如果邻居的DD包设置了MC bit,那么MOSPF路由器将向邻居发送其数据库中的类型6 LSA。与此类似,只有设置了MC bit的LSA才被用于MOSPF的SPF计算。