一种处理组播数据报文的方法及装置与流程

文档序号:18639359发布日期:2019-09-11 22:47阅读:218来源:国知局
一种处理组播数据报文的方法及装置与流程

本申请实施例涉及通信技术领域,尤其涉及一种处理组播数据报文的方法及装置。



背景技术:

组播技术是指通过使用特定的组播地址,按照最大投递原则,可以将组播数据报文传输到组播组(multicastgroup)对应的主机集合。其基本方法是:源主机只发送一份组播数据报文,其目的地址为组播组地址。组播组中的所有接收者均可以收到一份组播数据报文。组播技术实现了互联网协议(internetprotocol,ip)网络中点到多点(point-to-multipoint,p2mp)间的数据传输,能够有效的节约网络带宽和降低网络负载。

基于p2mp的bier技术属于bier技术的中的一种。应用基于p2mp的bier技术的组播网络中,组播树包括以特定的边缘节点为根、其它边缘节点为叶子的p2mp树。该特定的边缘节点是靠近组播源且能够与该组播源通信的边缘节点。该其他边缘节点为组播网络中除该特定的边缘节点之外的边缘节点。每个作为叶子的边缘节点可被分配比特位置(bitposition),该比特位置可用于唯一地标识组播树中作为叶子的边缘节点。该每个作为叶子的边缘节点将其比特位置通过建树协议(treebuildingprotocol),如协议无关组播(protocolindependentmulticast,pim)协议、标签分发协议(labeldistributionprotocol,ldp)多点扩展(multipointextensionsforldp,mldp)协议或针对流量工程扩展的资源预留协议(resourcereservationprotocol-trafficengineering,rsvp-te),发往该组播树的根节点。该组播树的每个节点可获知每个比特位置所对应的作为叶子的边缘节点。该根节点可在发送至作为叶子的边缘节点的组播数据报文中,封装一个比特串(bitstring)。该比特串中的比特位置表示该组播数据报文要到达的目的边缘节点。组播树上的节点收到包含有比特串的组播数据报文后,根据组播数据报文包括的比特串进行转发,使得组播数据报文发送至该比特串所标识的作为叶子的边缘节点。

当在组播网络中部署上述bier技术时,需要组播网络中的设备能够对bier头中的比特串进行识别和处理。目前,网络中的设备需要通过升级才能支持bier技术,这就会造成bier技术的部署成本较高和部署难度较大。



技术实现要素:

本申请的实施例提供一种处理组播数据报文的方法及装置,解决了现有技术中bier技术在组播网络中存在的部署成本较高和部署难度较大的问题。

为达到上述目的,本申请的实施例采用如下技术方案:

第一方面,提供一种处理组播数据报文的方法,应用于基于p2mp的bier的组播树中,所述组播树的中间节点支持利用p2mp转发bier报文,所述方法包括:所述中间节点接收第一组播数据报文,所述第一组播数据报文的bier头包括第一标签;所述中间节点根据所述第一标签获取第一转发表项,所述第一转发表项包括所述第一标签、第一标识和第二标识,所述第一标识用于标识所述组播树,所述第二标识用于指示对报文进行p2mp转发;所述中间节点根据所述第一标识获取第二转发表项,所述第二转发表项包括所述第一标识和第二标签;所述中间节点根据所述第二标识、所述第二转发表项和所述第一组播数据报文,获得第二组播数据报文并发送,所述第二组播数据报文包括所述第二标签。其中,中间节点支持利用p2mp转发bier报文可以理解为:所述中间节点不支持对bier头中除bier标签外的数据进行处理,所述中间节点采用p2mp来转发bier报文,这里比特串的处理包括比特串的读取、运算(and操作)和后续的转发动作。转发动作是根据and结果确定是否往下一跳进行转发操作。另外,所述中间节点还可以有组播叶子的角色,即所述中间节点可以向其下级节点发送组播数据报文,还可以向本地连接的设备发送组播ip报文。

上述技术方案中,当所述中间节点无法识别和处理bier头中的比特串,但支持利用p2mp转发bier报文时,所述中间节点在接收到bier报文时,可以仅读取bier标签,无需对bier头中除bier标签外的其他数据进行读取分析,并利用p2mp转发bier报文,从而可以在不对节点进行硬件升级的情况下部署bier技术,降低其部署成本和部署难度。

在第一方面的一种可能的实现方式中,所述第二转发表项还包括出接口,所述中间节点根据所述第二标识、所述第二转发表项和所述第一组播数据报文,获得第二组播数据报文并发送包括:所述中间节点根据所述第二标识,用所述第二标签替换所述第一组播数据报文包括的所述第一标签,获得所述第二组播数据报文;所述中间节点通过所述出接口发送所述第二组播数据报文。可选的,所述出接口是所述中间节点根据其下游节点的标识来进行确定,而不一定是根据接收其下游节点的信息的接口来确定。上述可能的实现方式中,所述中间节点在对第一组播数据报文进行转发处理时,可以仅用所述第二标签替换所述第一组播数据报文包括的所述第一标签,来获得所述第二组播数据报文,并通过所述出接口发送,从而简化了bier报文的处理方式,使得所述中间节点可以利用p2mp转发bier报文,进而降低bier技术的部署成本和难度。

在第一方面的一种可能的实现方式中,所述中间节点根据所述第一标签获取第一转发表项之前,所述方法还包括:所述中间节点根据第一配置信息、所述第一标签和所述第一标识,生成所述第一转发表,所述第一配置信息用于表示所述中间节点利用p2mp转发bier报文,所述第二标识是根据所述第一配置信息获得的标识。可选的,所述中间节点可以根据所述第一配置信息生成所述第二标识,或者根据所述第一配置信息查找对应关系表来获得所述第二标识。上述可能的实现方式中,所述中间节点可以相应的配置获得所述第二标识,并生成所述第一转发表项,进而在转发bier报文时可以利用p2mp转发bier报文。

在第一方面的一种可能的实现方式中,所述第二转发表项还包括第三标识和出接口,所述第三标识用于指示删除bier头中除bier标签之外的数据,所述中间节点根据所述第二标识、所述第二转发表项和所述第一组播数据报文,获得第二组播数据报文并发送包括:所述中间节点根据所述第二标识,用所述第二标签替换所述第一组播数据报文包括的所述第一标签,获得标签替换后的第一组播数据报文;所述中间节点根据所述第三标识,删除所述标签替换后的第一组播数据报文的bier头中除所述第二标签之外的数据,获得所述第二组播数据报文;所述中间节点通过所述出接口发送所述第二组播数据报文。可选的,所述出接口是所述中间节点根据其下游节点的标识来进行确定,而不一定是根据接收其下游节点的信息的接口来确定。上述可能的实现方式中,在所述中间节点的下游节点不支持删除bier头中的bier标签时,所述中间节点还可以删除bier头中除bier标签外的数据,并转发所述bier报文,进一步可以降低bier技术的部署成本和难度。

在第一方面的一种可能的实现方式中,所述中间节点根据所述第一标识获取第二转发表项之前,所述方法还包括:所述中间节点接收所述组播树的下游节点发送的所述第二标签和第二配置信息,所述第二配置信息用于表示所述下游节点不支持删除bier头中除bier标签之外的数据;所述中间节点根据所述第二标签和所述第二配置信息,生成所述第二转发表项,所述第三标识是根据所述第二配置信息获得的标识。所述组播树的下游节点可以是所述中间节点与特定的叶子节点组成的报文传输路径中所述中间节点的下一跳节点。上述可能的实现方式中,所述中间节点可以根据相应的配置获取所述第二标识,并生成所述第二转发表项,进而在转发bier报文时可以删除bier头中除bier标签之外的数据。

第二方面,提供一种处理组播数据报文的方法,应用于基于p2mp的bier的组播树中,所述组播树的中间节点支持删除bier头中除bier标签之外的数据,所述方法包括:所述中间节点接收第一组播数据报文,所述第一组播数据报文的bier头包括第一标签;所述中间节点根据所述第一标签获取第一转发表项,所述第一转发表项包括所述第一标签和第一标识,所述第一标识用于标识所述组播树;所述中间节点根据所述第一标识获取第二转发表项,所述第二转发表项包括所述第一标识、第二标识和第二标签,所述第二标识用于指示删除bier头中除bier标签外的数据;所述中间节点根据所述第二转发表项和所述第一组播数据报文,获得第二组播数据报文并发送,所述第二组播数据报文包括所述第二标签。

上述技术方案中,中间节点的下游节点不支持删除bier头中除bier标签外的数据时,该中间节点可以在转发组播数据报文时,删除组播数据报文的bier头中除bier标签外的数据,使其下游节点可以实现对接收到的组播数据报文的处理或转发,从而可以在不对节点进行硬件升级的情况下实现bier报文的转发,进而降低bier技术的部署成本和难度。

在第二方面的一种可能的实现方式中,所述第二转发表项还包括出接口,所述中间节点根据所述第二转发表项和所述第一组播数据报文,获得第二组播数据报文并发送包括:所述中间节点根据所述第二标识,删除所述第一组播数据报文的bier头中除所述第一标签之外的数据,获得删除数据后的第一组播数据报文;所述中间节点用所述第二标签替换所述删除数据后的第一组播数据报文包括的所述第一标签,获得所述第二组播数据报文;所述中间节点通过所述出接口发送所述第二组播数据报文。可选的,所述出接口是所述中间节点根据其下游节点的标识来进行确定,而不一定是根据接收其下游节点的信息的接口来确定。上述可能的实现方式中,所述中间节点在对第一组播数据报文进行转发处理时,可以仅用所述第二标签替换所述第一组播数据报文包括的所述第一标签,来获得所述第二组播数据报文,并通过所述出接口发送,从而简化了bier报文的处理方式,使得所述中间节点可以利用转发仅携带bier标签的报文,进而降低bier技术的部署成本和难度。

在第二方面的一种可能的实现方式中,所述中间节点根据所述第一标识获取第二转发表项之前,所述方法还包括:所述中间节点接收所述组播树的下游节点发送的所述第二标签和配置信息,所述配置信息用于表示所述下游节点不支持删除bier头中除bier标签之外的数据;所述中间节点根据所述第二标签和所述配置信息,生成所述第二转发表项,所述第二标识是根据所述配置信息获得的标识。所述组播树的下游节点可以是所述中间节点与特定的叶子节点组成的报文传输路径中所述中间节点的下一跳节点。上述可能的实现方式中,所述中间节点可以根据相应的配置获取所述第二标识,并生成所述第二转发表项,进而在转发bier报文时可以删除bier头中除bier标签之外的数据。

第三方面,提供一种处理组播数据报文的方法,应用于基于p2mp的bier的组播树中,所述组播树包括叶子节点,所述叶子节点不支持bier头中比特串的处理,所述方法包括:接收第二组播数据报文,所述第二组播数据报文的bier头中仅包括第二bier标签;根据所述组播树标识获取第三转发表项,所述第三转发表项包括第四标识,所述第四标识用于指示删除所述bier标签;根据所述第四标识,删除所述第二组播数据报文中的所述第二bier标签,得到组播ip报文;向本地出接口发送所述组播ip报文。

在第三方面的一种可能的实现方式中,所述方法还包括:根据预先配置的删除标签指示信息和第一标识,生成所述第三转发表项,所述第四标识是根据所述配置信息获取的标识,所述删除标签指示信息用于指示该叶子节点向本地转发组播数据报文时删除bier标签。

第四方面,提供了一种转发设备,所述转发设备为应用于基于p2mp的bier的组播树中的中间节点,所述转发设备支持利用p2mp转发bier报文,所述转发设备可以实现第一方面至第一方面的任一种可能的实现方式所提供的处理组播数据报文的方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个上述功能相应的单元。示例性的,所述转发设备可以包括接收单元、获取单元和发送单元。所述转发设备还可以包括生成单元。

在第四方面的一种可能的实现方式中,所述转发设备的结构中包括处理器、存储器、通信接口和总线,所述处理器、所述存储器和所述通信接口通过所述总线连接。所述存储器用于存储程序代码,当该程序代码被所述处理器执行时,使得所述转发设备执行第一方面至第一方面的任一种可能的实现方式所提供的处理组播数据报文的方法中的步骤。

第五方面,提供了一种转发设备,所述转发设备为应用于基于p2mp的bier的组播树中的中间节点,所述中转发设备支持删除bier头中除bier标签之外的数据,所述转发设备可以实现第二方面至第二方面的任一种可能的实现方式所提供的处理组播数据报文的方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个上述功能相应的单元。示例性的,所述转发设备可以包括接收单元、获取单元和发送单元。所述转发设备还可以包括生成单元。

在第五方面的一种可能的实现方式中,所述转发设备的结构中包括处理器、存储器、通信接口和总线,所述处理器、所述存储器和所述通信接口通过所述总线连接。所述存储器用于存储程序代码,当该程序代码被所述处理器执行时,使得所述转发设备执行第二方面至第二方面的任一种可能的实现方式所提供的处理组播数据报文的方法中的步骤。

第六方面,提供了一种转发设备,所述转发设备为应用于基于p2mp的bier的组播树中的叶子节点,所述转发设备不支持bier头中比特串的处理,所述转发设备可以实现第三方面至第三方面的任一种可能的实现方式所提供的处理组播数据报文的方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个上述功能相应的单元。示例性的,所述转发设备可以包括接收单元、处理单元和发送单元。

在第六方面的一种可能的实现方式中,所述转发设备的结构中包括处理器、存储器、通信接口和总线,所述处理器、所述存储器和所述通信接口通过所述总线连接。所述存储器用于存储程序代码,当该程序代码被所述处理器执行时,使得所述转发设备执行第三方面至第三方面的任一种可能的实现方式所提供的处理组播数据报文的方法中的步骤。

本申请的又一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得该计算机执行上述第一方面或第一方面的任一种可能的实现方式所提供的处理组播数据报文的方法。

本申请的又一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得该计算机执行上述第二方面或第二方面的任一种可能的实现方式所提供的处理组播数据报文的方法。

本申请的又一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得该计算机执行上述第一方面或第一方面的任一种可能的实现方式所提供的处理组播数据报文的方法。

本申请的又一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得该计算机执行上述第二方面或第二方面的任一种可能的实现方式所提供的处理组播数据报文的方法。

可以理解地,上述提供的任一种处理组播数据报文的方法的装置、计算机存储介质或者计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。

附图说明

图1为本申请实施例提供的一种组播树的结构示意图;

图2为本申请实施例提供的一种bier头的结构示意图;

图3为本申请实施例提供的第一种处理组播数据报文的方法的流程示意图;

图4为本申请实施例提供的第二种处理组播数据报文的方法的流程示意图;

图5为本申请实施例提供的第三种处理组播数据报文的方法的流程示意图;

图6为本申请实施例提供的第四种处理组播数据报文的方法的流程示意图;

图7为本申请实施例提供的第一种bier报文的转发示意图;

图8为本申请实施例提供的第二种bier报文的转发示意图;

图9为本申请实施例提供的第三种bier报文的转发示意图;

图10为本申请实施例提供的第四种bier报文的转发示意图;

图11为本申请实施例提供的第五种bier报文的转发示意图;

图12为本申请实施例提供的第一种作为中间节点的转发设备的结构示意图;

图13为本申请实施例提供的第二种作为中间节点的转发设备的结构示意图;

图14为本申请实施例提供的第三种作为中间节点的转发设备的结构示意图;

图15为本申请实施例提供的第四种作为中间节点的转发设备的结构示意图。

具体实施方式

图1为本申请实施例提供的一种组播树的结构示意图。组播树可以包括根节点、中间节点和叶子节点。中间节点可以是指边缘节点之外的节点,比如图1中的节点b和节点c。边缘节点可以包括根节点和叶子节点。节点a为根节点。节点d、节点e和节点f为叶子节点。当作为叶子节点的节点e还作为中间节点时,节点e和节点c之间的传输路径可替换图1中节点b和节点c之间的传输路径,以生成另一组播树。作为叶子节点的节点e还作为中间节点的情况下,节点e被称为混合(bud)节点。图1中所示的组播树的结构仅为示例性的,并不对本申请构成限定。

组播数据报文的转发流程包括:组播树的根节点接收组播源发送的组播数据报文,所述根节点向所述组播树的叶子节点发送所述组播数据报文。根节点将组播数据报文转发给下游节点。其中,某个节点的下游节点是指组播树中沿根节点到叶子节点的方向上所述某个节点在传输路径上的下一跳节点。如果所述根节点的下游节点为中间节点,则中间节点通过其下游节点向所述组播树的叶子节点发送所述组播数据报文。叶子节点接收到所述组播数据报文后,将其通过本地端口发送至所述本地端口连接的主机。如果所述组播树中存在bud节点,则所述bud节点在向其下游节点发送所述组播数据报文之外,还会将复制后的组播数据报文通过本地端口进行发送。如图1所示的组播树,节点a向其下游的节点b发送来自组播源的组播数据报文。节点b对所述组播数据报文进行复制,并分别向其下游的节点e和节点c发送所述组播数据报文。节点c对所述组播数据报文进行复制,并分别向其下游的节点f和节点d发送所述组播数据报文。节点f和节点d可分别将所述组播数据报文通过各自的本地端口进行发送。当节点e为bud节点时,节点e可对所述组播数据报文进行复制,通过其本地端口和能够与下游的c节点通信的端口分别发送一份组播数据报文。

在图1所示的组播树中,以能够标识4个边缘节点的比特串为例,对比特串、比特位置以及边缘节点的关系进行说明。节点d对应的比特位置为1,节点e对应的比特位置为2,节点f对应的比特位置为3,节点a对应的比特位置为4。当节点d为接收组播数据报文的边缘节点时,与所述组播数据报文对应的比特串可表示为0001。当节点e为接收组播数据报文的边缘节点时,与所述组播数据报文对应的比特串可表示为0010。当节点f为接收组播数据报文的边缘节点时,与所述组播数据报文对应的比特串可表示为0100。当节点f和节点d为接收组播数据报文的数据节点时,与所述组播数据报文对应的比特串可表示为0101。在建立组播树中的过程中,节点d、e和f通过建树协议将各自的比特位置通告给各自的上游节点。某一节点的上游节点为所述组播树的根节点到叶子节点的方向上所述某一节点在传输路径上的上一跳节点。节点a接收到节点d、e和f的通告后,获取所述节点d、e和f的比特位置并保存。节点a收到来自组播源的组播数据报文后,根据组播源的信息和组播组的信息,确定所述组播数据报文需要发送给节点e和f。节点a根据节点e和节点f的比特位置获得bitstring为0110。节点a根据所述bitstring和所述组播数据报文,获得bier报文。所述bier报文包括bier头和所述组播数据报文。所述bier头包括的bitstring为0110。节点a向节点b发送所述bier报文。

如图2所示,bier头包括一个32bit的bier标签(bier-label)、64bit的其它字段和bitstring。所述bier-label包括标签值和标签的其他信息。所述bier-label可用来确定bitstring的长度。其种,所述标签值可占用所述bier-label的前20bit。所述标签的其他信息可占用所述bier-label的后12bit。bitstring的长度可以是64bit、128bit或256bit。bitstring的长度也可设置为其他数值,在此不再对bitsring的长度进行逐一举例说明。所述其他字段可参见rfc8296中的相应内容。

采用基于p2mp的bier技术转发组播数据报文之前,组播树包括的各节点通过控制平面建立转发表项。在建立转发表项之后,所述组播树包括的各节点在转发平面根据转发表项发送组播数据报文。下面分别通过不同的实施例来阐述建立转发表项的过程和转发组播数据报文的过程。

本申请实施例提供的一种建立转发表项的方法中,组播树中各节点的转发表项可以是由叶子节点向根节点的方向逐跳建立的。下面对各节点的转发表项和建立转发表项的过程进行详细说明。

(1)根节点、中间节点和叶子节点的转发表项的相关描述

a、根节点的转发表项

根节点支持p2mp的bier报文转发,且根节点能够识别和处理bier头中的比特串。根节点的转发表项包括以下两种:第一转发表项和第二转发表项。所述第一转发表项可以表示为转发等价类(forwardingequivalenceclass,fec)到下一跳标签转发入口(nexthoplabelforwardingentry,nhlfe)映射(fectonhlfe,ftn)。所述第二转发表项可表示为bier_nhlfe。其中,所述ftn包括组播源(s)、组播组(g)、组播树的标识(treeid)和比特串,比如所述ftn表示为(s,g,treeid,bitstring)。所述ftn包括的treeid是建立组播树的过程中所述根节点根据来自其下游节点的p2mpid获得的标识。所述ftn包括的treeid用于在所述根节点本地唯一地标识组播树。所述根节点可根据接收到的组播数据报文中的(s,g)查找所述ftn,获得treeid和bitstring。接收所述组播数据报文的叶子节点是由ftn中的bitstring的比特位置来确定的。本申请实施例以p2mpid作为建树协议所采用的标识的一种具体实例,对组播树的各节点获得转发表项的方法进行说明。p2mpid可根据所采用的建树协议而进行相应的替换,比如:建树协议为rsvp-te,则建树协议所采用的标识为p2mp会话(session)。建树协议为mldp,则建树协议所采用的标识为p2mpfec。建树协议为pim,则建树协议所采用的标识为建立组播树所使用的组播源组信息。组播源组信息可表示为(s,g)。本申请实施例以p2mpid来自于下游节点为例进行说明。p2mpid还可通过上游节点获取,在本申请实施例中对于从上游节点获取p2mpid的方法不再进行赘述。

所述bier_nhlfe包括treeid、出接口(outinterface)、出标签(outlabel)和转发比特掩码(forwardingbitmask,f-bm)。比如所述bier_nhlfe表示为(treeid,outinterface,outlabel,f-bm)。所述根节点可根据所述ftn中的treeid,获得包括所述treeid的bier_nhlfe。所述根节点可根据获得的bier_nhlfe,获得outinterface、outlabel和f-bm。f-bm是所述根节点根据需接收(s,g)对应的组播数据报文的叶子节点通告的比特位置获取的参数。根节点在向bitstring对应的叶子节点发送bier报文时,根节点可将bier头包括的bitstring和bier_nhlfe中的f-bm进行逻辑与(and)操作。如果and操作的结果为非0,则通过bier_nhlfe中outinterface对应的出接口发送bier报文。经outinterface对应的出接口发送的bier报文中的bier标签被封装为outlabel。如果and操作的结果为0,则不往bier_nhlfe中的outinterface对应的出接口发送bier报文。

b、中间节点的转发表项

(i)中间节点支持bier技术,中间节点的下游节点中至少存在一个节点不支持删除bier头中除bier标签之外的数据。为了和上述第一转发表项和上述第二转发表项的名称进行区分,中间节点的转发表项包括以下两种:第三转发表项和第四转发表项。第三转发表项可表示为bier入标签映射(bierincominglabelmap,bier_ilm)。第四转发表项可表示为bier_nhlfe。第四转发表项的包含的参数类型与根节点中的bier_nhlfe包含的参数类型相同,在此不再赘述。第三转发表项和所述第四转发表项还可采用其他名称,在此不进行具体限定。

所述bier_ilm包括入标签(inlabel)、treeid、比特串长度(bitstringlen)和第一标志位。所述第一标志位可表示为flag=checkbitstring。所述bier_ilm可表示为(inlabel,treeid,bitstringlen,flag=checkbitstring)。inlabel为所述中间节点向根节点发送的所述中间节点的标签(label)。bier_ilm中的treeid是建立组播树的过程中所述中间节点根据来自其下游节点的p2mpid获得的标识。bier_ilm中的treeid用于在所述中间节点本地唯一地标识组播树。所述中间节点将接收到的bier报文中的bier标签作为inlabel,获得所述bier_ilm。所述中间节点可从所述bier_ilm获得treeid,bitstringlen和flag=checkbitstring。bitstringlen用于标识bier头中的bitstring的长度。携带bier头的报文中bitstring长度和所述第四转发表项中f-bm的长度均为bitstringlen。flag=checkbitstring表示对bier头中的bitstring进行识别和处理,比如将识别获得的bier头中的bitstring与所述第四转发表项中的f-bm进行and操作来确定是否继续向下游节点发送携带bier头的报文。bitstringlen是控制面生成表项的过程中来自下游节点的通告。本申请实施例以bitstringlen通过下游节点向上游节点发送的方式为例,对组播树的节点生成转发表项的方法进行说明。当建树协议为rsvp-te时,bitstringlen可来自于上游节点发送给下游节点的路径(path)消息,也可来自于下游节点发送给上游节点的预留消息(resvmessage)。本申请实施例对于获取bitstringlen的方式不进行限定。

所述bier_nhlfe包括treeid、outinterface、outlabel,f-bm和第二标志位。所述第二标志位可表示为flag=popbierexcluding。flag=popbierexcluding表示弹出bier头中除bier标签之外的数据。所述bier_nhlfe可表示为(treeid,outinterface,outlabel,f-bm,flag=popbierexcluding)。其中,outinterface,outlabel和f-bm的含义可参见所述第二转发表项中的相应内容。treeid的含义可参见所述第三转发表项中的treeid含义。所述中间节点可通过下游节点发送的配置信息,获知至少一个下游节点不支持删除bier头中除bier标签之外的数据。所述至少一个下游节点可支持读取bier标签。所述配置信息用于标识所述下游节点不支持删除bier头中除bier标签之外的数据。所述中间节点可根据所述配置信息,在生成与所述至少一个下游节点对应的bier_nhlfe时,增加flag=popbierexcluding。相应地,所述中间节点可根据所述bier_ilm获得treeid。所述中间节点可根据所述所述bier_ilm包括的treeid获得了包括flag=popbierexcluding的bier_nhlfe。当所述bier_nhlfe中的bitstring与f-bm的and操作为非0时,所述中间节点删除所述bier头中除bier标签之外的数据,并将所述bier头中的bier标签替换为outlabel。所述中间节点后续可参照所述根节点的方式发送所述标签替换后的携带p2mp标签但是不携带bier头的其他参数的报文。所述中间节点还可采用通常的方法,针对支持bier技术的下游节点配置其对应的bier_nhlfe,在此不再赘述。

(ii)中间节点支持bier技术,且有叶子节点的角色。中间节点的下游节点中至少存在一个节点不支持删除bier头中除bier标签之外的数据。其中,所述中间节点的转发表项除了包括(i)中的第三转发表项和第四转发表项这两种之外,还包括第五转发表项和第六转发表项。所述第五转发表项可表示为bier_nhlfe_leaf。所述第六转发表项可表示为组播转发信息库(multicastforwardinginformationbase,mfib)。所述bier_nhlfe_leaf包括:treeid和第三标志位。所述第三标志位可表示为flag=popbierincluding。flag=popbierincluding表示删除bier报文中的bier头。所述删除bier报文中的bier头为删除bier报文中以bier标签开始的12字节外加bitstringlen长度的数据。所述bier_nhlfe_leaf表示为(treeid,flag=popbierincluding)。所述中间节点用删除bier头的组播数据报文查找本地的mfib,并根据匹配的mfib向本地出接口发送。所述mfib可表示为(s,g,localmcastid)。localmcastid用于定位mfib_localleaf这一表项。所述具有叶子角色的中间节点还利用localmcastid查找mfib_localleaf获得所述具有叶子角色的中间节点的本地接口。mfib_localleaf可表示为(localmcastid,outinterface)。

(iii)中间节点支持利用p2mp转发,所述中间节点不支持对bier头中的bitstring进行识别和处理。其中,对bier头中的bitstring进行识别和处理包括对bier头中的bitstring进行读取并利用bitstring确定是否向下游节点转发携带bier头的报文。中间节点的转发表项包括以下两种:第七转发表项和第八转发表项。所述第七转发表项可表示为p2mp_ilm。所述第八转发表项可表示为p2mp_nhlfe。

其中,所述p2mp_ilm包括inlabel,treeid和第四标志位。inlabel和treeid可参见(i)和(ii)中的相应内容。所述第四标志位可表示为flag=p2mp。flag=p2mp用于表示采用p2mp进行转发。所述p2mp_ilm可表示为(inlabel,treeid,flag=p2mp)。所述第四标志位可以是所述中间节点生成转发表项的过程中根据其自身的性能设置的。所述中间节点的性能包括:支持p2mp转发和不支持对bier头中的bitstring进行识别处理。所述p2mp_nhlfe包括treeid,outinterface和outlabel。所述treeid,outinterface和outlabel的含义可参见(i)和(ii)中的相应内容。所述p2mp_nhlfe可表示为(treeid,outinterface,outlabel)。所述采用p2mp进行转发表示根据待转发报文中携带的标签和相应的转发表项实现转发。所述相应的转发表项可以是根据p2mp_ilm中的treeid确定的p2mp_nhlfe。

(iiii)中间节点支持利用p2mp转发,所述中间节点不支持对bier头中的bitstring进行识别和处理,中间节点的下游节点中至少存在一个节点不支持删除bier头中除bier标签之外的数据。所述中间节点的转发表项包括以下几种:(iii)中的第七转发表项和第九转发表项。所述第九转发表项可以是在(iii)中的第八转发表项中增加上述的第二标志位,即所述第九转发表项可表示为(treeid,outinterface,outlabel,flag=popbierexcluding)。所述第九转发表项中与所述第八转发表项中相同的内容可参见(iii)。所述第二标志位可参见(i)中的相应内容。

当(iiii)对应的中间节点还具有叶子节点的角色时,中间节点的转发表项除了包括所述第七转发表项和所述第九转发表项这两种之外,还可包括(ii)中的第五转发表项和第六转发表项这两种。

上述的任一标志位为所述中间节点根据其下游节点发送的通告中携带的相应配置信息进行设置的。任一标志位的表示方式并不局限于上述的表示方式。

c、叶子节点的转发表项

(i)叶子节点支持删除bier头,叶子节点的转发表项可以包括以下几种:表示成(inlabel,treeid,bitstringlen,lag=checkbitstring)的bier_ilm和表示成(treeid,flag=popbierincluding)的bier_nhlfe_leaf。或者叶子节点的转发表项可以为表示成(inlabel,treeid,bitstringlen,flag=popbierincluding)的bier_ilm。其中,inlabel为叶子节点的标签。bitstringlen和flag=checkbitstring的内容可参见中间节点中的相应内容。flag=popbierincluding表示删除bier报文中的bier头,具体的内容可参见中间节点中的相应内容。

(ii)叶子节点不支持删除bier头中除bier标签之外的数据,叶子节点的转发表项可以包括表示成(inlabel,treeid)的p2mp_ilm和表示成(treeid,flag=poplabel)p2mp_nhlfe_leaf。或者叶子节点的转发表项可以为表示成(inlabel,treeid,flag=poplabel)的p2mp_ilm。其中,flag=poplabel表示删除报文中的标签,所述标签可以是bier标签或p2mp标签。

(iii)叶子节点具有中间节点的角色,则具有中间节点角色的叶子节点的转发表项可参见b中的具有叶子角色的中间节点的转发表项。

需要说明的是,叶子节点的转发表项中的treeid可以是建立组播树的过程中所述叶子节点根据p2mpid获得的标识。treeid用于在所述叶子节点本地唯一地标识组播树。

(2)、根节点、中间节点和叶子节点建立转发表项的相关描述

组播树的叶子节点获知所述组播树对应的p2mp标识(identifier,id)。所述p2mpid包括:根节点的ip地址和所述叶子节点所在的组播树的标识。所述叶子节点所在的组播树的标识可以是通过序号表示的标识。所述组播树的叶子节点获知沿上游方向的下一跳节点。如图1所示,节点a为节点b沿上游方向的下一跳节点,节点b为节点e沿上游方向的下一跳节点,节点c为节点d沿上游方向的下一跳节点,节点b为节点c沿上游方向的下一跳节点。所述组播树的叶子节点可获知其对应的比特位置。节点d可通过发送内容为0001的比特掩码(bitmask)通告其比特位置是1。同理,节点e可通过发送内容为0010的bitmask通告其比特位置是2。节点f可通过发送内容为0100的bitmask通告其比特位置是3。组播树的叶子节点可将用于标识其自身的label发送至其上游节点。组播树的叶子节点还可将用于表示其是否支持删除bier头中除bier标签之外的数据的配置信息发送给其上游节点。这样,组播树的叶子节点可将bitmask、p2mpid和其自身的label发送给其上游方向的下一跳节点。中间节点可根据叶子节点发送的上述信息获得(1)中相应的转发表项。所述叶子节点可根据配置信息和其自身的label获得(1)中相应的转发表项。如图1所示,假设节点d的标签可以为label<byd>,节点d向节点c发送(p2mpid,label<byd>,bitmask=0001,配置信息)。节点f的标签可以为label<byf>,节点f向节点c发送(p2mpid,label<byf>,bitmask=0100,配置信息)。节点e的标签可以为label<bye>,节点e向节点b发送(p2mpid,label<bye>,bitmask=0010,配置信息)。所述中间节点可将label<bynode>作为outlabel。所述中间节点根据p2mpid中的组播树的标识获得treeid。所述中间节点可根据其自身能力将bitmask作为f-bm。所述中间节点可根据接收到的配置信息设置flag。

中间节点根据下游节点发送的bitmask获得相应的比特串,具体可以是将来自下游节点的bitmask进行或(or)操作来获得对应的比特串。所述中间节点可将所支持的能力、其自身的label和获得的bitstring发送至p2mpid包括的根节点的ip地址。具体发送所支持的能力、其自身的label和获得的bitstring的方法可包括:所述中间节点根据所述根节点的ip,获得上游方向的下一跳节点;所述中间节点向所述上游方向的下一跳节点发送其自身的label和获得的bitstring。所述中间节点所支持的能力可以通过配置信息的方式进行发送。所述中间节点所支持的能力可参见(1)中的相应描述。中间节点可根据自身的能力、获得的treeid和自身的标签获得上述(1)中与inlabel相关的转发表项。所述中间节点自身的标签为所述中间节点的转发表项中的inlabel。

比如,如图1所示,节点c的标签可以为label<byc>,节点c将来自节点d和f的两个bitmask进行“或”操作,获得“或”操作后的bitmask=0101。节点c根据根节点的ip,获得朝向根节点方向的下一跳为节点b。节点c向节点b发送信息(p2mpid,label<byc>,bitmask=0101,配置信息)。节点c发送的配置信息用于表示节点c和其连接的叶子节点的能力。节点c可以根据节点d和f发送的信息和label<byc>建立相应的转发表项。节点b的标签可以为label<byb>。节点b将来自节点e和c的两个bitmask进行“或”操作,获得“或”操作后的bitmask=0111。节点b根据根节点的ip,向节点a发送信息(p2mpid,label<byb>,bitmask=0111)。节点b可以根据节点e和c发送的信息和label<byb>建立相应的转发表项。

根节点建立转发表项的相关描述:根节点接收到下游节点发送的信息后,可以根据下游节点发送的信息可以建立如上述(1)中所描述的根节点的转发表项。比如,如图1所示,节点a根据来自节点b的信息、节点a自身的能力和节点a的label获得相应的转发表项。

下述图3、图4、图5或图6对应的实施例中组播树的根节点的转发表项、中间节点的转发表项以及叶子节点的转发表项的具体说明可参见上述(1)中的相应内容。下述图3、图4、图5或图6对应的实施例中组播树的任一节点生成转发表项的具体方式可参见上述(2)中的相应内容。

图3为本申请实施例提供的一种处理组播数据报文的方法的流程示意图。该方法应用于基于p2mp的bier的组播树中。该组播树的中间节点支持利用p2mp转发接收到的报文。下面结合图3对本申请实施例提供的方法进行说明。

步骤301:中间节点接收第一组播数据报文,第一组播数据报文的bier头包括第一标签。

如果中间节点不支持对bier头中除bier标签以外的数据进行处理,比如对bier头中除bier标签之外的参数进行识别处理,则中间节点采用p2mp转发接收到的报文。所述接收到的报文可以是携带有bier头的组播数据报文或不带有bier头中除bier标签之外参数的组播数据报文。所述bier头中除bier标签之外的参数可以是bitstring。所述识别处理可以包括bitstring的读取、运算(and操作)和后续的转发动作。所述转发动作可以是指根据and结果确定是否往下一跳进行转发操作。

其中,第一组播数据报文的bier头中的第一标签是该中间节点的标签。第一组播数据报文可以是由该中间节点的上游节点发送给该中间节点的。该上游节点可能是根节点,也可能是除该中间节点之外的其他中间节点。所述根节点支持对bier头中的bitstring进行识别和处理。当根节点需要向组播树中的叶子节点发送组播数据报文时,所述根节点可以根据组播数据报文中的(s,g)和ftn,获得作为所述第一标识的treeid和bitstring。所述根节点根据获得的treeid查找到bier_nhlfe(treeid,outinterface,outlabel,f-bm)。所述根节点将bitstring与f-bm进行and操作。当该逻辑and操作的结果为非0时,则根据bitstring和作为所述第一标签的outlabel获得第一组播数据报文中。所述根节点向outinterface所标识的出接口发送所述第一组播数据报文,以将第一组播数据报文发送给中间节点。

当该中间节点的上游节点也为中间节点时,作为上游节点的中间节点可以与所述根节点具有相同的能力,即可参照所述根节点采用的方法转发bier报文。作为上游节点的中间节点不支持对bier头中除bier标签以外的数据进行处理,则作为上游节点的中间节点可以按照本申请实施例所提供的下述方法处理接收到的第一组播数据报文。

步骤302:所述中间节点根据第一标签获取第一转发表项,第一转发表项包括所述第一标签、第一标识和第二标识,第一标识用于标识组播树,第二标识用于指示对报文进行p2mp转发。

中间节点可以根据第一标签获取第一转发表项。第一转发表项中的第一标识用于标识该组播树,第二标识用于指示对报文进行p2mp转发。比如,第一标识可以为上述实施例提及的中间节点的转发表项包括的treeid。第二标识可以为上述实施例提及的中间节点的转发表项包括的flag=p2mp。相应的,第一转发表项可以包括上述实施例提及的中间节点上表示成(inlabel,treeid,flag=p2mp)的p2mp_ilm。

步骤303:中间节点根据第一标识获取第二转发表项,第二转发表项包括第一标识和第二标签。

中间节点可以根据第一标识获取第二转发表项。第二转发表项包括的第二标签是中间节点的下游节点发送的其自身的标签。比如,第二转发表项可以包括表示成(treeid,outlabel)的p2mp_nhlfe。中间节点可以根据表示成(inlabel,treeid,flag=p2mp)的p2mp_ilm中的treeid获取第二转发表项。第二转发表项中的outlabel可以称为第二标签。可选地,所述第二表项中还可包括上述b中所提及的中间节点上的p2mp_nhlfe所包括的outinterface。

步骤304:中间节点根据第二标识、第二转发表项和第一组播数据报文,获得第二组播数据报文并发送,第二组播数据报文包括第二标签。

当中间节点获取到第二标识、第二转发表项和第一组播数据报文时,所述中间节点根据第二标识确定进行p2mp转发。所述中间节点在确定进行p2mp转发后,可无需对接收到的bier头除bier标签之外的参数进行识别处理。中间节点根据第二转发表项中的第二标签对第一组播数据报文进行处理,以获得第二组播数据报文。第二组播数据报文的bier头中的bier标签为第二标签。中间节点可以将第二组播数据报文发送给其下游节点。

当中间节点的下游节点支持删除bier头中除bier标签之外的数据或者不支持删除bier头中除bier标签之外的数据时,中间节点通过步骤304获取并发送第二数据组播报文的方法会有所不同,下面分别进行阐述。

在一种方式中,中间节点的下游节点支持删除bier头中除bier标签之外的数据,则第二转发表项还可以包括出接口。可选的,该出接口可以根据其下游节点的标识来确定,该出接口与该中间节点接收其下游节点发送的信息的接口可以相同,也可以不同。相应的,步骤304具体可以包括:中间节点根据第二标识,用第二转发表项中的第二标签替换第一组播数据报文中的第一标签,以获得第二组播数据报文;中间节点通过第二转发表项中的出接口将第二组播数据报文发送给其下游节点。比如,第二标识为flag=p2mp,第二转发表项包括表示成(treeid,outinterface,outlabel)的p2mp_nhlfe,则中间节点可以将第一组播数据报文的bier头中的bier标签替换为outlabel,得到第二组播数据报文,并通过outinterface向其下游节点发送第二组播数据报文。这种情况下,第一组播数据报文和第二组播数据报文可以均为携带bier头的报文。

在另一种方式中,当中间节点的下游节点不支持删除bier头中除bier标签之外的数据时,则第二转发表项还包括第三标识和出接口,第三标识用于指示删除bier头中除bier标签之外的数据。可选的,该出接口也可以根据其下游节点的标识来确定,该出接口与该中间节点接收其下游节点发送的信息的接口可以相同,也可以不同。相应的,步骤304具体可以包括:中间节点根据第二标识,用第二标签替换第一组播数据报文包括的第一标签,获得标签替换后的第一组播数据报文;中间节点根据第三标识,删除标签替换后的第一组播数据报文的bier头中除第二标签之外的数据,获得第二组播数据报文,即第二组播数据报文仅包括第二报文和组播ip报文;中间节点通过出接口发送第二组播数据报文。比如,第二标识为flag=p2mp,第三标识为flag=popbierexcluding,第二转发表项包括表示成(treeid,outinterface,outlabel,flag=popbierexcluding)的p2mp_nhlfe,则中间节点可以将第一组播数据报文的bier头中的bier标签替换为outlabel(第二标签),得到标签替换后的第一组播数据报文,并根据flag=popbierexcluding删除bier头中除第二标签之外的数据,得到第二组播数据报文,即第二组播数据报文包括第二报文和组播ip报文。中间节点通过outinterface向其下游节点发送第二组播数据报文。这种情况下,第一组播数据报文可以为携带bier头的报文,第二组播数据报文可以为携带p2mp标签但是不携带bier头的其他参数的报文。

当该中间节点的下游节点为叶子节点时,该叶子节点可以接收到第二组播数据报文。该叶子节点可以根据第一标识获取第三转发表项,第三转发表项包括第一标识和第四标识,第四标识用于指示删除第二标签,从而该叶子节点可以根据第三标识删除第二组播数据报文中的第二标签,获得组播ip报文。叶子节点读取组播ip报文中的ip头部的源ip和目的ip(即组播组ip),匹配本地的组播转发表项,根据本地组播转发表项确定本地出接口,并向本地出接口发送组播ip报文。比如,第三转发表项可以包括p2mp_nhlfe_leaf(treeid,flag=poplabel),treeid可以是第一标识,flag=poplabel可以为第四标识。组播转发表项可以包括mfib(s,g,localmcastid),(s,g)称为组播源组信息,localmcastid可以用于指示本地出接口。flag=poplabel用于表示弹出标签,所述标签可以是bier标签或p2mp标签。

相应的,在该叶子节点根据第一标识获取第三转发表项之前,该叶子节点还可以生成第三转发表项。具体的,该叶子节点可以根据指示信息和第一标识,生成第三转发表项,所述指示信息用于指示该叶子节点向本地转发报文时删除bier标签,第四标识是根据所述指示信息获取的标识。

当该中间节点还同时作为叶子节点时,该中间节点也可以按照上述叶子节点处理第二组播数据报文的方法,向该中间节点的本地出接口发送组播ip报文,具体参见上述叶子节点中的描述,本申请实施例对此不再赘述。

进一步的,中间节点在处理第一组播数据报文之前,中间节点还可以生成第一组播数据报文转发时所需的第一转发表项和第二转发表项。具体的,参见图4,在中间节点根据第一标签获取第一转发表项(即步骤302)之前,该方法还可以包括步骤300a。

步骤300a:中间节点根据第一配置信息、第一标签和第一标识,生成第一转发表,第一配置信息用于表示该中间节点利用p2mp转发bier报文,第二标识是根据第一配置信息获得的标识。其中,第二标识是根据第一配置信息获得的标识。所述第二标识的获取方式可以包括:根据第一配置信息生成第二标识,或者根据第一配置信息查找对应关系表来获得第二标识。当该中间节点利用p2mp转发bier报文时,可以为该中间节点配置第一配置信息,以使该中间节点根据第一配置信息获取第二标识,并根据第一标签、第一标识和第二标识,生成第一转发表项。比如,该中间节点可以根据第一配置信息获得的标识为flag=p2mp,并根据第一标签label<bynode1>(node1表示该中间节点)和作为第一标识的treeid,生成第一转发表项。所述第一转发表项可为表示成(inlabel,treeid,flag=p2mp)的p2mp_ilm。inlabel为该中间节点的标签。

相应的,参见图4,在中间节点根据第一标识获取第二转发表项(即步骤303)之前,该方法还可以包括步骤300b-步骤300c。图4中以步骤300a和步骤300b-步骤400c位于步骤301之前为例进行说明。

步骤300b:中间节点接收组播树的下游节点发送的第二标签和第二配置信息,第二配置信息用于表示该下游节点不支持删除bier头中除bier标签之外的数据。

当该中间节点的下游节点不支持删除bier头中除bier标签之外的数据时,该下游节点可以向该中间节点发送第二配置信息,以及将第二标签发送给该中间节点。

步骤300c:中间节点根据第一标识、第二标签和第二配置信息,生成第二转发表项,第三标识是根据第二配置信息获得的标识。

其中,第三标识是根据第二配置信息获得的标识。所述第三标识的获取方法可以包括:根据第二配置信息生成第三标识,或者根据第二配置信息查找对应关系表来获得第三标识。当该中间节点接收到第二配置信息时,该中间节点可以根据第二配置信息获取第三标识,并根据第一标识、第二标签和第三标识,生成第二转发表项。比如,该中间节点可以根据第二配置信息获得的标识为flag=popbierexcluding,并根据用作第一标识的treeid、用作第二标签的label<bynode2>(node2表示该中间节点的下游节点)、作为第三标识的flag=popbierexcluding,生成第二转发表项。第二转发表项可表示为p2mp_nhlfe(treeid,outinterface,outlabel,flag=popbierexcluding)。outlabel为label<bynode2>,即该中间节点的下游节点的标签。

在本申请实施例中,若中间节点无法识别和处理bier头的比特串,但支持利用p2mp转发bier报文,则当该中间节点接收到第一组播数据报文,并获取第一转发表项和第二转发表项时,该中间节点可以根据第一转发表项中用于指示对报文进行p2mp转发的第二标识和第二转发表项,处理第一组播数据报文,以获得第二组播数据报文,且在处理时无需对第一组播数据报文的bier头进行读取分析,从而可以在不对节点进行硬件升级的情况下实现bier报文的转发,节省了硬件升级的成本。此外,在中间节点的下游节点不支持删除bier头中除bier标签外的数据时,该中间节点还可以在转发组播数据报文时,删除组播数据报文的bier头中除bier标签外的数据,使其下游节点可以实现对接收到的组播数据报文的处理或转发,从而也可以在不对节点进行硬件升级的情况下实现bier报文的转发,进一步了节省了硬件升级的成本。

图5为本申请实施例提供的一种处理处理组播数据报文的方法的流程示意图,应用于基于p2mp的bier的组播树中,该组播树的中间节点支持删除bier头中除bier标签之外的数据,参见图5,该方法包括以下几个步骤。

步骤501:中间节点接收第一组播数据报文,第一组播数据报文的bier头包括第一标签。

具体可参见图4或图3对应的实施例中301的相应内容。

步骤502:中间节点根据第一标签获取第一转发表项,第一转发表项包括第一标签和第一标识,第一标识用于标识组播树。

中间节点可以根据第一标签获取第一转发表项。第一转发表项中的第一标识用于标识该组播树,比如,第一标识可以为上述实施例所提供的转发表项中的treeid,第一标签是该中间节点的标签,第一转发表项可以包括表示成(inlabel,treeid)的p2mp_ilm。inlabel可以是该中间节点的标签。

步骤503:中间节点根据第一标识获取第二转发表项,第二转发表项包括第一标识、第二标识和第二标签,第二标识用于指示删除bier头中除bier标签外的数据。

中间节点可以根据第一标识获取第二转发表项。第二转发表项包括的第二标签是由中间节点的下游节点分配并发给中间节点的标签。比如,第二转发表项可以包括表示成(treeid,outlabel,flag=popbierexcluding)的p2mp_nhlfe,中间节点可以根据第一标识treeid获取第二转发表项,第二转发表项中的outlabel可以为第二标签,flag=popbierexcluding可以为第二标识。

步骤504:中间节点根据第二转发表项和第一组播数据报文,获得第二组播数据报文并发送,第二组播数据报文包括第二标签。

当中间节点接收到第一组播数据报文,并获取到第二转发表项时,中间节点可以根据第二转发表项对第一组播数据报文进行处理,以获得包括第二标签的第二组播数据报文。中间节点可以将第二组播数据报文发送给其下游节点。

第二转发表项还可以包括出接口,该出接口可以根据其下游节点的标识来确定,该出接口与该中间节点接收其下游节点发送的信息的接口可以相同,也可以不同。具体的,中间节点可以根据第二转发表项中的第二标识,删除第一组播数据报文的bier头中除第一标签之外的数据,获得删除数据后的第一组播数据报文。所述中间节点用第二标签替换删除数据后的第一组播数据报文包括的第一标签,获得第二组播数据报文。所述中间节点通过第二转发表项中的出接口向其下游节点发送第二组播数据报文。在这种情况下,第一组播数据报文可以为携带bier头的报文,第二组播数据报文可以为携带p2mp标签但是不携带bier头的其他参数的报文。

当该中间节点的下游节点为叶子节点时,该叶子节点可以接收到第二组播数据报文。该叶子节点可以根据第一标识获取第三转发表项,第三转发表项包括第一标识和第四标识,第四标识用于指示删除第二标签,从而该叶子节点可以根据第三标识删除第二组播数据报文中的第二标签,获得组播ip报文。叶子节点读取组播ip报文中的ip头部的源ip和目的ip(即组播组ip),匹配本地的组播转发表项,根据本地组播转发表项确定本地出接口,并向本地出接口发送组播ip报文。比如,第三转发表项可以包括表示成(treeid,flag=poplabel)的p2mp_nhlfe_leaf,其中,p2mp_nhlfe_leaf包括的treeid可以是第一标识,flag=poplabel可以为第四标识。组播转发表项可以包括mfib(s,g,localmcastid),localmcastid可以用于指示本地出接口。flag=poplabel的含义可参见图3或图4对应的实施例中的相应内容。所述叶子节点获得第三转发表项以及第四标识的方法可参见图3对应的实施例中的相应内容。

进一步的,参见图6,在中间节点根据第一标识获取第二转发表项(即步骤503)之前,该方法还包括:步骤500a-步骤500b。图6中以步骤500位于步骤501之前为例进行说明。

步骤500a:中间节点接收组播树的下游节点发送的第二标签和配置信息,该配置信息用于表示该下游节点不支持删除bier头中除bier标签之外的数据。

当该中间节点的下游节点不支持删除bier头中除bier标签之外的数据时,该下游节点可以向该中间节点发送配置信息,以及将其分配的第二标签发送给该中间节点。

步骤500b:中间节点根据第二标签和该配置信息,生成第一转发表项,第二标识是根据该配置信息获得的标识。

其中,第二标识是根据该配置信息获得的标识。获取第二标识的方法可参见图4或图3对应的实施例。当该中间节点接收到该配置信息时,该中间节点可以根据该配置信息获取第二标识,并根据第一标识、第二标签和第二标识,生成第二转发表项。比如,该中间节点可以根据该配置信息获得的标识为flag=popbierexcluding,并根据作为第一标识的treeid、作为第二标签的label<bynode2>(node2表示该中间节点的下游节点)、作为第二标识的flag=popbierexcluding,生成第二转发表项。所述第二转发表项可为表示成(treeid,outinterface,outlabel,flag=popbierexcluding)的p2mp_nhlfe。其中,outlabel为label<bynode2>,即该中间节点的下游节点的标签。

在一种方式中,在中间节点根据第一标签获取第一转发表项之前,中间节点还可以根据第一标识和第一标识,生成第一转发表项。比如,中间节点根据作为第一标签的label<bynode1>(node1表示该中间节点)和作为第一标识的treeid,生成第一转发表项。所述第一转发表项是标识成(inlabel,treeid)的p2mp_ilm。其中,inlabel为label<bynode1>,即该中间节点的标签。

本申请实施例提供的组播树中可能同时包括支持bier技术的节点和不支持bier技术的节点,具体可根据节点的转发表项中的flag所对应的操作进行处理,在此不再赘述。所述不支持bier技术的节点指的是不支持删除bier头中除bier标签之外的数据的节点。

为便于理解,这里以图7~图11所示的五种场景为例进行举例说明。

图7中节点f不支持删除bier头中除bier标签之外的数据,其余节点支持删除bier头中除bier标签之外的数据,则节点c可根据来自f的信息生成相应的转发表项。节点c可根据其转发表项采用相应的方式处理接收到的bier报文。比如节点c向节点f转发组播数据报文时,可以删除组播数据报文的bier头中除bier标签之外的数据。节点f接收的组播数据报文的bier头中仅包含bier标签。此外,节点c可根据其自身的转发表项中是否包括flag=p2mp来确定是否进行p2mp转发。

图8中节点c和节点f不支持删除bier头中除bier标签之外的数据,其余节点支持删除bier头中除bier标签之外的数据,则节点b可采用图7中节点c的方法处理接收到的bier报文。节点c接收到组播数据报文的bier头中仅包括bier标签。节点c转发给节点f和节点d的组播数据报文的bier头中也仅包括bier标签。由于节点d支持bier技术,节点c发送的组播数据报文的bier头中仅包括bier标签,还可以配置节点d不删除bier头中除bier标签之外的数据。此外,节点b和节点c可根据其自身的转发表项中是否包括flag=p2mp来确定是否进行p2mp转发。

图9中节点b和节点f不支持删除bier头中除bier标签之外的数据,其余节点支持删除bier头中除bier标签之外的数据,则节点a可采用图7中节点c的方法处理接收到的bier报文。节点c、e和d可参照图8中节点d的方式来处理接收到的组播数据报文。此外,节点b和节点c可根据其自身的转发表项中是否包括flag=p2mp来确定是否进行p2mp转发。

图10中节点c、节点f和节点d不支持删除bier头中除bier标签之外的数据,其余节点支持删除bier头中除bier标签之外的数据,则节点b可采用图7中节点c的方法处理接收到的bier报文。节点c转发给节点f和节点d的组播数据报文的bier头中也仅包括bier标签。节点e可采用图8中节点d的方法来处理接收到的组播数据报文。节点b和节点c可根据其自身的转发表项中是否包括flag=p2mp来确定是否进行p2mp转发。

图11中节点b~节点f均不支持删除bier头中除bier标签之外的数据,节点a支持删除bier头中除bier标签之外的数据,则节点a采用图7中节点c的方法处理接收到的bier报文。按照p2mp方式转发和处理bier报文。

上述图7到图11的组播树中的节点b和节点c之间的路径被节点e和节点c之间的路径替换后,节点e成为bud节点。节点e的处理方式可参见上述中间节点和叶子节点的处理方式,在此不再赘述。

在本申请实施例中,当中间节点的下游节点不支持删除bier头中除bier标签外的数据时,该中间节点还可以在转发组播数据报文时,删除组播数据报文的bier头中除bier标签外的数据,使其下游节点可以实现对接收到的组播数据报文的处理或转发,从而也可以在不对节点进行硬件升级的情况下实现bier报文的转发,节省了硬件升级的成本。

上述主要从网元之间交互的角度对本申请实施例提供的方案进行了介绍。可以理解的是,各个网元,例如中间节点和叶子节点。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

本申请实施例可以根据上述方法示例对中间节点进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。下面以采用对应各个功能划分各个功能模块为例进行说明:

在采用集成的单元的情况下,图12示出了上述实施例中所涉及的作为中间节点的转发设备的一种可能的结构示意图。作为中间节点的转发设备支持利用p2mp转发bier报文,包括:接收单元1201、获取单元1202和发送单元1203。其中,接收单元1201用于支持该作为中间节点的转发设备执行图3中的步骤301、或者图4中的步骤300b和步骤301;获取单元1202用于支持该作为中间节点的转发设备执行图3或者图4中的步骤302和步骤303;获取单元1202和发送单元1203还用于支持该作为中间节点的转发设备执行图3或图4中的步骤304。进一步的,该作为中间节点的转发设备还可以包括生成单元1204,生成单元1204用于支持该作为中间节点的转发设备执行图4中的步骤300a和步骤300c。上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。

在采用硬件实现的基础上,本申请中的获取单元1202和生成单元1204可以为该作为中间节点的转发设备的处理器,接收单元1201可以为该作为中间节点的转发设备的接收器,发送单元1203可以为该作为中间节点的转发设备的发送器,发送器通常可以和接收器集成在一起用作收发器,具体的收发器还可以称为通信接口。

图13所示,为本申请的实施例提供的上述实施例中所涉及的中间节点的一种可能的逻辑结构示意图。该作为中间节点的转发设备支持利用p2mp转发bier报文,包括:处理器1302和通信接口1303。处理器1302用于对该作为中间节点的转发设备的动作进行控制管理,例如,处理器1302用于支持该作为中间节点的转发设备执行上述获取单元1202和生成单元1204的步骤,和/或用于本文所描述的技术的其他过程。此外,该作为中间节点的转发设备还可以包括存储器1301和总线1304,处理器1302、通信接口1303以及存储器1301通过总线1304相互连接;通信接口1303用于支持该作为中间节点的转发设备进行通信;存储器1301用于存储该作为中间节点的转发设备的程序代码和数据。

其中,处理器1302可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线1304可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

在采用集成的单元的情况下,图14示出了上述实施例中所涉及的作为中间节点的转发设备的一种可能的结构示意图。该作为中间节点的转发设备支持删除bier头中除bier标签之外的数据,包括:接收单元1401、获取单元1402和发送单元1403。其中,接收单元1401用于支持该作为中间节点的转发设备接收图5中的步骤501、或者图6中的步骤500a和步骤501;获取单元1402用于支持作为中间节点的转发设备执行图5或图6中的步骤502和步骤503;获取单元1402和发送单元1403还用于支持该作为中间节点的转发设备执行图5或者图6中的步骤504。进一步的,该作为中间节点的转发设备还包括:生成单元1404,用于执行图6中的步骤500b。上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。

在采用硬件实现的基础上,本申请中的获取单元1402和生成单元1404可以为该作为中间节点的转发设备的处理器,接收单元1401可以为该作为中间节点的转发设备的接收器,发送单元1403可以为该作为中间节点的转发设备的发送器,发送器通常可以和接收器集成在一起用作收发器,具体的收发器还可以称为通信接口。

图15所示,为本申请的实施例提供的上述实施例中所涉及的作为中间节点的转发设备的一种可能的逻辑结构示意图。该作为中间节点的转发设备支持删除bier头中除bier标签之外的数据,包括:处理器1502和通信接口1503。处理器1502用于对该作为中间节点的转发设备的动作进行控制管理,例如,处理器1502用于执行获取单元1402和生成单元1404的的步骤,和/或用于本文所描述的技术的其他过程。此外,该作为中间节点的转发设备还可以包括存储器1501和总线1504,处理器1502、通信接口1503以及存储器1501通过总线1504相互连接;通信接口1503用于支持该作为中间节点的转发设备进行通信;存储器1501用于存储该作为中间节点的转发设备的程序代码和数据。

其中,处理器1502可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线1504可以是外设部件互连标准(pci)总线或扩展工业标准结构(eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图15中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

在本申请的另一实施例中,还提供一种可读存储介质,可读存储介质中存储有计算机执行指令,当一个设备(可以是单片机,芯片等)或者处理器执行图3或者图4所提供的处理组播数据报文的方法中的步骤。前述的可读存储介质可以包括:u盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。

在本申请的另一实施例中,还提供一种可读存储介质,可读存储介质中存储有计算机执行指令,当一个设备(可以是单片机,芯片等)或者处理器执行图5或者图6所提供的处理组播数据报文的方法中的步骤。前述的可读存储介质可以包括:u盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。

在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备执行图3或者图4所提供的处理组播数据报文的方法中的步骤。

在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备执行图5或者图6所提供的处理组播数据报文的方法中的步骤。

在本申请实施例中,若作为中间节点的转发设备无法识别和处理bier头的比特串,但支持利用p2mp转发bier报文,则当该作为中间节点的转发设备接收到第一组播数据报文,并获取第一转发表项和第二转发表项时,该作为中间节点的转发设备可以根据第一转发表项中用于指示对报文进行p2mp转发的第二标识和第二转发表项,处理第一组播数据报文,以获得第二组播数据报文,且在处理时无需对第一组播数据报文的bier头进行读取分析,从而可以在不对节点进行硬件升级的情况下实现bier报文的转发,节省了硬件升级的成本。此外,在作为中间节点的转发设备的下游节点不支持删除bier头中除bier标签外的数据时,该作为中间节点的转发设备还可以在转发组播数据报文时,删除组播数据报文的bier头中除bier标签外的数据,使其下游节点可以实现对接收到的组播数据报文的处理或转发,从而也可以在不对节点进行硬件升级的情况下实现bier报文的转发,进一步了节省了硬件升级的成本。

最后应说明的是:以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1