报文发送的方法、设备和系统与流程

文档序号:25868302发布日期:2021-07-13 16:29阅读:287来源:国知局
本申请涉及网络通信领域,并且更具体地,涉及报文发送的方法、设备以及系统。
背景技术
::网络协议(internetprotocol,ip)组播技术实现了ip网络中点到多点的高效数据传送,能够有效地节约网络带宽、降低网络负载。近期,业界提出了一种新的用于构建组播数据转发路径的技术,称为基于位索引的显式复制(bitindexexplicitreplication,bier)技术,该技术提出了一种新的不需要构建组播分发树的组播技术架构。组播业务中可以应用位索引的显式复制第六版(bitindexexplicitreplicationversion6,bierv6)封装,该组播业务可以支持多个虚拟私有网(virtualprivatenetwork,vpn)。该场景中,多个vpn中每个vpn的组播源节点可以为该vpn分配一个ipv6地址,该vpn中的节点需要保存源ipv6地址和vpn之间的对应关系。因此,大量vpn中的多个节点需要保存的源ipv6地址和vpn之间的对应关系,会导致内存开销大等问题。技术实现要素:本申请提供一种报文发送的方法、第一网络设备、第二网络设备以及系统,可以减小内存开销,避免内存开销浪费。第一方面,提供了一种报文发送的方法,包括:第一网络设备接收数据报文并对该数据报文进行封装,得到第一报文,该第一报文中包括互联网协议第六版ipv6头、基于位索引的显式复制bier头以及该数据报文,该ipv6头的源ipv6地址字段的一部分位中包含第一租户的标识信息;该第一网络设备将该第一报文发送给该第二网络设备,所述第一租户的标识信息用于所述第二网络设备确定将所述数据报文发送至与所述第一租户对应的所述第二网络设备的接口。本申请对bier头格式不做具体限定,只要包含bitstring字段即可。一种可能的bier头格式中,包含biftid字段,并由该biftid字段映射出sd/bsl/si的取值。另一种可能的实现方式中,bier头中直接包含sd/bsl/si字段,而没有biftid字段,也无须由biftid字段映射出sd/bsl/si取值。应理解,bier头可包含在ipv6扩展头中,该ipv6扩展头可以是目的选项头(destinationoptionheader,doh),又如,该ipv6扩展头还可以是路由头(routingheader,hr),本申请不做具体限定。第一网络设备还可以根据配置信息,将数据报文对应的租户的标识信息包含在ipv6头中的源ipv6地址的字段中。应理解,本申请实施例对租户的标识信息不做具体限定,例如,可以通过一个24位(bit)的虚拟网络标识(virtualnetworkidentifier,vni)代表一个租户或vpn实例,又如还可以通过一个20bit的mpls标签值代表一个租户或vpn实例。需要说明的是,使用20bit的mpls标签值表示租户或vpn实例,对租户的数据报文使用bier进行封装时,使用一个{bier头+mpls标签+数据报文}的封装方式,其中的mpls标签是全局标签,即在多个tor设备上使用同一个mpls标签标识同一个租户。bier头中的proto字段值用1来表示bier头后面是一个mpls标签。本申请实施例也可以适用于对这种使用mpls全局标签的情况,将表示租户的mpls全局标签嵌入在ipv6源地址中。该第二网络设备在接收到上述第一报文之后,可以根据其上建立的转发表项以及第一报文中的bier头中的bitstring确定该第一报文是发送给该第二网络设备,并由该第二网络设备对第一报文进行解封装后,对内层的数据报文进行转发。本申请实施例中,该第二网络设备在对第一报文进行解封装之前,需要外层的ipv6头中的源ipv6地址字段中获取包含第一的租户的标识信息。并在对第一报文解封装之后,根据获取的第一租户的标识信息,将内层的数据报文发送至所述第一租户对应的接口。上述技术方案中,将租户的标识信息内嵌在bieripv6报文的ipv6源地址中,从而使得接收到报文的网络设备在确定报文的租户信息时,只需要根据指示信息读取ipv6源地址获得具体租户的标识信息。接收报文的网络设备,不需要根据整个ipv6源地址来获取对应的租户信息,也不需要保存ipv6地址和租户的标识信息之间的n:1映射关系,从而减小内存开销,避免内存开销浪费等问题。在一种可能的实现方式中,所述源ipv6地址字段中的24位用于标识所述第一租户的标识信息。在另一种可能的实现方式中,该数据报文可以为单播报文,或者也可以组播报文,或者也可以为广播报文,本申请不做具体限定。在另一种可能的实现方式中,该第一租户的标识信息为虚拟网络标识vni或多协议标签交换mpls标签值。应理解,以第一租户的标识信息为24位的vni为例,该源ipv6地址的24位内嵌有第一租户的标识信息。24bit的vni可以内嵌在128bit的源ipv6地址字段中的任意位置,本申请不做具体限定,例如,可以将24bit的vni内嵌在128bit的源ipv6地址字段中的最后24位(第105位至128位)。又如,还可以将24bit的vni内嵌在128bit的源ipv6地址字段中的第97位至120位。在另一种可能的实现方式中,该第一报文指示该源ipv6地址字段中包含该第一租户的标识信息。在另一种可能的实现方式中,可以是系统默认的方式指示该第一报文中的源ipv6地址字段中包含该第一租户的标识信息。在另一种可能的实现方式中,还可以是第一报文的bier头中包括第二标识,所述第二标识用于指示该第一报文中包含该第一租户的标识信息。在另一种可能的实现方式中,用于标识所述第二标识的字段为proto字段或位索引转发表标识biftid字段。在另一种可能的实现方式中,在该第一网络设备对该数据报文进行封装,得到第一报文之前,该方法还包括:该第一网络设备确定该第一租户的标识信息。在另一种可能的实现方式中,该第一网络设备确定接收该数据报文的接口为第一租户的接口;该第一网络设备根据该数据报文的接口为第一租户的接口确定该第一租户的标识信息。第二方面,提供了一种报文发送的方法,包括:第二网络设备接收第一报文,其中,该第一报文中包括互联网协议第六版ipv6头、基于位索引的显式复制bier头以及该数据报文,该ipv6头的源ipv6地址字段的一部分位中包含第一租户的标识信息;该第二网络设备从该源ipv6地址字段中获取该第一租户的标识信息;该第二网络设备对该第一报文进行解封装,得到该数据报文;该第二网络设备根据该第一租户的标识信息将该数据报文发送至该第一租户对应的接口。本申请对bier头格式不做具体限定,只要包含bitstring字段即可。一种可能的bier头格式中,包含biftid字段,并由该biftid字段映射出sd/bsl/si的取值。另一种可能的实现方式中,bier头中直接包含sd/bsl/si字段,而没有biftid字段,也无须由biftid字段映射出sd/bsl/si取值。在一种可能的实现方式中,在该第二网络设备从该源ipv6地址字段中获取该第一租户的标识信息之前,该方法还包括:该第二网络设备根据该bier头中包括的第二标识确定该源ipv6地址字段中包含有该第一租户的标识信息。在另一种可能的实现方式中,用于标识所述第二标识的字段为proto字段或位索引转发表标识biftid字段。在另一种可能的实现方式中,该第一租户的标识信息为虚拟网络标识vni或多协议标签交换mpls标签值。在另一种可能的实现方式中,该数据报文可以为单播报文,或者也可以组播报文,或者也可以为广播报文,本申请不做具体限定。在另一种可能的实现方式中,所述源ipv6地址字段中的24位用于标识所述第一租户的标识信息。应理解,以第一租户的标识信息为24位的vni为例,该源ipv6地址的24位内嵌有第一租户的标识信息。24bit的vni可以内嵌在128bit的源ipv6地址字段中的任意位置,本申请不做具体限定,例如,可以将24bit的vni内嵌在128bit的源ipv6地址字段中的最后24位(第105位至128位)。又如,还可以将24bit的vni内嵌在128bit的源ipv6地址字段中的第97位至120位。第二方面和第二方面的任意一个可能的实现方式的有益效果和第一方面以及第一方面的任意一个可能的实现方式的有益效果是对应的,对此,不再赘述。第三方面,提供了一种第一网络设备,包括接收模块、封装模块和发送模块。接收模块用于接收数据报文;封装模块用于对该数据报文进行封装,得到第一报文,该第一报文中包括互联网协议第六版ipv6头、基于位索引的显式复制bier头以及该数据报文,该ipv6头的源ipv6地址字段的一部分位中包含第一租户的标识信息;发送模块用于将该第一报文发送给第二网络设备,所述第一租户的标识信息用于所述第二网络设备确定将所述数据报文发送至与所述第一租户对应的所述第二网络设备的接口。在一种可能的实现方式中,该第一报文包括第二标识,所述第二标识用于指示该第一报文中包含该第一租户的标识信息。在另一种可能的实现方式中,用于标识所述第二标识的字段为proto字段或位索引转发表标识biftid字段。在另一种可能的实现方式中,还包括确定模块用于确定该第一租户的标识信息。在另一种可能的实现方式中,该确定模块具体用于:确定接收该数据报文的接口为第一租户的接口;根据该数据报文的接口为第一租户的接口确定该第一租户的标识信息。在另一种可能的实现方式中,该第一租户的标识信息为虚拟网络标识vni或多协议标签交换mpls标签值。在另一种可能的实现方式中,该数据报文为单播报文,或组播报文,或广播报文。在另一种可能的实现方式中,所述源ipv6地址字段中的24位用于标识所述第一租户的标识信息。第四方面,提供了一种第二网络设备,包括接收模块、解封装模块和发送模块。接收模块用于接收第一报文,其中,该第一报文中包括互联网协议第六版ipv6头、基于位索引的显式复制bier头以及该数据报文,该ipv6头的源ipv6地址字段的一部分位中包含第一租户的标识信息;解封装模块用于对该第一报文进行解封装,得到该数据报文;发送模块用于根据所述第一租户的标识信息将所述数据报文发送至所述第一租户对应的接口。在一种可能的实现方式中,还包括确定模块用于根据该bier头中包括的第二标识确定该第一报文中包含有该第一租户的标识信息。在另一种可能的实现方式中,用于标识所述第二标识的字段为proto字段或位索引转发表标识biftid字段。在另一种可能的实现方式中,该第一租户的标识信息为虚拟网络标识vni或多协议标签交换mpls标签值。在另一种可能的实现方式中,该数据报文为单播报文,或组播报文,或广播报文。在另一种可能的实现方式中,所述源ipv6地址字段中的24位用于标识所述第一租户的标识信息。也就是说,所述源ipv6地址字段的一部分位中包含所述第一租户的标识信息,该源ipv6地址字段的一部分位为该源ipv6地址字段中的24位。第五方面,提供了一种第一网络设备,该第一网络设备包括处理器、存储器、接口和总线。其中接口可以通过无线或有线的方式实现,具体来讲可以是网卡。上述处理器、存储器和接口通过总线连接。该接口具体可以包括发送器和接收器,用于第一网络设备实现上述收发。例如,该接口用于支持接收数据报文。又例如,该接口用于支持将该第一报文发送给该第二网络设备。该处理器用于执行上述实施例中由第一网络设备进行的处理。例如,该处理器用于对该数据报文进行封装,得到第一报文;和/或用于本文所描述的技术的其他过程。存储器包括操作系统和应用程序,用于存储程序、代码或指令,当处理器或硬件设备执行这些程序、代码或指令时可以完成方法实施例中涉及第一网络设备的处理过程。可选的,该存储器可以包括只读存储器(read-onlymemory,rom)和随机存取存储器(randomaccessmemory,ram)。其中,该rom包括基本输入/输出系统(basicinput/outputsystem,bios)或嵌入式系统;该ram包括应用程序和操作系统。当需要运行第一网络设备时,通过固化在rom中的bios或者嵌入式系统中的bootloader引导系统进行启动,引导第一网络设备进入正常运行状态。在第一网络设备进入正常运行状态后,运行在ram中的应用程序和操作系统,从而,完成上述第一方面以及任一可能的实现方式中的方法实施例中涉及第一网络设备的处理过程。可以理解的是,在实际应用中,第一网络设备可以包含任意数量的接口,处理器或者存储器。第六方面,提供了一种第二网络设备,该第二网络设备包括处理器、存储器、接口和总线。其中接口可以通过无线或有线的方式实现,具体来讲可以是网卡。上述处理器、存储器和接口通过总线连接。该接口具体可以包括发送器和接收器,用于第二网络设备实现上述收发。例如,该接口用于支持接收第一网络设备发送的第一报文。又例如,该接口用于支持根据该第一租户的标识信息将该数据报文发送至该第一租户对应的接口,例如,可以是发送至所述第一租户的桥接域中。该处理器用于执行上述实施例中由第二网络设备进行的处理。例如,该处理器用于从该源ipv6地址字段中获取该第一租户的标识信息;用于对该第一报文进行解封装,得到该数据报文;和/或用于本文所描述的技术的其他过程。存储器包括操作系统和应用程序,用于存储程序、代码或指令,当处理器或硬件设备执行这些程序、代码或指令时可以完成方法实施例中涉及第二网络设备的处理过程。可选的,该存储器可以包括只读存储器(read-onlymemory,rom)和随机存取存储器(randomaccessmemory,ram)。其中,该rom包括基本输入/输出系统(basicinput/outputsystem,bios)或嵌入式系统;该ram包括应用程序和操作系统。当需要运行第二网络设备时,通过固化在rom中的bios或者嵌入式系统中的bootloader引导系统进行启动,引导第二网络设备进入正常运行状态。在第二网络设备进入正常运行状态后,运行在ram中的应用程序和操作系统,从而,完成上述第二方面以及任一可能的实现方式中的方法实施例中涉及第二网络设备的处理过程。可以理解的是,在实际应用中,第二网络设备可以包含任意数量的接口,处理器或者存储器。第七方面,提供了一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述第一方面或第一方面的任一种可能执行的方法。第八方面,提供了一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述第二方面或第二方面的任一种可能执行的方法。第九方面,提供了一种计算机可读介质,该计算机可读介质存储有程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述第一方面或第一方面的任一种可能执行的方法。这些计算机可读存储包括但不限于如下的一个或者多个:只读存储器(read-onlymemory,rom)、可编程rom(programmablerom,prom)、可擦除的prom(erasableprom,eprom)、flash存储器、电eprom(electricallyeprom,eeprom)以及硬盘驱动器(harddrive)。第十方面,提供了一种计算机可读介质,该计算机可读介质存储有程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述第二方面或第二方面的任一种可能执行的方法。这些计算机可读存储包括但不限于如下的一个或者多个:只读存储器(read-onlymemory,rom)、可编程rom(programmablerom,prom)、可擦除的prom(erasableprom,eprom)、flash存储器、电eprom(electricallyeprom,eeprom)以及硬盘驱动器(harddrive)。第十一方面,提供一种芯片,该芯片包括处理器与数据接口,其中,处理器通过该数据接口读取存储器上存储的指令,以执行第一方面或第一方面任意一种可能的实现方式中的方法。在具体实现过程中,该芯片可以以中央处理器(centralprocessingunit,cpu)、微控制器(microcontrollerunit,mcu)、微处理器(microprocessingunit,mpu)、数字信号处理器(digitalsignalprocessing,dsp)、片上系统(systemonchip,soc)、专用集成电路(application-specificintegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)或可编辑逻辑器件(programmablelogicdevice,pld)的形式实现。第十二方面,提供一种芯片,该芯片包括处理器与数据接口,其中,处理器通过该数据接口读取存储器上存储的指令,以执行第二方面或第二方面任意一种可能的实现方式中的方法。在具体实现过程中,该芯片可以以中央处理器(centralprocessingunit,cpu)、微控制器(microcontrollerunit,mcu)、微处理器(microprocessingunit,mpu)、数字信号处理器(digitalsignalprocessing,dsp)、片上系统(systemonchip,soc)、专用集成电路(application-specificintegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)或可编辑逻辑器件(programmablelogicdevice,pld)的形式实现。第十三方面,提供了一种系统,该系统包括上述第三方面以及任一可能的实现方式中的第一网络设备和第四方面以及任一可能的实现方式中的第二网络设备。附图说明图1是本申请实施例提供的一种bier技术的示意性组网图。图2是本申请实施例提供的一种可能的bier头格式的示意图。图3是一种基于bier技术建立bier转发表以及进行bier报文转发的过程。图4是本申请实施例提供的一种bierv6封装的报文格式示意图。图5是本申请实施例提供的一种报文发送的方法的示意性流程图。图6是本申请实施例提供的一种第一网络设备600的示意性结构图。图7是本申请实施例提供的一种第二网络设备700的示意性结构图。图8是本申请实施例的第一网络设备2000的硬件结构示意图。图9是本申请实施例的另一种第一网络设备2100的硬件结构示意图。图10是本申请实施例的第二网络设备2200的硬件结构示意图。图11是本申请实施例的另一种第二网络设备2400的硬件结构示意图。具体实施方式下面将结合附图,对本申请中的技术方案进行描述。本申请将围绕包括多个设备、组件、模块等的系统来呈现各个方面、实施例或特征。应当理解和明白的是,各个系统可以包括另外的设备、组件、模块等,并且/或者可以并不包括结合附图讨论的所有设备、组件、模块等。此外,还可以使用这些方案的组合。另外,在本申请实施例中,“示例的”、“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用示例的一词旨在以具体方式呈现概念。本申请实施例中,“相应的(corresponding,relevant)”和“对应的(corresponding)”有时可以混用,应当指出的是,在不强调其区别时,其所要表达的含义是一致的。本申请实施例描述的网络架构以及业务场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:包括单独存在a,存在a和b,以及单独存在b的情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。组播(multicast)是一种通过使用一个组播地址将数据在同一时间以高效的方式发往处于传输控制协议(transmissioncontrolprotocol,tcp)/互联网协议(internetprotocol,ip)网络上的多个接收者的数据传输方式。组播源经由网络中的链路向组播组中的组播组成员发送组播流,该组播组中的组播组成员均可以接收到该组播流。组播传输方式实现了组播源和组播组成员之间的点对多点的数据连接。由于组播流在每条网络链路上只需传递一次,且只有在链路出现支路时,该组播才会被复制。因此,组播传输方式提高了数据传输效率和减少了骨干网络出现拥塞的可能性。网络协议(internetprotocol,ip)组播技术实现了ip网络中点到多点的高效数据传送,能够有效地节约网络带宽、降低网络负载。因此,在实时数据传送、多媒体会议、数据拷贝、交互式网络电视(internetprotocoltelevision,iptv)、游戏和仿真等诸多方面都有广泛的应用。该组播技术使用组播协议构建控制平面组播树,然后利用组播树将网络平面逻辑树状,以实现组播点到多点的数据转发。这种以构建分发树为核心的中间节点都需要维护复杂的组播转发信息状态。在网络规模越来越大,组播数据流量与日俱增的情况下,这种组播技术面临越来越大的成本和运维方面的挑战。为此,业界提出了一种新的用于构建组播数据转发路径的技术,称为位索引的显式复制(bitindexexplicitreplication,bier)技术,该技术提出了一种不需要构建组播分发树的组播技术架构。如图1所示,支持bier技术的路由器称为位转发路由器(bit-forwardingrouter,bfr),该bfr可接收并转发bier报文。由上述一个或多个bfr组成的一个组播转发域称为bier域(bierdomain)。在bier域的入口,对原始组播数据报文进行bier封装的bfr称为位转发入口路由器(bit-forwardingingressrouter,bfir)。在bier域的出口,对从bier报文中解封装出原始组播数据报文的bfr称为位转发出口路由器(bit-forwardingegressrouter,bfer)。应理解,bier域中的bfir和bfer可以称为bier域中的边缘bfr。为了便于理解,下面结合图2-图4,对bier技术进行详细描述。在bier域中,可以对上述的边缘bfr配置一个在整个bier子域(subdomain,sd)中全局唯一的比特位置(bitposition)标识。作为一个示例,为每一个边缘bfr配置一个值作为bfr标识(bfridentifier,bfrid),例如,bfrid可以是一个1-256之间的数值。bier域中所有的bfrid组成一个比特串(bitstring)。例如,一种可能的bier报文的格式为:bier头+原始组播数据报文。具体的,原始组播数据报文在bier域中传输时需要额外封装一个特定的bier头。bier头中通过bitstring标注了该原始组播数据报文的所有目的节点。bier域中的bfr可以根据位索引转发表(bitindexforwardingtable,bift)以及bier头中携带的bitstring进行转发,保证原始组播数据报文能够发送到所有的目的地址。需要说明的是,本申请中的原始组播数据报文的目的节点可以是多个bfer的集合。为了便于描述,下面将原始组播数据报文需要发送至的多个bfer的集合称为目的节点。应理解,bier头后面的原始组播数据报文可以是互联网协议第6版(internetprotocolversion6,ipv6)组播报文,或者还可以是互联网协议第4版(internetprotocolversion4,ipv4)组播报文。图2是一种可能的bier头格式的示意性框图。如图2所示,bier头中可以包含但不限于:一个长度为20bit的位索引转发表标识(bitindexforwardingtableidentifier,biftid)、比特串长度(bitstringlength,bsl)、64bit(8个字节)的其他字段,例如,bier头后面的原始组播数据报文的传输类型(trafficclass,tc)、栈(stack,s)、生存时间(timetolive,ttl)字段、熵(entropy)字段和版本号(version,ver)等。下面分别对bier头中的字段进行详细描述。(1)biftid字段长度为20bit,在bier多协议标签交换(multiprotocollabelswitching,mpls)封装下就是一个mpls标签(label,l)。该mpls标签可以称为bier标签,其随后的tc/s/ttl等字段是标准的标签编码格式,下面会分别对tc/s/ttl等字段进行说明,此处暂不详述。biftid可以是bift-id,可以包括子域(sub-domain,sd)/比特串长度(bitstringlength,bsl)/集合标识(setidentifier,si)的一个组合,不同的biftid可以对应于不同的sd/bsl/si组合。1、子域sd一个bier域可以根据实际的业务场景的需求划分和配置为不同的子域sd,以支持内部网关协议(interiorgatewayprotocol,igp)多拓扑等特性。每个bier域须包含至少一个sub-domain,即默认的sub-domain0。当划分多个子域时,bier域中各bfr路由器须配置所有子域。例如可以在bier域中各bfr路由器上配置一个sub-domain0,使用系统默认拓扑,再配置一个sub-domain1,使用组播拓扑。每个子域sd由子域标识(sub-domainidentifier,sd-id)来表示。例如,sd-id的取值为[0-255],长度为8bit。作为一个示例,虚拟私有网(virtualprivatenetwork,vpn)的不同,将bier域配置为不同的sd,并配置不同的vpn使用不同的sd。例如,vpn1使用sd0,vpn2使用sd1。需要说明的是,多个vpn也可以使用相同的sd,bier域中不同的sd可以在一个内部网关协议(interiorgatewayprotocol,igp)进程或拓扑中,也可以不在一个igp进程或拓扑中,本申请实施例对此不做具体限定。2、比特串长度(bitstringlength,bsl)bsl为bier头中包括的bitstring的长度。bsl可以有多种,本申请实施例对此不做具体限定。最小的bsl为64位,bsl还依次可以有128位,256位,512位,1024位,2048位,最大的bsl为4096位。具体的,在报文中通过4bit来标识,例如,当bsl为64位时,报文中用0001标识,当bsl为128位时,报文中用0010标识,当bsl为512位时,报文中用0100标识,当bsl为1024位时,报文中用0101标识,依次类推。3、集合标识(setidentifie,si)如果网络中的bfer节点数量大于256,为了适应这种情况,bier封装中不仅包含一个bitstring,还会包含有一个集合标识(setidentifie,si)。si的作用在于将bier节点的编号划分为多个不同的区间,从而支持更大规模的网络编址。si可以理解为网络中的多个边缘bfr或配置的bfrid组成的集合。作为一个示例,bsl为256bit,但是网络中有超过256个边缘bfr,或者配置的bfrid有超过256个,则需要将这些边缘bfr或bfrid划分为不同的集合。例如,以bsl为256位为例,bfrid为1至256的256个边缘bfr为集合0(setindex0,或si=0),bfrid为257至512的256个边缘bfr为集合1(setindex1,或者si=1)。bier域中的bfr在接收到了bier报文之后,可以根据bier头中的biftid确定该bier报文属于哪个sd,使用的bsl以及报文属于该bsl的哪个si组成的集合。下面列举出几种可能的biftid所代表的对应的sd/bsl/si组合。biftid=1:correspondingtosd0,bsl256,si0//相当于sd0/bsl256/si0biftid=2:correspondingtosd0,bsl256,si1//相当于sd0/bsl256/si1biftid=3:correspondingtosd0,bsl256,si2//相当于sd0/bsl256/si2biftid=4:correspondingtosd0,bsl256,si3//相当于sd0/bsl256/si3biftid=5:correspondingtosd0,bsl512,si0//相当于sd0/bsl512/si0biftid=6:correspondingtosd0,bsl512,si1//相当于sd0/bsl512/si1biftid=7:correspondingtosd1,bsl256,si0//相当于sd1/bsl256/si0biftid=8:correspondingtosd1,bsl256,si1//相当于sd1/bsl256/si1biftid=9:correspondingtosd1,bsl256,si2//相当于sd1/bsl256/si2biftid=10:correspondingtosd1,bsl256,si3//相当于sd1/bsl256/si3biftid=11:correspondingtosd1,bsl512,si0//相当于sd1/bsl512/si0biftid=12:correspondingtosd1,bsl512,si1//相当于sd1/bsl512/si1需要说明的是,biftid字段值和和一个<sd,bsl,si>的三元组对应。通过bift-id字段,可以获得唯一的<sd,bsl,si>信息。它有如下作用:通过bsl获取bier报文头的bitstring的长度,从而知道整个bier报文头的长度;通过bsl及si信息可知bitstring代表的是bfr-id是1~256还是257~512等;通过sd信息即可找到对应的转发表。(2)比特串(bitstring)字段bitstring中的每个bit用来标识边缘bfr,例如bitstring的低位(最右)的一个bit用来标识bfr-id=1的bfer。bitstring中从右往左第2个bit用来标识bfr-id=2的bfer。转发面转发所依据的转发表项则是根据报文中的bitstring决定该报文要往哪几个bfer发送。当bier域中的bfr在接收到了包含有bier的报文头时,根据bier头中携带的bitstring以及biftid转发bier报文。需要说明的是,bit位的值为1表示报文要往该bfr-id所代表的bfer节点发送,bit位的值为0则表示报文不需要往该bfr-id所代表的bfer节点发送。以biftid=2为例,bfr在接收到了bier报文之后,可以根据该bier头中的biftid获取该bier报文属于sd0,bier头中使用的bsl为256bit,属于集合1(包括bfrid为257至512的256个边缘bfr的集合)。(3)传输类型(trafficclass,tc)字段标识报文的优先级。(4)栈(stack,s)s是栈底标记,在bier报文头中该标记的值是1,即这个mpls标签是整个标签栈的栈底标签。(5)版本号(version,ver)字段长度为4bit,是ip的版本号,值为4代表ipv4,值为6代表ipv6。(6)熵(entropy)字段属于一个流量的多个报文的熵相同,不同的流量的多个报文的熵不相同。当报文被转发时可以根据熵将不同的流量分担到不同的链路上、而相同流量的多个报文则走相同的链路。(7)proto字段用来标识bier报文头后面的payload格式,例如值4和6分别代表ipv4报文和ipv6报文,值2代表上游分标签的mpls报文,是在mvpnoverbier中所使用的一种proto值。使用上游标签的原因是,组播是点到多点的发送,发送端pe可以分配一个唯一的标签并通过控制平面发送给接收端pe,数据报文使用发送端pe所分配的标签并在接收端pe进行识别,对接收端pe而言这个标签不是自己所分配而是发送端pe所分配,称为上游标签。(8)nibber4比特固定值0101。该字段用来区分mpls承载的业务,区别bier、ipv4和ipv6。因为在mpls封装转发中,有时检查标签栈后面的ipv4或者ipv6头部以支持ecmp。(9)bfir-idbfir的bfr-id。bfir节点使用sub-domain封装发送bier报文,那么bfir-id字段需要填写该节点在该sub-domain下的bfr-id。(10)bitstringbier报文的目的节点集合字符串。需要说明的是,本申请实施例对bier头格式不做具体限定,只要bier头中包含bitstring字段即可。bier头格式可以是如图2所示的格式,或者还可以是其他格式。例如,一种可能的实现方式中,bier头中直接包含sd/bsl/si字段,而没有图2中的biftid字段,也无需由biftid字段映射出sd/bsl/si取值。下面结合图3,对基于bier技术建立bier转发表以及进行bier报文转发的过程进行详细描述。如图3所示的bier域中可以包括节点a至节点f,其中,节点a、节点d、节点e、节点f属于bier域内的边缘bfr,节点b、节点c属于bier中间转发节点。具体的,节点a位于bier域的入口,负责对原始组播数据报文进行bier封装,对应于图1中的bfir。节点d、节点e、节点f位于bier域的出口,负责从bier报文中解封装出原始组播数据报文,对应于图1中的bfer。本申请实施例中可以为每一个bier域内的边缘bfr分配一个唯一的bfr-id,例如,在图3中,为节点a、节点d、节点e、节点f配置的bfr-id分别为4、1、3、2。中间转发的bfr,例如,节点b、节点c不分配bfr-id。数据流量的bier头中封装的bitstring标注了该流量的所有目的节点。例如,对于bfr-id为1的节点d对应的bitstring为0001,bfr-id为2的节点f对应的bitstring为0010,bfr-id为3的节点e对应的bitstring为0100,bfr-id为4的节点a对应的bitstring为1000。应理解,为每一个bier域内的边缘bfr分配的bfr-id值可以通过路由协议向bier域内的其他bfr进行泛洪,泛洪的bier信息中还包括边缘bfr的ip地址、封装信息。例如节点a的泛洪的bier信息会携带节点a的ip地址以及bift-id。bier域内的bfr(例如,图3中的节点f)可以根据泛洪的bier信息建立bift表项,以便于图3中的节点f接收到bier报文之后,根据建立的bift表项来完成bier报文到目的节点的转发。对于节点a而言,如果需要将bier报文发送至bfr-id分别为1、2、3的bfer,该bier报文需要先发送至节点a的邻居(节点b),bfr-id为4的边缘bfr为其自己,因此,节点a建立的bift表项如下所示:转发表项1:邻居(neighbor,nbr)=b,转发位掩码(forwardingbitmask,fbm)=0111;转发表项2:nbr*=a,fbm=1000。其中,转发表项1用于表示当有bier报文的bitstring从右往左第1个bit位、第2个bit位、第3个bit位任意一个为1时,该bier报文会往节点a的邻居(节点b)发送。转发表项2用于表示当有bier报文的bitstring从右往左第4个bit位为1时,该bier报文会往节点a发送,由于节点a是自己,因此,节点a会剥掉bier头,按照原始组播数据报文中的信息进行转发。需要说明的是,上述转发表项的标识中使用*标识该nbr为自己。同样地,图3中的其他节点也可以根据其自己的邻居节点建立bift表项。其他节点建立的bift表项请参见图3,此处不再赘述。当节点a作为bier域入口的bfir收到原始组播数据报文后,在原始组播数据报文前封装bier头。应理解,为了便于描述,下文中简称为入口节点a。作为一个示例,入口节点a可以在接收到原始组播数据报文后,根据边界网关协议bgp消息泛洪的bfr-id获知该原始组播数据报文的目的节点。例如,原始组播数据报文的接收者为bfr-id为3的目的节点为e、bfr-id为2的目的节点为f、bfr-id为1的目的节点为d。入口节点a封装bier头的bitstring为0111,并根据上述转发表项1将封装之后的bier报文转发到邻居节点b。节点b收到该bier报文后,根据bitstring为0111以及bift表项确定需要将该bier报文分别发送至节点c和节点e。节点b将该bier报文往节点c发送时,可以将bier头的bitstring(0111)以及bift表项里nbr=c对应的fbm字段做and操作,本申请实施例中and的结果是0011,因此,节点b可以将bier头的bitstring修改为0011,并发送至节点c。同样地,节点b将该bier报文往节点e发送时,可以将bier头的bitstring修改为0100。节点e收到该bier报文后,根据bitstring为0100确定该bier报文要往邻居节点e发送。由于节点e根据转发表中的标识*确定邻居节点e为自己,因此节点e作为bier域出口的bfer,可以从bier报文中解封装出原始组播数据报文,并根据内层的原始组播数据报文中的信息进行转发。在bier-mpls封装中,bier头前32bit是一个mpls标签编码,其中,该前32bit中的前20bit则是mpls标签值。该mpls标签值会在转发的过程中发生变化,例如入口节点a向节点b发送报文时,需要封装节点b的mpls标签值,节点b向节点c发送报文时,需要封装节点c的mpls标签值。本申请实施例中,节点a/节点b/节点c/节点d/节点e/节点f分配的mpls标签值分别是100/200/300/400/500/600,这些mpls标签值需要携带在前述的bier封装信息并通过路由协议向bier域内的其他bfr进行泛洪,使得节点a可以获知节点b的mpls标签值。这一标识bier信息的mpls标签也称为bier标签。本申请实施例中,边缘bfr配置的比特位置会事先通过内部网关协议(interiorgatewayprotocol,igp)或者外部网关协议(bordergatewayprotocol,bgp)在bier域中泛洪,使得bier域中的各个bfr形成用于指导原始组播数据报文在bier域进行转发的位索引转发表(bitindexforwardingtable,bift)。这种随着igp或者bgp在bier域中泛洪的信息可以称为bier信息。bfr在接收到封装有bier头的bier报文时,根据bift表项来完成bier报文到目的节点的转发。本申请实施例中内部网关协议igp可以包括但不限于:开放式最短路径优先(openshortestpathfirst,ospf)协议,中间系统到中间系统(intermediatesystemtointermediatesystem,isis)协议等。应理解,bier域指的是一个能通过igp或bgp协议泛洪bier信息并建立bift表项的网络区域,bier域包括bfir和bfer。该bier信息可以包括但不限于上述每一个边缘bfr的bfrid。作为一个示例,一个自治系统(autonomoussystem,as)域内部署igp并泛洪bier信息,该as域就是一个bier域(bierdomain)。本申请实施例中,bier封装的类型可以有多种,作为一个示例,通过多协议标签交换(multi-protocollabelswitching,mpls)对bier报文进行的封装,这种封装可以称为bier-mpls封装。作为另一个示例,可以通过互联网协议第6版(internetprotocolversion6,ipv6)对bier报文进行的封装,这种封装可以称为bierv6封装。应理解,bierv6封装是结合ipv6和bier两者优点而形成的方案,bierv6封装下的报文格式为:ipv6头+bier头+原始组播数据报文。其中,bier头可以包含在ipv6扩展头中。本申请实施例对包含bier头的ipv6扩展头不做具体限定。例如,该ipv6扩展头可以是目的选项头(destinationoptionheader,doh),又如,该ipv6扩展头还可以是路由头(routingheader,hr)。需要说明的是,在bierv6封装中,本申请实施例对bier头格式不做具体限定,只要bier头中包含bitstring字段即可。bier头格式可以是如图2所示的格式,或者还可以是其他格式。例如,一种可能的实现方式中,bier头中直接包含sd/bsl/si字段,而没有图2中的biftid字段,也无需由biftid字段映射出sd/bsl/si取值。具体的,作为示例,参见图4中所示的一种可能的bierv6封装,其中,bier头可以位于ipv6扩展头中。下面对ipv6头中包含的字段进行详细描述。版本号(version,ver):ip的版本号,值为6代表ipv6。流量类型(trafficclass,tc)字段:标识报文的优先级;流标签(flowlabel,fl)字段:可以将属于一个流量的多个报文打上相同的流标签、不同的流量的多个报文打上另一个流标签值。当报文被转发时可以根据流标签将不同的流量分担到不同的链路上、而相同流量的多个报文则走相同的链路。载荷长度(payloadlength,pl)字段:表示报文的长度。下一个头部(nextheader,nh)字段:表示报文的下一个头部的类型,例如可以是代表一个ipv6扩展头。跳数限制(hoplimit,hl)字段:表示报文的条数限制。源地址(sourceaddress,sa)字段:标识报文的源地址。目的地址(destinationaddress,da)字段:标识报文的目的地址。下面以图3所示的bier域为例对bierv6封装的报文转发过程进行说明。节点a作为ipv6网络的头节点(ingress节点),收到用户组播数据报文后,将报文封装在bierv6头后,即由一个外层ipv6头和包含bier头的ipv6扩展头之后,得到封装后的bierv6报文。其中,ipv6扩展头中包含的bier报文头携带表示目的节点集合的bitstring。节点a根据bier头及其bitstring信息,将封装后的bierv6报文发送给b,发送时ipv6头中的目的地址字段中使用b的单播地址(例如,b::100)。节点b根据bier头及其bitstring信息,将报文发送给c和e,发送时ipv6头中的目的地址字段中使用c的单播地址(例如,c::100)以及e的单播地址(例如,e::100)。同样的,节点c根据bier报文头及其bitstring信息,将报文发送给d和f,发送时ipv6头中的目的地址字段中使用d的单播地址(例如,d::100)以及f的单播地址(例如,d::100)。一种相关的技术方案中,组播业务中可以应用bierv6封装,该组播业务可以支持多个vpn,该场景也可以称为组播vpn场景。具体的,每个vpn中组播源节点可以为每个vpn分配一个ipv6地址,该vpn中的所有节点需要保存源ipv6地址和vpn之间的对应关系。一方面,组播接收节点在对收到bierv6报文后,可以根据其源ipv6地址确定报文属于哪个vpn,另一方面,组播接收节点还可以在收到bierv6报文后,根据其源ipv6地址确定报文来自于哪个组播源节点,从而进行组播的反向路径转发(reversepathforwarding,rpf)检查。在多租户的同网段业务(intra-subnet业务)中,需要支持大量的租户。因此,在多租户的同网段业务中,如果还按照上述相关的技术方案,每个节点需要保存每个租户的源ipv6地址和对应的租户的标识之间的对应关系,不仅会造成内存开销大的问题,还会造成内存开销浪费的问题。本申请实施例提供的技术方案,在多租户的同网段业务中进行bierv6报文的封装和转发的情况下,可以减小内存开销,避免内存开销浪费等问题。下面结合图5,对本申请实施例提供的一种报文发送的方法进行详细说明。图5是本申请实施例提供的一种报文发送的方法的示意性流程图。参见图5,该方法可以包括步骤510-530,下面对步骤510-530进行详细描述。步骤510:第一网络设备接收数据报文。本申请实施例中,第一网络设备可以是边缘bfr,例如,在bier域中对数据报文进行bier封装的bfir。如图3所示,该第一网络设备可以对应于节点a。本申请实施例对接收到的内层的数据报文不做具体限定,可以是单播数据报文,也可以是组播数据报文,或者还可以是广播报文。步骤520:第一网络设备对所述数据报文进行封装,得到第一报文,所述第一报文中包括ipv6头和所述数据报文,所述ipv6头的源ipv6地址的字段的一部分位中包含租户的标识信息。云计算是一种云服务提供商提供资源的网络,该网络中可以包括大量的网络设备,使用者可以随时获取“云”上的资源,按需求量使用。并且可以看成是无限扩展的,只要按使用量付费就可以。“云”就像自来水厂一样,我们可以随时接水,并且不限量,按照自己家的用水量,付费给自来水厂就可以。租户(tenant)是指获取并使用网络设备上的资源的客户。通常,一个网络设备上可以有多个接口,一个或多个接口可以对应一个租户。该租户可以租用该网络设备,或者也可以租用该网络设备上的一个或多个虚拟机。不同的租户需要通过租户的标识信息来区分。还用理解,属于一个租户的网络设备或者虚拟机可以在一个网段,或者也可以不在一个网段,本申请不做具体限定。具体的,本申请实施例的一种实现方式中,所述源ipv6地址字段的其中24位用于标识租户的标识信息。本申请实施例中,第一网络设备在接收到数据报文之后,对该数据报文进行bierv6封装,得到第一报文。该第一报文包括外层的ipv6头、bier头以及内层的数据报文。应理解,bier头可包含在ipv6扩展头中,该ipv6扩展头可以是目的选项头(destinationoptionheader,doh),又如,该ipv6扩展头还可以是路由头(routingheader,hr),本申请不做具体限定。第一网络设备还可以根据配置信息,将数据报文对应的租户的标识信息包含在ipv6头中的源ipv6地址的字段中。具体的有关ipv6头中包含的字段请参考上文图4中的描述,此处不再赘述。应理解,本申请实施例对租户的标识信息不做具体限定,例如,可以通过一个24位(bit)的虚拟网络标识(virtualnetworkidentifier,vni)代表一个租户或vpn实例,又如还可以通过一个20bit的mpls标签值代表一个租户或vpn实例。需要说明的是,使用20bit的mpls标签值表示租户的标识信息,对租户的数据报文使用bier进行封装时,使用一个{bier头+mpls标签+数据报文}的封装方式。其中,数据报文例如可以是广播,未知单播和组播(broadcast,unknownunicastandmulticast,bum)流。mpls标签是全局标签,即在多个tor设备上使用同一个mpls标签标识同一个租户。bier头中的proto字段值用1来表示bier头后面是一个mpls标签。本申请实施例也可以适用于对这种使用mpls全局标签的情况,将表示租户的mpls全局标签嵌入在ipv6源地址中。以24bit的vni为例。第一网络设备可以根据本地配置的104bit的地址块和24bit的vni共同构建ipv6头中的长度为128bit的源ipv6地址。具体的,24bit的vni可以内嵌在128bit的源ipv6地址字段中的任意位置,本申请不做具体限定,例如,可以将24bit的vni内嵌在128bit的源ipv6地址字段中的最后24位(第105位至128位)。又如,还可以将24bit的vni内嵌在128bit的源ipv6地址字段中的第97位至120位。需要说明的是,本申请实施例中,bier域中的各个网络设备需要保持vni内嵌在源ipv6地址字段中的位置相同,这样,在bier域的出口对bier报文进行解封装的bfer才可以从源ipv6地址字段中准确获取vni。具体实现方式有多种,各个网络设备可以默认24bit的vni在源ipv6地址字段中的位置,或者还可以通过手工配置的方法使得24bit的vni在源ipv6地址字段中的位置。可选地,在一些实施例中,第一网络设备还可以指示ipv6头的源ipv6地址字段中包含有租户的标识信息。一种可能的实现方式中,第一网络设备可以使用ipv6扩展头的bier头内的一个字段的取值指示租户的标识信息内嵌在ipv6头的源ipv6地址字段中。例如,第一网络设备将bier头的proto字段的取值设置为一个特殊的取值,该特殊的取值用于指示租户的标识信息内嵌在ipv6头的源ipv6地址字段中。具体的,参见图2所示的bier头格式,其中,proto字段共占用6个bit,当前rfc8296标准中已经定义了值1/2/3/4/5/6,本申请实施例中proto字段的特殊取值可以是这些值之外的一个值。又如,第一网络设备还可以通过bier头的bift-id字段指示租户的标识信息内嵌在ipv6头的源ipv6地址字段中。又如,第一网络设备还可以通过bier头部的一个标记位,指示租户的标识信息内嵌在ipv6头的源ipv6地址字段的一部分位中。具体的,所述一部分位可以是所述源ipv6地址字段的24位。所述24位可以是位于所述源ipv6地址最后面的24位,即从左往右第105位到第128位。所述24位也可以是位于所述源ipv6地址的中间24位,例如从左往右第97位至第120位。可选地,在一些实施例中,第一网络设备将租户的标识信息包含在ipv6头的源ipv6地址的字段之前,还包括:第一网络设备确定内嵌在源ipv6地址字段中的租户的标识信息。作为示例,一种可能的实现方式中,第一网络设备可以根据接收数据报文的接口确定租户的标识信息。例如,第一网络设备从10ge1/0/2.1接口收到数据报文,根据配置信息确定10ge1/0/2.1接口为第一租户的接口。因此,该第一网络设备将该第一租户对应的标识信息内嵌在源ipv6地址字段中。应理解,第一网络设备可以保存该第一网络设备上的接口和租户之间的对应关系,例如,接口10ge1/0/2.1对应第一租户,第一网络设备可以根据收到数据报文的接口为10ge1/0/2.1接口以及接口和租户之间的对应关系,确定该10ge1/0/2.1接口为第一租户的接口。步骤530:第一网络设备将该第一报文发送给第二网络设备。本申请实施例中,该第二网络设备可以是bier域中的边缘bfr,例如,bier域中对bier报文进行解封装的bfer。每个bfer均配置有一个全局唯一的bfrid。例如,bfrid可以是一个1-256之间的数值。bier域中所有的bfrid组成一个比特串(bitstring)。具体的请参考上文中对bier技术的描述,此处不再赘述。该第二网络设备在接收到上述第一报文之后,可以根据其上建立的转发表项以及第一报文中的bier头中的bitstring确定该第一报文是发送给该第二网络设备,并由该第二网络设备对第一报文进行解封装后,对内层的数据报文进行转发。本申请实施例中,该第二网络设备在对第一报文进行解封装之前,需要从外层的ipv6头中的源ipv6地址字段中获取包含的租户的标识信息。并在对第一报文解封装之后,根据获取的租户的标识信息,将内层的数据报文发送至该租户对应的接口。具体的,本申请实施例中,第二网络设备可以获取第一报文中ipv6头的源ipv6地址字段的一部分位中包含的第一租户的标识信息,并根据保存的接口和租户之间的对应关系,确定要发往该第一租户的接口,并将内层的数据报文发送至该第一租户对应的接口。应理解,网络设备上租户对应的接口可以属于二层网络,或者也可以属于三层网络,本申请实施例对此不做具体限定。在网络设备上租户对应的接口属于三层网络的场景中,租户或该租户在网络设备上对应的接口也可以称为桥域(bridge-domain)。为了便于描述,下面的实施例中可以以桥域(bridge-domain)代表租户或该租户在网络设备上对应的接口。可选的,在一些实施例中,在第二网络设备从外层ipv6头的源ipv6地址字段中获取包含的租户的标识信息之前,所述方法还包括:该第二网络设备确定外层ipv6头的源ipv6地址字段中包含有租户的标识信息。实现的方法有多种,本申请不做具体限定。下面对几种可能的实现方式进行详细描述。一种可能的实现方式中,第二网络设备根据ipv6扩展头的bier头内的一个字段的取值指示租户的标识信息内嵌在ipv6头的源ipv6地址字段中。例如,第二网络设备根据bier头的proto字段的取值为一个特殊的取值确定外层ipv6头的源ipv6地址字段中包含有租户的标识信息。又如,第二网络设备根据bier头的bift-id字段确定源ipv6地址字段中包含有租户的标识信息,具体的,第二网络设备根据bier头部的bift-id字段确定报文属于哪个sub-domain,再根据本地配置的sub-domain信息,确定源ipv6地址字段中包含有租户的标识信息。另一种可能的实现方式中,第二网络设备还可以根据本地配置确定租户的标识信息内嵌在ipv6头的源ipv6地址字段中。上述技术方案中,将多租户的标识信息vni内嵌在bieripv6报文的ipv6源地址中,同时指示“租户vni标识信息内嵌在ipv6源地址”中。从而使得接收到报文的网络设备(例如,tor交换机)在确定报文的租户信息时,只需要根据指示信息读取ipv6源地址获得具体的vni信息。接收报文的网络设备,不需要根据整个ipv6源地址来获取对应的租户信息,也不需要保存ipv6地址和vni的n:1映射关系,从而减小内存开销,避免内存开销浪费等问题。下面以图3所示的网络拓扑为例,对本申请实施例提供的报文发送的方法的具体实现过程进行描述。应理解,下面的例子仅仅是为了帮助本领域技术人员理解本申请实施例,而非要将申请实施例限制于所示例的具体数值或具体场景。本领域技术人员根据所给出的例子,显然可以进行各种等价的修改或变化,这样的修改和变化也落入本申请实施例的范围内。首先,先对节点上的配置信息进行说明。下面对上述配置信息进行详细描述。“bridge-domain20”表示配置的intra-subnet桥域20或intra-subnet租户20;“bridge-domain30”表示配置的intra-subnet桥域30或intra-subnet租户30。“interface10ge1/0/2.1model2”表示将该接口加入到桥域20;“interface10ge1/0/2.2model2”表示将该接口加入到桥域30。“vni5020”表示租户20对应的标识信息为vni5020;“vni5030”表示租户30对应的标识信息为vni5030。“bridge-domain20”下的“route-distinguisher12:1”表示桥域20的各节点之间使用evpn信令建立对应关系。例如,“bridge-domain20”的各节点上可以配置相同的route-distinguisher(12:1)、相同的vpn-target(2:2)。bridge-domain30”下的“route-distinguisher13:1”表示桥域30的各节点之间使用evpn信令建立对应关系,例如,“bridge-domain30”的各节点上可以配置相同的route-distinguisher(13:1)、相同的vpn-target(3:2)。“bier”表示配置bier。“bier”下的“sub-domain6ipv6”表示biersub-domain6使用ipv6网络。“bfr-prefixinterfaceloopback1”表示使用loopback1的地址(即2001:a1::1)作为bfr-prefix。应理解,bier域中的各bfr都需要为每个sub-domain配置一个bfr-prefix,该bfr-prefix是bfr路由器的ip地址,推荐使用loopback接口的ip地址。如果bfr上配置了多个sub-domain,这些sub-domain可以使用相同的bfr-prefix,也可以使用不同的bfr-prefix。“encapsulationipv6bsl256max-si4”表示对该sub-domain使用ipv6封装。“end-bier2001:a1::ab37”表示配置的一个用于指示bier转发的ipv6地址作为end.bier地址。还应理解,bierv6数据报文中所使用的ipv6地址,不是一个普通的ipv6地址,而是一个用于bier报文处理的特定ipv6地址,称为end.bier。bfr路由器配置此end.bier的地址后,在信息转发表(forwardinginformationbase,fib)里形成一个该地址的128位掩码的转发表项,并且转发表项标识该地址是end.bier。当路由器收到ipv6报文时,首先对目的地址查找fib,当fib查找的结果是一个end.bier的地址时,会执行特定于end.bier的动作,即继续处理ipv6扩展报文头中的bier报文头。否则,如果是一个普通的ipv6目的地址,那么fib查找的结果指示该报文是一个发送给本路由器的、含有目的选项扩展报文头的ipv6报文,那么该报文可能会被送到cpu进行处理,就达不到数据面处理的目的了。end.bier作为bierv6数据报文封装的一个字段值,和bierv6数据报文封装需要的其它字段值如bift-id、bier的sub-domain、bfr-id等信息均作为bfr-prefix信息的子信息通过igp泛洪。igp域中的各路由器根据bfr-prefix、bfr-id、bift-id、end.bier地址,建立bierv6转发表,bierv6转发表的邻居信息会包含对应于该邻居的end.bier地址。该end.bier仅用来指示bier报文处理,而bier转发则依赖于扩展报文头中的bier报文头部,包括根据bier报文头部的bift-id字段确定报文属于哪个<sd,bsl,si>,再根据的bitstring确定报文要发往哪个si的哪些bfer节点。如果路由器a和路由器b之间还有一个不支持bier转发的ipv6路由器,该路由器只需要根据报文中的ipv6目的地址将报文转发给路由器b。“bfr-id1”表示配置节点的bfr-id。“protocolisis”表示bier的信息泛洪使用is-is协议。“ipv6-blockblk12001:a2:3:4:5:6::104”表示配置一个名为blk1的地址,该blk1的地址和租户的标识信息共同构造成一个封装在数据报文外层的ipv6头中的源ipv6地址字段。以一个24bit的vni为租户的标识信息为例,blk1的地址其掩码为104bit。以一个20bit的vni为租户的标识信息为例,blk1的地址其掩码为108bit。“interfacenve1”表示表示配置节点的网络虚拟化边缘(networkvirtualizationedge,nve)信息。“source2001:db1:a::1128”表示本节点nve使用2001:db1:a::1的地址作源地址。以单播为例,第一网络设备从桥域20的子接口收到单播报文要发送给第二网络设备,那么第一网络设备将单播报文封装一个外层ipv6头和vni信息,外层ipv6头的源地址使用本地址封装,目的地址是tor2上的vni地址。“vni5020head-endpeer-listprotocolbgp”表示vni5020对应的桥域使用bgp协议来发现各节点。例如,桥域20中的10个节点tor1/…/tor10可以和一个共同的bgp路由反射器(routereflector,rr)建立bgp连接,每个tor都将自己的ip地址发送给rr并通过rr发送给其他tor,那么各tor都知道桥域20中有哪些节点。“vni5020bumbiersub-domain6vni-embeddedblk1”表示对于vni5020的intra-subnet租户的数据报文使用bier封装转发。使用bier的sub-domain6,并且使用blk1的地址块和租户的标识信息(例如,vni)共同构造源ipv6地址字段。“vni5020unicastvni-embeddedblk”1表示对于vni5020的intra-subnet租户的单播流量使用ipv6地址内嵌vni的方式。例如,本设备会根据本配置中的blk1及vni值构造一个ipv6地址(设为地址1),并生成对应于该地址的fib。fib中该地址有一个指示信息,指示该地址对应于哪个vni,这样本设备收到目的地址为地址1的报文,查fib表就可以知道报文属于哪个vni。该方式下,vni5020的bgp将还会把本设备的blk1地址块发布给桥域20的其他节点,桥域20的其他节点也会把其地址块发布给本设备,当本设备要向对端设备发送单播报文时,要根据对端设备的地址块和桥域20对应的vni值构造一个地址,作为外层ipv6目的地址。参见图3,本申请实施中可以对节点a进行上面的配置。节点a收到数据报文,例如从10ge1/0/2.1接口收到数据报文,根据配置信息可确定10ge1/0/2.1接口是租户vni5020的接口。节点a又根据配置信息“vni5020bumbiersub-domain6vni-embeddedblk1”将数据报文按照biersub-domain6封装为:ipv6头<内含源地址sa和目的地址da>,ipv6扩展头<内含bier头>,用户数据报文。具体的,作为示例,节点a使用配置的blk1地址块的前104bit+vni的24bit构成源ipv6地址,从而实现将vni的值内嵌在128位源ipv6地址的部分位中。例如,将24bit的vni内嵌在128位源地址的最后24位中(第105至128位)。节点a还使用bier头中的proto字段指示vni内嵌在ipv6头的源ipv6地址字段中。需要说明的是,bier头的bitstring及其他字段的封装,由节点a根据使用bgp获得的租户的peer-list列表,以及每一个peer对应的bier信息如bfr-id,确定数据报文要封装的bitstring。具体的有关节点a建立bier转发表、bierv6封装以及进行bier报文转发的过程请参考图3中的描述,此处暂不赘述。以图3中的节点e接收到节点a发送的bier报文为例。节点e收到该bier报文后,根据bitstring为0100确定该bier报文要往邻居节点e发送。由于节点e根据转发表中的标识*确定邻居节点e为自己,因此,节点e作为bier域出口的bfer,可以从bier报文中解封装出原始数据报文,并对内层的原始数据报文进行转发。本申请实施例中,节点e在从bier报文中解封装出原始数据报文之前,可以根据bier头的proto字段的取值确定外层ipv6头的源ipv6地址字段中包含有vni。节点e读取外层ipv6头的源ipv6地址字段,从128位源地址的最后24位中(第105至128位)中获取vni值。之后,节点e解封装bierv6报文(即剥去外层ipv6头和含有bier头的ipv6扩展头),获得用户数据报文,根据上面获得的vni值,将用户数据报文在vni所对应的bridge-domain上发送。上文结合图1至图5,详细描述了本申请实施例提供的报文发送的方法,下面将结合图6至图9,详细描述本申请的装置的实施例。应理解,方法实施例的描述与装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。图6是本申请实施例提供的一种第一网络设备600的示意性结构图。图6所示的该第一网络设备600可以执行上述实施例的方法中第一网络设备执行的相应步骤。如图6所示,所述第一网络设备600包括:接收模块610、封装模块620和发送模块630,接收模块610用于接收数据报文;封装模块620用于对该数据报文进行封装,得到第一报文,该第一报文中包括互联网协议第六版ipv6头、基于位索引的显式复制bier头以及该数据报文,该ipv6头的源ipv6地址字段的一部分位中包含第一租户的标识信息;发送模块630用于将所述第一报文发送给所述第二网络设备,所述第一租户的标识信息用于所述第二网络设备确定将所述数据报文发送至与所述第一租户对应的所述第二网络设备的接口。可选的,所述第一报文的bier头中包括第二标识,所述第二标识用于指示所述第一报文中包含所述第一租户的标识信息。可选的,用于标识所述第二标识的字段为proto字段或位索引转发表标识biftid字段。可选的,还包括确定模块640用于确定所述第一租户的标识信息。可选的,所述确定模块640具体用于确定接收所述数据报文的接口为第一租户的接口;根据所述数据报文的接口为第一租户的接口确定所述第一租户的标识信息。可选的,所述第一租户的标识信息为虚拟网络标识vni或多协议标签交换mpls标签值。可选的,所述数据报文为单播报文,或组播报文,或广播报文。可选的,所述源ipv6地址字段中的24位用于标识所述第一租户的标识信息。图7是本申请实施例提供的一种第二网络设备700的示意性结构图。图7所示的该第二网络设备700可以执行上述实施例的方法中第二网络设备执行的相应步骤。如图7所示,所述第二网络设备700包括:接收模块710、解封装模块720和发送模块730,接收模块710,用于接收第一网络设备发送的第一报文,其中,该第一报文中包括互联网协议第六版ipv6头、基于位索引的显式复制bier头以及该数据报文,该ipv6头的源ipv6地址字段的一部分位中包含第一租户的标识信息;解封装模块720用于对所述第一报文进行解封装,得到所述数据报文;发送模块730用于根据所述第一租户的标识信息将所述数据报文发送至所述第一租户对应的接口。可选的,还包括确定模块740用于根据所述bier头中包括的第二标识确定所述第一报文中包含有所述第一租户的标识信息。可选的,用于标识所述第二标识的字段为proto字段或位索引转发表标识biftid字段。可选的,所述第一租户的标识信息为虚拟网络标识vni或多协议标签交换mpls标签值。可选的,所述数据报文为单播报文,或组播报文,或广播报文。可选的,所述源ipv6地址字段中的24位用于标识所述第一租户的标识信息。也就是说,源ipv6地址字段的一部分位中包含所述第一租户的标识信息,所述源ipv6地址字段的一部分位为所述源ipv6地址字段中的24位。图8是本申请实施例的第一网络设备2000的硬件结构示意图。图8所示第一网络设备2000可以执行上述实施例的方法中第一网络设备执行的相应步骤。如图8所示,所述第一网络设备2000包括处理器2001、存储器2002、接口2003和总线2004。其中接口2003可以通过无线或有线的方式实现,具体来讲可以是网卡。上述处理器2001、存储器2002和接口2003通过总线2004连接。所述接口2003具体可以包括发送器和接收器,用于第一网络设备实现上述收发。例如,所述接口2003用于接收数据报文。所述处理器2001用于执行上述实施例中由第一网络设备进行的处理。例如,对所述数据报文进行封装,得到第一报文;和/或用于本文所描述的技术的其他过程。存储器2002包括操作系统20021和应用程序20022,用于存储程序、代码或指令,当处理器或硬件设备执行这些程序、代码或指令时可以完成方法实施例中涉及第一网络设备的处理过程。可选的,所述存储器2002可以包括只读存储器(read-onlymemory,rom)和随机存取存储器(randomaccessmemory,ram)。其中,所述rom包括基本输入/输出系统(basicinput/outputsystem,bios)或嵌入式系统;所述ram包括应用程序和操作系统。当需要运行第一网络设备2000时,通过固化在rom中的bios或者嵌入式系统中的bootloader引导系统进行启动,引导第一网络设备2000进入正常运行状态。在第一网络设备2000进入正常运行状态后,运行在ram中的应用程序和操作系统,从而,完成方法实施例中涉及第一网络设备2000的处理过程。可以理解的是,图8仅仅示出了第一网络设备2000的简化设计。在实际应用中,第一网络设备可以包含任意数量的接口,处理器或者存储器。图9为本申请实施例的另一种第一网络设备2100的硬件结构示意图。图9所示的第一网络设备2100可以执行上述实施例的方法中第一网络设备执行的相应步骤。如图9所述,第一网络设备2100包括:主控板2110、接口板2130、交换网板2120和接口板2140。主控板2110、接口板2130和2140,以及交换网板2120之间通过系统总线与系统背板相连实现互通。其中,主控板2110用于完成系统管理、设备维护、协议处理等功能。交换网板2120用于完成各接口板(接口板也称为线卡或业务板)之间的数据交换。接口板2130和2140用于提供各种业务接口(例如,pos接口、ge接口、atm接口等),并实现数据包的转发。接口板2130可以包括中央处理器2131、转发表项存储器2134、物理接口卡2133和网络处理器2132。其中,中央处理器2131用于对接口板进行控制管理并与主控板上的中央处理器进行通信。转发表项存储器2134用于保存表项,例如,上文中的bift。物理接口卡2133用于完成流量的接收和发送。应理解,本申请实施例中接口板2140上的操作与所述接口板2130的操作一致,为了简洁,不再赘述。应理解,本实施例的第一网络设备2100可对应于上述方法实施例所具有的功能和/或所实施的各种步骤,在此不再赘述。此外,需要说明的是,主控板可能有一块或多块,有多块的时候可以包括主用主控板和备用主控板。接口板可能有一块或多块,第一网络设备的数据处理能力越强,提供的接口板越多。接口板上的物理接口卡也可以有一块或多块。交换网板可能没有,也可能有一块或多块,有多块的时候可以共同实现负荷分担冗余备份。在集中式转发架构下,第一网络设备可以不需要交换网板,接口板承担整个系统的业务数据的处理功能。在分布式转发架构下,第一网络设备可以有至少一块交换网板,通过交换网板实现多块接口板之间的数据交换,提供大容量的数据交换和处理能力。所以,分布式架构的第一网络设备的数据接入和处理能力要大于集中式架构的设备。具体采用哪种架构,取决于具体的组网部署场景,此处不做任何限定。图10是本申请实施例的第二网络设备2200的硬件结构示意图。图10所示第二网络设备2200可以执行上述实施例的方法中第二网络设备执行的相应步骤。如图10所示,所述第二网络设备2200包括处理器2201、存储器2202、接口2203和总线2204。其中接口2203可以通过无线或有线的方式实现,具体来讲可以是网卡。上述处理器2201、存储器2202和接口2203通过总线2204连接。所述接口2203具体可以包括发送器和接收器,用于第二网络设备实现上述收发。例如,所述接口2203用于接收第一网络设备发送的第一报文。又例如,该接口2203用于支持根据所述第一租户的标识信息将所述数据报文发送至所述第一租户对应的接口,例如,可以是发送至所述第一租户的桥接域中。所述处理器2201用于执行上述实施例中由第二网络设备进行的处理。例如,用于从所述源ipv6地址字段中获取所述第一租户的标识信息;用于对所述第一报文进行解封装,得到所述数据报文;和/或用于本文所描述的技术的其他过程。存储器2202包括操作系统22021和应用程序22022,用于存储程序、代码或指令,当处理器或硬件设备执行这些程序、代码或指令时可以完成方法实施例中涉及第二网络设备的处理过程。可选的,所述存储器2202可以包括只读存储器(read-onlymemory,rom)和随机存取存储器(randomaccessmemory,ram)。其中,所述rom包括基本输入/输出系统(basicinput/outputsystem,bios)或嵌入式系统;所述ram包括应用程序和操作系统。当需要运行第二网络设备2200时,通过固化在rom中的bios或者嵌入式系统中的bootloader引导系统进行启动,引导第二网络设备2200进入正常运行状态。在第二网络设备2200进入正常运行状态后,运行在ram中的应用程序和操作系统,从而,完成方法实施例中涉及第二网络设备2200的处理过程。可以理解的是,图10仅仅示出了第二网络设备2200的简化设计。在实际应用中,第二网络设备可以包含任意数量的接口,处理器或者存储器。图11为本申请实施例的另一种第二网络设备2400的硬件结构示意图。图11所示的第二网络设备2400可以执行上述实施例的方法中第二网络设备执行的相应步骤。如图11所述,第二网络设备2400包括:主控板2410、接口板2430、交换网板2420和接口板2440。主控板2410、接口板2430和2440,以及交换网板2420之间通过系统总线与系统背板相连实现互通。其中,主控板2410用于完成系统管理、设备维护、协议处理等功能。交换网板2420用于完成各接口板(接口板也称为线卡或业务板)之间的数据交换。接口板2430和2440用于提供各种业务接口(例如,pos接口、ge接口、atm接口等),并实现数据包的转发。接口板2430可以包括中央处理器2431、转发表项存储器2434、物理接口卡2433和网络处理器2432。其中,中央处理器2431用于对接口板进行控制管理并与主控板上的中央处理器进行通信。转发表项存储器2434用于保存表项,例如,上文中的bift。物理接口卡2433用于完成流量的接收和发送。应理解,本申请实施例中接口板2440上的操作与所述接口板2430的操作一致,为了简洁,不再赘述。应理解,本实施例的第二网络设备2400可对应于上述方法实施例所具有的功能和/或所实施的各种步骤,在此不再赘述。此外,需要说明的是,主控板可能有一块或多块,有多块的时候可以包括主用主控板和备用主控板。接口板可能有一块或多块,第二网络设备的数据处理能力越强,提供的接口板越多。接口板上的物理接口卡也可以有一块或多块。交换网板可能没有,也可能有一块或多块,有多块的时候可以共同实现负荷分担冗余备份。在集中式转发架构下,第二网络设备可以不需要交换网板,接口板承担整个系统的业务数据的处理功能。在分布式转发架构下,第二网络设备可以有至少一块交换网板,通过交换网板实现多块接口板之间的数据交换,提供大容量的数据交换和处理能力。所以,分布式架构的第二网络设备的数据接入和处理能力要大于集中式架构的设备。具体采用哪种架构,取决于具体的组网部署场景,此处不做任何限定。本申请实施例还提供了一种计算机可读介质,该计算机可读介质存储有程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述各方面中的方法。这些计算机可读存储包括但不限于如下的一个或者多个:只读存储器(read-onlymemory,rom)、可编程rom(programmablerom,prom)、可擦除的prom(erasableprom,eprom)、flash存储器、电eprom(electricallyeprom,eeprom)以及硬盘驱动器(harddrive)。本申请实施例还提供了一种芯片系统,应用于第一网络设备中,该芯片系统包括:至少一个处理器、至少一个存储器和接口电路,所述接口电路负责所述芯片系统与外界的信息交互,所述至少一个存储器、所述接口电路和所述至少一个处理器通过线路互联,所述至少一个存储器中存储有指令;所述指令被所述至少一个处理器执行,以进行上述各个方面的所述的方法中所述第一网络设备的操作。在具体实现过程中,该芯片可以以中央处理器(centralprocessingunit,cpu)、微控制器(microcontrollerunit,mcu)、微处理器(microprocessingunit,mpu)、数字信号处理器(digitalsignalprocessing,dsp)、片上系统(systemonchip,soc)、专用集成电路(application-specificintegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)或可编辑逻辑器件(programmablelogicdevice,pld)的形式实现。本申请实施例还提供了另一种芯片系统,应用于第二网络设备中,该芯片系统包括:至少一个处理器、至少一个存储器和接口电路,所述接口电路负责所述芯片系统与外界的信息交互,所述至少一个存储器、所述接口电路和所述至少一个处理器通过线路互联,所述至少一个存储器中存储有指令;所述指令被所述至少一个处理器执行,以进行上述各个方面的所述的方法中所述第二网络设备的操作。在具体实现过程中,该芯片可以以中央处理器(centralprocessingunit,cpu)、微控制器(microcontrollerunit,mcu)、微处理器(microprocessingunit,mpu)、数字信号处理器(digitalsignalprocessing,dsp)、片上系统(systemonchip,soc)、专用集成电路(application-specificintegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)或可编辑逻辑器件(programmablelogicdevice,pld)的形式实现。本申请实施例还提供了一种计算机程序产品,应用于第一网络设备中,所述计算机程序产品包括一系列指令,当所述指令被运行时,以进行上述各个方面的所述的方法实施例中所述第一网络设备的操作。本申请实施例还提供了一种计算机程序产品,应用于第二网络设备中,所述计算机程序产品包括一系列指令,当所述指令被运行时,以进行上述各个方面的所述的方法实施例中所述第二网络设备的操作。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1