发明内容
有鉴于此,本发明的主要目的在于提供一种发送报文的方法及装置,应用本发明提供了方法及装置能够提高组播或广播报文的发送效率。
为达到上述目的,本发明的技术方案是这样实现的:
一种发送报文的方法,执行以下步骤:
当接口对应的链路可用时,当接口所支持的链路类型为点到点时,根据该点到点链路的链路网络层协议信息和链路层协议信息建立接口对应的二层封装信息;接口发送组播或广播报文时,根据接口对应的二层封装信息封装并发送所述报文;
或者,当接口所支持的链路类型为点到多点时,当接口对应的点到多点链路每增加一条具有广播属性的子通道时,在该子通道状态为可用的情况下,根据当前新增的子通道的网络层协议信息和链路层协议信息建立与该子通道对应的二层封装信息;当接口发送组播或广播报文时,根据所述接口的各子通道对应的二层封装信息分别封装报文,并通过各子通道发送所述报文;
或者,当接口所支持的链路类型为以太网广播链路时,在接口为虚拟以太网虚接口的情况下,在虚接口对应的虚拟以太网内,每增加一个可用的二层端口时,根据当前新增的二层端口的网络层协议信息和链路层协议信息建立与该二层端口对应的二层封装信息,当接口发送组播或广播报文时,根据所述报文的目的MAC地址和所述接口的各二层端口对应的二层封装信息分别封装报文,并通过各二层端口发送所述报文。
较佳的,当接口所支持的链路类型为点到点时,当接口对应的点到点链路不可用时,则删除该接口对应的二层封装信息;
或,当接口对应的点到点链路的报文封装格式发生变化时,根据变化后的报文封装格式对所述的二层封装信息进行修改。
较佳的,当接口所支持的链路类型为点到多点时,当二层封装信息对应的子通道不可用时,则删除该二层封装信息;
或,当二层封装信息对应子通道的报文封装格式发生变化时,根据变化后的报文封装格式对所述的二层封装信息进行修改。
较佳的,当接口所支持的链路类型为以太网广播链路、且接口为虚拟以太网虚接口时,在封装并发送所述报文之前,进一步包括:
当所述报文为组播报文时,根据目的IP地址计算得到组播报文的目的MAC地址;
或,当所述报文为广播报文时,将所述报文中携带的目的MAC地址作为广播报文的目的MAC地址。
较佳的,当接口为虚拟以太网虚接口时,在二层封装信息对应的二层端口不可用时,则删除该二层封装信息;或当二层封装信息对应的二层端口的报文封装格式发生变化时,根据变化后的报文封装格式对所述的二层封装信息进行修改;
或者,当接口为三层以太网口时,当三层以太网口对应的以太网广播链路不可用时,则删除该接口对应的二层封装信息;或当接口对应的以太网广播链路的报文封装格式发生变化时,根据变化后的报文封装格式对所述的二层封装信息进行修改。
另外,本发明还提供了一种发送报文的装置,该装置至少包括,链路协议单元和链路信息单元;其中,
链路协议单元,用于当接口所支持的链路类型为点到点、且接口对应的链路可用时,根据点到点链路的网络层协议信息和链路层协议信息建立接口对应的二层封装信息,并记录于链路信息单元;发送组播或广播报文时,根据记录的接口对应的二层封装信息封装并发送所述报文;
还用于当接口所支持的链路类型为点到多点时,当接口对应的点到多点链路每增加一条具有广播属性的子通道时,在该子通道状态为可用的情况下,根据当前新增的子通道的网络层协议信息和链路层协议信息建立与该子通道对应的二层封装信息,并记录于链路信息单元;发送组播或广播报文时,根据记录的所述接口的各子通道对应的二层封装信息分别封装报文,并通过各子通道发送所述报文;
还用于当接口所支持的链路类型为以太网广播链路且接口为虚拟以太网虚接口时,在虚接口对应的虚拟以太网内,每增加一个可用的二层端口时,根据当前新增的二层端口的网络层协议信息和链路层协议信息建立与该二层端口对应的二层封装信息,并记录于链路信息单元;发送组播或广播报文时,根据所述报文的目的MAC地址和记录的所述接口的各二层端口对应的二层封装信息分别封装报文,并通过各二层端口发送所述报文;
链路信息单元,用于记录链路协议单元建立的二层封装信息。
一种对组播报文进行链路层转发的方法,该方法包括:
确定接收到的组播报文的出接口;
查找对应所述出接口的单播邻接表表项;其中,当所述出接口为NBMA类型接口时,所述查找对应所述出接口的单播邻接表表项为:查找所述NBMA类型接口中的所有逻辑接口的所有单播邻接表表项;其中,所述NBMA类型接口包括多个逻辑接口,每个逻辑接口对应一个单播邻接表表项;
从查找到的单播邻接表表项中读取二层封装信息,所述二层封装信息包括目的链路层地址、三层协议类型信息、VLAN信息和组网所需的信息;
将读取的二层封装信息复制到组播报文中然后发送组播报文;
其中,当所述出接口为BROADCAST类型接口时,所述读取二层封装信息并将读取的二层封装信息复制到组播报文中然后发送组播报文的步骤包括:从查找到的单播邻接表表项中读取除目的链路层地址以外的二层封装信息,将读取的二层封装信息复制到组播报文中,然后计算所述组播报文的目的链路层地址,将计算出的目的链路层地址封装到组播报文中,发送所述组播报文。
一种网络设备,包括:
三层转发处理单元,用于接收组播报文,确定该组播报文的出接口;
表项建立单元,用于针对每一个接口建立对应的单播邻接表表项,并保存;
链路层转发处理单元,用于根据三层转发处理单元确定的出接口,从表项建立单元中查找对应该出接口的单播邻接表表项,从查找到的单播邻接表表项中读取二层封装信息,所述二层封装信息包括目的链路层地址、三层协议类型信息、VLAN信息和组网所需的信息;将读取的二层封装信息复制到组播报文中然后发送组播报文;
其中,当所述出接口为NBMA类型接口时,所述查找对应所述出接口的单播邻接表表项为:查找所述NBMA类型接口中的所有逻辑接口的所有单播邻接表表项;其中,所述NBMA类型接口包括多个逻辑接口,每个逻辑接口对应一个单播邻接表表项;
当所述出接口为BROADCAST类型接口时,所述读取二层封装信息并将读取的二层封装信息复制到组播报文中然后发送组播报文的步骤包括:从查找到的单播邻接表表项中读取除目的链路层地址以外的二层封装信息,将读取的二层封装信息复制到组播报文中,然后计算所述组播报文的目的链路层地址,将计算出的目的链路层地址封装到组播报文中,发送所述组播报文。
本发明所提供的一种发送报文的方法,通过记录组播或广播报文在发送过程中所需的、且在报文发送前就能够确定的二层封装信息;进而在实际发送报文时,接口只需要根据记录的二层封装信息封装并发送所述报文,进而减少了每个组播或广播报文在发送过程中的判断环节和二层封装信息的获取等环节,从而达到了快速发送组播或广播报文的目的。同时,本发明还提供了一种发送报文的装置。通过应用本发明所提供的方法以及装置,能够在很大程度上提供组播或广播报文的发送效率,进而也提高了相关业务的执行效率。
另外,在本发明中,在发送组播报文时,较佳地,可以直接利用单播邻接表中已经记录的二层封装信息来复制添加,因此,大大提高了组播报文的转发效率,提高了网络设备的性能。
具体实施方式
本发明的核心思想是:当接口对应的链路可用时,针对可用的链路记录组播或广播报文在发送过程中所需的、且在报文发送前就能够确定的二层封装信息;在实际发送报文时,根据记录的二层封装信息封装并发送所述报文,进而减少了每个组播或广播报文在发送过程中的判断环节和二层封装信息的获取等环节,达到了快速发送组播或广播报文的目的。
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明做进一步的详细说明。
在本发明中,主要针对三种链路类型分别列举实施例,这三种链路类型分别是:点到点链路即P2P类型、点到多点链路即NBMA类型以及以太网广播链路即BROADCAST类型。
实施例一
当接口支持的链路类型为点到点时,则本实施例发送报文方法的流程如图1所示,包括以下步骤:
步骤101:接口对应的链路协议单元,在当前接口对应的点对点链路状态为可用时,根据接口对应的点到点链路建立当前接口的二层封装信息。
这里确定接口链路状态为可用的方法可以是:链路协议单元在成功完成当前接口对应的点到点链路的链路协议协商之后,确定当前点到点链路的状态为可用。
这里,链路协议单元在链路协议协商成功后,根据点到点链路的网络层协议信息和链路层协议信息建立对应的二层封装信息。
步骤102:当接口对应的链路协议单元收到需要接口发送的组播或广播报文,链路协议单元则根据当前接口对应的二层封装信息对报文进行封装,并通过当前接口对应的点到点链路发送封装后的组播或广播报文。
本实施例的方法进一步包括,在当前接口对应的点到点链路的状态变为不可用时,删去该接口对应的二层封装信息。此后,当前接口不能再发送组播或广播报文,直至链路状态为可用。或者,当该接口对应的点到点链路的报文封装格式发生变化时,则根据变化后的报文封装格式更新当前接口对应的二层封装信息。
实施例二
当接口支持的链路类型为点到多点时,如FR或ATM,则在接口发送报文的流程如图2所示,包括以下步骤:
步骤201:链路协议单元在自身所管理的接口要增加一条具有广播属性的子通道,且在该子通道的状态为可用时,链路协议单元针对当前增加的子通道建立与该接口对应的二层封装信息。
这里,链路协议单元根据网络层协议信息、以及本子通道的链路层协议信息建立子通道的二层封装信息。
其中,所指的子通道对于FR来说为数据链路连接标识(DLCI,Data LinkConnection Identifier),对于ATM为永久虚连接(PVC,Permanent VirtualChannel)。所指的子通道状态可用可以是指:子通道物理上可用。子通道物理上可用,可以根据子通道所在的底层链路是否可用来确定。
当接口每增加一条具有广播属性的子通道,且在该子通道的状态为可用时,链路协议单元均会根据该新增的子通道,针对该新增的子通道建立接口的一个二层封装信息。也就是说,当接口每增加一个子通道,链路协议单元就会为接口针对该子通道建立一个二层封装信息。因此当接口存在多个子通道时,接口就会存在分别与这多个子通道对应的二层封装信息。
由于在实际应用过程中,接口所包括的子通道有可能是动态增加的,因此,本实施例的步骤201并不限于在步骤202之前执行,只要接口新增了一个子通道,接口对应的链路协议单元则针对该子通道建立一个二层封装信息。
步骤202:当接口对应的链路协议单元收到需要当前接口发送的组播或广播报文时,链路协议单元则根据当前接口对应的各二层封装信息,分别封装所述报文并通过对应的子通道发送所述的组播或广播报文。
本实施例方法进一步包括,当接口对应的某个子通道的链路状态变为不可用时,链路协议单元则删去针对该子通道建立的二层封装信息。或者,当某个子通道的报文封装格式发生变化时,则根据该子通道变化后的报文封装格式更新该子通道对应的二层封装信息。
实施例三
当接口支持的链路类型为以太网广播链路时,如ETH,则在接口发送报文的流程如图3所示。在本实施例中,首先以所述接口为虚拟以太网(VLAN)虚接口为例进行说明,本实施例的方法包括以下步骤:
步骤301:当VLAN虚接口所在的VLAN内增加一个二层端口,且该二层端口的状态为可用时,链路协议单元则针对该新增的二层端口建立该VLAN虚接口的一个二层封装信息。这里,所指的二层端口为:以太网端口。
当VLAN虚接口所在的VLAN每增加一个二层端口,且该新增的二层端口状态为可用时,链路协议单元均会根据该新增的二层端口,建立与当前VLAN虚接口对应的一个二层封装信息。也就是说,当VLAN虚接口每增加一个二层端口时,链路协议单元均会为VLAN虚接口针对二层端口建立一个二层封装信息。因此当VLAN虚接口存在多个二层端口时,接口就会存在分别与这多个二层端口对应的二层封装信息。
由于在实际应用过程中,VLAN的二层端口可能是动态增加的,因此,本实施例的步骤301并不限于在步骤302之前,只要VLAN内新增了一个二层端口,VLAN虚接口对应的链路协议单元则针对该二层端口建立一个二层封装信息。
这里,链路协议单元根据当前新增的二层端口的网络层协议信息和链路层协议信息建立与该二层端口对应的二层封装信息。
其中,所指的二层端口可用为:二层端口物理上可用,比如已经插线且与对端设备连通。
步骤302:当VLAN虚接口对应的链路协议单元收到需要当前接口发送的组播或广播报文时,获得该报文目的MAC地址。
其中,当需要发送的为组播报文时,则根据该组播报文的目的IP地址得到组播报文的目的MAC地址;当需要发送的为广播报文时,将报文中携带的目的MAC地址作为广播报文的目的MAC地址。
这里,组播或广播报文的源MAC是当前VLAN虚接口自身的MAC地址,该MAC地址信息是在VLAN虚接口确定之后,即可以预先确定的信息,因此是链路协议单元记录在二层封装信息中的内容。
步骤303:链路协议单元根据获得目的MAC地址,以及该VLAN虚接口对应各二层端口的二层封装信息,分别封装所述报文,并通过各二层端口发送自身对应的封装后的报文。
本实施例的方法进一步包括,当VLAN虚接口对应的某个二层端口状态变为不可用时,链路协议单元则删去针对与该二层端口对应的二层封装信息。或者,当某个二层端口的报文封装格式发生变化时,则根据该二层端口变化后的报文封装格式更新该二层端口对应的二层封装信息。
另外,在本实施例中,当支持以太网广播链路的接口为三层以太网口时,则建立该三层以太网口的二层封装信息为:当三层以太网口对应的以太网广播链路为可用时,则根据该以太网广播链路建立该三层以太网口的二层封装信息。由于三层以太网口不像VLAN虚接口,因此与三层以太网口对应的二层封装信息只会存在一条。在发送组播或广播报文时,则根据该三层以太网口对应的二层封装信息封装并发送报文。这里,链路协议单元根据以太网广播链路的网络层协议信息和链路层协议信息建立对应的二层封装信息。
在三层以太网口对应的以太网广播链路不可用时,则删除与该三层以太网口对应的二层封装信息。或者,当该三层以太网口对应的以太网广播链路的报文封装格式发生变化时,则根据变化后的报文封装格式更新三层以太网口对应的二层封装信息。
这里所指的以太网广播链路可用可以根据以太网广播链路的底层链路是否可用来确定,当底层链路可用时,则认为以太网广播链路可用;当底层链路不可用时,则认为以太网广播链路不可用。
与本发明方法对应的装置如图4所示,包括链路协议单元41和链路信息单元42。
其中,链路协议单元41,用于建立接口的二层封装信息,并将建立的二层封装信息记录于链路信息单元42;发送组播或广播报文时,根据链路信息单元42记录的接口的二层封装信息封装并发送所述报文。
链路信息单元42,用于记录链路协议单元41建立的接口的二层封装信息。
这里,链路协议单元41建立接口的二层封装信息,以及封装并发送组播或广播报文的方法,可以参见实施例一、二和三,具体方法在此不再详述。
其中,链路信息单元42记录接口对应的二层封装信息的方法可以是,建立一张接口链路管理表,其中记录着接口与其自身的二层封装信息之间的对应关系。在接口链路管理表中,接口可以用自身的接口索引来唯一标识。当接口存在多个与自身对应的二层封装信息时,可以采用链表的方式记录与自身对应的多个二层封装信息,具体可参见图5。图5为当某个接口存在多个二层封装信息时,对应的接口链路管理表项结构图。当链路协议单元需要根据接口对应的二层封装信息发送组播或广播报文,只需要根据接口的接口索引查找接口链路管理表,即可找到相应的记录了二层封装信息的表项。
在本发明的上述实现过程中,在建立一个接口的二层封装信息时,具体的实现可以是:设置接口链路管理表,记录接口与对应的二层封装信息之间的对应关系。
其中,接口链路管理表可以通过多种方式来实现,比如,在设备内部增加一个专有的接口链路管理表,仅用于存储记录接口与对应的二层封装信息之间的对应关系。
较佳地,针对于组播报文,由于设备内部已经有可完成类似功能的表,因此,对于组播报文,接口链路管理表还可以利用设备内部已有的单板邻接表来实现。其具体理由如下:
对于单播报文,现有技术中已经存在加快其转发过程的方法,包括:网络设备每一个接口的链路层协议启动(UP)并完成链路层地址学习后,表明该接口对应的链路可以进行报文的二层转发,即链路层转发;然后,网络设备将该接口对应的链路的重要属性,包括链路类型、接口拓扑类型、路由接口索引、物理接口索引以及二层封装信息作为一个表项保存在单播邻接表中;当网络设备接收到一个单播报文时,网络设备从对应的单播邻接表表项中得到该单播报文的二层封装信息,然后直接将该二层封装信息复制到单播报文中,并通过出接口将单播报文发送出去。
可见,对于单播报文,网络设备无需进行一系列获取二层封装信息的处理,也无需进行将获取的二层封装信息封装在单播报文中的处理,而只需将预先记录的二层封装信息复制到单播报文中即可,因此,大大提高了单播报文的转发效率。
而对单播报文和组播报文的链路层转发过程进行分析可知,在单播报文和组播报文中添加的具体二层封装信息主要取决于接口,也就是说,只要出接口相同,那么,除广播类型的接口之外,任何一个单播报文和任何一个组播报文中添加的二层封装信息完全相同,即,任何一个单播报文和任何一个组播报文只要从同一个出接口被发送,那么,为该出接口在该任何一个单播报文和任何一个组播报文中添加的目的链路层地址、三层协议类型信息、VLAN信息(当接口对应的链路类型为以太网时存在该VLAN信息)以及组网所需的信息完全相同。因此,为了提高组播报文的转发效率,在为组播报文添加二层封装信息时,完全可以利用单播邻接表中已经记录的二层封装信息来直接复制添加。
由上述理由可见,对于组播报文,本发明中的接口链路管理表可以直接利用按照现有技术方式建立的单播邻接表。
针对上述特点,本发明一个较佳实施例提出了一种对组播报文进行链路层即二层转发的方法。在该方法中,确定接收到的组播报文的出接口;查找对应所述出接口的单播邻接表表项;从查找到的单播邻接表表项中读取二层封装信息;将读取的二层封装信息复制到组播报文中,然后发送组播报文。
图6是在本发明一个较佳实施例中对组播报文进行链路层转发的流程图。参见图6,在本发明一个实施例中,网络设备对组播报文进行链路层转发的过程具体包括以下步骤:
步骤601:网络设备预先针对自身中每一个可用的接口建立对应的单播邻接表表项。
网络设备中的接口可能为不同的类型,如点到点(P2P)类型、广播(BROADCAST)类型和非广播多址访问(NBMA)类型。对于P2P类型的接口,接口中不包括逻辑接口(此处以及以下所述的逻辑接口与本发明以上实施例中所述的子通道指代同一事物),且报文发送的目的设备固定;对于BROADCAST类型的接口,接口中不包括逻辑接口,报文发送的目的地址为组播地址;对于NBMA类型的接口,接口中包括多个逻辑接口,通常,接口与其包括的多个逻辑接口位于同一个单板上。
对于上述P2P类型、BROADCAST类型和NBMA类型的接口,现有技术中均存在建立其对应的单播邻接表表项的方法,因此,在本步骤中,对于每一个P2P类型的接口、BROADCAST类型的接口和NBMA类型的接口(接口与其包括的多个逻辑接口位于同一个单板上),可以按照现有技术的方法来分别建立其对应的单播邻接表表项,包括:对于每一个P2P类型的接口,建立一个对应的包括二层封装信息的单播邻接表表项;对于每一个BROADCAST类型的接口,针对该BROADCAST类型的接口建立对应的多个单播邻接表表项;对于每一个NBMA类型的接口(接口与其包括的多个逻辑接口位于同一个单板上),为其包括的每一个逻辑接口分别建立一个对应的包括二层封装信息的单播邻接表表项。
另外,需要说明的是,目前,为了提高网络设备的报文处理效率,出现了分布式网络设备,也就是说,网络设备内部包括多个用于转发报文的单板,并且,一个单板从外部接收到的报文可以从另一个单板转发出去。针对此种分布式网络设备,当内部一个单板上一个接口为包括多个逻辑接口的NBMA类型时,该多个逻辑接口则很可能位于不同单板上。针对此种情况,本发明实施例提出了在一个单板上为NBMA类型的接口建立对应的单播邻接表表项的方法,包括:当任意一个NBMA类型接口中的所有逻辑接口在不同单板上时,该NBMA类型接口所在的单板在为该NBMA类型接口建立单播邻接表表项时,如果该NBMA类型接口中存在位于本板的逻辑接口,则在本板建立与该逻辑接口对应的、包括二层封装信息在内的单播邻接表表项;针对位于其他板的每一个逻辑接口,在本板建立与该逻辑接口对应的、不包括二层封装信息但包括该逻辑接口所在单板的单板标识的单播邻接表表项。比如,分布式设备中包括3个用于转发报文的单板,其中,单板1上的接口1为包括3个逻辑接口的NBMA类型接口,且其中的逻辑接口1在单板1上,逻辑接口2和逻辑接口3均位于单板2上,那么,单板1在为接口1建立单播邻接表表项时,可以在本板为逻辑接口1建立一个单播邻接表表项1,且单播邻接表表项1中包括报文从逻辑接口1中转发时所需的二层封装信息;并且,单板1可以在本板为逻辑接口2建立一个单播邻接表表项2,且单播邻接表表项2中不包括二层封装信息,而包括逻辑接口2所在的单板2的信息,同理,单板1可以在本板为逻辑接口3建立一个单播邻接表表项3且单播邻接表表项3中不包括二层封装信息,而包括逻辑接口3所在的单板2的信息。
在本步骤中,根据上述方法建立的每一个单播邻接表表项,如果其中包括二层封装信息,那么,二层封装信息具体包括:目的链路层地址和三层协议类型信息,如果接口上存在VLAN,则还包括VLAN信息,并且,对于不同的组网,还包括组网所需的信息,如对于以太网,还包括源链路层地址。
步骤602:网络设备预先针对自身中的每一个接口建立对应的组播邻接表。
步骤603:网络设备预先在每一个接口对应的组播邻接表中保存该接口对应的单播邻接表表项信息。
这里,对于网络设备中P2P类型的接口,由于一个接口对应一个单播邻接表表项,因此,在该接口对应的组播邻接表中保存的是一个单播邻接表表项信息。
对于BROADCAST类型的接口,虽然针对该BROADCAST类型的接口建立了多个单播邻接表表项,但是,由于除了目的链路层地址外,该多个单播邻接表表项中的其他二层封装信息均相同,而后续组播报文发送无需使用单播邻接表表项中的目的链路层地址,且最终只需发送一份,因此,在本步骤中,只需将该BROADCAST类型的接口对应的任意一个单播邻接表表项的信息保存在该BROADCAST类型接口对应的组播邻接表中。
对于NBMA类型的接口,由于一个接口中的所有逻辑接口分别对应一个单播邻接表表项,因此,在该接口对应的组播邻接表中保存的是所有逻辑接口对应的所有单播邻接表表项信息。
如果网络设备中存在多个用于转发报文的单板,那么,上述步骤601至步骤603的处理是由网络设备中的每一个单板分别执行,即每一个单板分别针对本板的接口执行上述的建立单播邻接表表项和组播邻接表的处理。
需要说明的是,在一个接口对应的单播邻接表表项被删除或修改时,则需要相应地删除或修改组播邻接表,其实现过程包括:
比如,在删除接口1对应的单播邻接表表项1时,从接口1对应的组播邻接表中获取单播邻接表表项1的信息,并删除;
在修改接口1对应的单播邻接表表项1的信息时,从接口1对应的组播邻接表中获取单播邻接表表项1的信息,并修改。
步骤604:网络设备接收到外部发来的组播报文。
步骤605:网络设备根据组播报文中携带的目的地址,从组播转发表中查找到该组播报文的出接口。
步骤606:网络设备查找出接口对应的组播邻接表。
步骤607:网络设备从查找到的组播邻接表中获取所保存的单播邻接表表项信息。
步骤608:网络设备根据获取的单播邻接表表项信息查找到对应的单播邻接表表项。
步骤609:网络设备从查找到的单播邻接表表项中读取二层封装信息。
步骤610:网络设备将读取的二层封装信息直接复制到组播报文中。
步骤611:网络设备通过出接口发送组播报文。
由于不同类型的接口具有不同的报文转发特点,因此,当步骤605中查找到的出接口为不同类型时,步骤607至步骤611的具体实现细节则会有所不同。
首先,对于出接口为P2P类型的情况:
由于出接口中不包括逻辑接口,且报文发送的目的链路层地址固定,因此,单播邻接表表项中记录的二层封装信息完全可以直接添加到组播报文中。
这样,在步骤607中,从出接口对应的组播邻接表中获取的是一个单播邻接表表项信息;在步骤608中,查找到的是一个单播邻接表表项;在步骤609中,网络设备从查找到的单播邻接表表项中读取的是该表项中记录的所有二层封装信息,包括:目的链路层地址和三层协议类型信息,如果接口上存在VLAN,则还包括VLAN信息,并且,对于不同的组网,还包括组网所需的信息,如对于以太网,还包括源链路层地址。
其次,对于出接口为BROADCAST类型的情况:
出接口中不包括逻辑接口,但由于报文发送的目的地址是组播地址,也就是说,对于组播报文,从同一个接口每次发送的目的链路层地址不固定,需要动态计算,因此,单播邻接表表项中记录的除目的链路层地址之外的二层封装信息可以直接复制到组播报文中,目的链路层地址则需要采用现有技术的获取方法,即利用组播报文中的目的三层地址计算得到。
这样,在步骤607中,从出接口对应的组播邻接表中获取的是一个单播邻接表表项信息;在步骤608中,查找到的是一个单播邻接表表项;在步骤609中,网络设备从查找到的单播邻接表表项中读取的是该表项中记录的除目的链路层地址之外的其他所有二层封装信息,包括:三层协议类型信息,如果接口上存在VLAN,则还包括VLAN信息,并且,对于不同的组网,还包括组网所需的信息,如对于以太网,还包括源链路层地址。并且,进一步地,在步骤609中,网络设备还需要计算出目的链路层地址,计算的方法与现有技术转发组播报文时得到目的链路层地址的方法相同。
需要说明的是,对于出接口为P2P类型或为BROADCAST类型的情况,由于出接口中不包括逻辑接口,这样,网络设备中接收到外部发来组播报文的单板则会从本板将组播报文发送出去,也就是说,上述步骤604至步骤611的处理由网络设备中的同一个单板进行。
最后,对于出接口为NBMA类型的情况:
出接口中包括多个逻辑接口,因此,在上述步骤607至步骤609的过程中,网络设备需要进一步执行根据所查找到出接口中逻辑接口的数量复制组播报文的处理,以使得每一个逻辑接口均可以发送一份组播报文;且由于每一个逻辑接口的目的链路层地址固定,因此,每一个逻辑接口对应的单播邻接表表项中记录的二层封装信息可以直接添加到一个组播报文中。
这样,在步骤607中,从出接口对应的组播邻接表中获取的是该出接口中多个逻辑接口对应的多个单播邻接表表项信息;在步骤608中,查找到的是多个单播邻接表表项;
步骤609至步骤611的具体实现过程则包括:接收到外部发来的组播报文的单板,记为单板1,判断查找到的所述出接口中的每一个逻辑接口是否在本板,如果在本板,则从该逻辑接口对应的单播邻接表表项中读取该二层封装信息,将读取的二层封装信息复制到一个组播报文中,通过该逻辑接口发送出去;如果不在本板,则从该逻辑接口对应的单播邻接表表项中获取其他单板如单板2的标识,将复制出的一个组播报文透传至单板2;单板2则重新执行一次步骤605至步骤611的过程。可见,无论每次查找到的出接口中的所有逻辑接口是否位于同一个单板上,只要网络设备中的每一个单板在接收到组播报文时,均执行单板1的处理过程,那么,则可以保证直接利用单播邻接表表项中记录的二层封装信息来进行组播报文的链路层转发。
另外,本发明一个较佳实施例还提出了一种网络设备,参见图7,该网络设备包括:
三层转发处理单元,用于接收组播报文,确定该组播报文的出接口;
表项建立单元,用于针对每一个接口建立对应的单播邻接表表项,并保存;
链路层转发处理单元,用于根据三层转发单元确定的出接口,从表项建立单元中查找对应该出接口的单板邻接表表项,从查找到的单播邻接表表项中读取二层封装信息;将读取的二层封装信息复制到组播报文中然后发送组播报文。
在本发明一个实施例中,网络设备可以利用建立的组播邻接表来找到保存二层封装信息的单播邻接表表项,此时,所述表项建立单元进一步用于针对每一个接口建立对应的组播邻接表,并将每一个接口对应的单播邻接表表项信息保存在该接口对应的组播邻接表中;
所述链路层转发处理单元,从表项建立单元中查找对应所述出接口的组播邻接表,从查找到的组播邻接表中获取保存的单播邻接表表项信息,根据获取的单播邻接表表项信息从表项建立单元中查找到对应所述出接口的单播邻接表表项。
其中,所述表项建立单元在为NBMA类型的接口建立表项时,针对该NBMA类型接口中的所有逻辑接口分别建立对应的单播邻接表表项,并将该NBMA类型接口中所有逻辑接口对应的所有单播邻接表表项信息保存在该NBMA类型接口对应的组播邻接表中。
为了保证在网络设备为分布式设备时,即包括多个用于转发报文的单板,也可以根据单播邻接表表项中保存的二层封装信息转发组播报文,较佳地,所述表项建立单元在为NBMA类型的接口建立表项时,如果确定该NBMA类型接口中的所有逻辑接口在不同单板上,那么,如果确定存在与表项建立单元位于同一单板的逻辑接口,则在本板建立对应的包括二层封装信息在内的单播邻接表表项;针对位于其他板的每一个逻辑接口,在本板建立对应的不包括二层封装信息但包括该逻辑接口所在单板的单板标识的单播邻接表表项。
在网络设备为分布式设备时,具体的组播报文转发处理为:
该网络设备包括多个单板,每一个单板中均包括所述的三层转发处理单元、表项建立单元和链路层转发处理单元;
每一个单板中的链路层转发处理单元,如果确定出接口的类型为NBMA类型,则判断所述出接口中的每一个逻辑接口是否在本板,如果在本板,则从该逻辑接口对应的单播邻接表表项中读取该二层封装信息,将读取的二层封装信息复制到一个组播报文中,通过该逻辑接口发送出去;如果不在本板,则从该逻辑接口对应的单播邻接表表项中获取其他单板的标识,将复制出的一个组播报文透传至所述其他单板中的三层转发处理单元。
较佳地,所述表项建立单元在为BROADCAST类型的接口建立表项时,针对该BROADCAST类型的接口建立对应的多个单播邻接表表项,并将该BROADCAST类型接口对应的一个单播邻接表表项的信息保存在该BROADCAST类型接口对应的组播邻接表中。
在本发明的另一个实施例中,所述链路层转发处理单元在从查找到的单播邻接表表项中读取二层封装信息之前,判断所述出接口是否为BROADCAST类型,如果是BROADCAST类型,在执行所述的从查找到的单播邻接表表项中读取二层封装信息时,读取除目的链路层地址之外的二层封装信息,并且,计算所述组播报文的目的链路层地址,将计算出的目的链路层地址封装在所述组播报文中;如果不是BROADCAST类型,则读取查找到的单播邻接表表项中的所有二层封装信息。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。