CN116094987A - 转发路径的确定方法及装置 - Google Patents
转发路径的确定方法及装置 Download PDFInfo
- Publication number
- CN116094987A CN116094987A CN202111308370.8A CN202111308370A CN116094987A CN 116094987 A CN116094987 A CN 116094987A CN 202111308370 A CN202111308370 A CN 202111308370A CN 116094987 A CN116094987 A CN 116094987A
- Authority
- CN
- China
- Prior art keywords
- path
- node
- paths
- p2mp
- multicast
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/16—Multipoint routing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/48—Routing tree calculation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供了一种转发路径的确定方法和装置,属于网络技术领域。本申请通过当需要为特定组播流确定P2MP路径时,无需重新计算整个P2MP路径,而是基于已有的P2MP路径中与组播流的目的叶子节点对应的P2P路径,来确定组播流的P2MP路径,从而极大地减少了确定P2MP路径所需的计算量,节省了算路开销,有助于高效快速地计算出P2MP路径。
Description
技术领域
本申请涉及网络技术领域,特别涉及一种转发路径的确定方法及装置。
背景技术
组播技术实现了互联网协议(internet protocol,IP)网络中点到多点的数据传送,在视频直播、在线教育、视频会议等诸多场景中都得到广泛应用。在组播技术中,需要计算出点到多点(point to multipoint,P2MP)路径,以便网络设备通过P2MP路径向多个叶子节点转发组播流。
相关技术中,当需要计算一条组播流的P2MP路径时,会根据组播流的目的叶子节点以及组播流要求的服务等级协议(service-level agreement,SLA)计算P2MP路径。之后,每当发生叶子节点加入、叶子节点退出或者链路变化时,会重新确定组播流的叶子节点,根据组播流的新的目的叶子节点以及组播流要求的SLA重新计算P2MP路径。采用以上方法时,算路的计算量过大,导致开销巨大。
发明内容
本申请提供了一种转发路径的确定方法、装置、设备及存储介质,能够减少确定P2MP路径的开销。所述技术方案如下。
第一方面,提供了一种转发路径的确定方法,该方法应用于第一点到多点(pointto multipoint,P2MP)路径的根节点,包括:基于第一P2MP路径以及用于接收第一组播流的n个叶子节点,获得n条点到点(point to point,P2P)路径,第一P2MP路径包括n条P2P路径,n为小于或等于第一P2MP路径的叶子节点数的正整数;基于n条P2P路径获得第二P2MP路径,第二P2MP路径用于将第一组播流转发至n个叶子节点。
根节点通过采用上述方法,当需要为特定组播流确定P2MP路径时,无需重新计算整个P2MP路径,而是基于已有的P2MP路径中与组播流的目的叶子节点对应的P2P路径,来确定组播流的P2MP路径,从而极大地减少了确定P2MP路径所需的计算量,节省了算路开销,有助于高效快速地计算出P2MP路径。
在一种可能的实现方式中,上述n条P2P路径中任一P2P路径的首节点为上述第一P2MP路径的根节点,上述n条P2P路径中任一P2P路径的尾节点为上述第一P2MP路径的一个叶子节点。
通过采用上述实现方式,由于预先建立经过组播流所有可能叶子节点的P2MP路径(第一P2MP路径),从而在组播流的目的叶子节点加入或退出等多种场景下,都能复用预先建立的P2MP路径中的P2P路径,而无需整体上重新算路,因此进一步节省了算路开销,并有助于满足组播流的目的叶子节点加入或退出等多种场景下的算路需求。
在一种可能的实现方式中,根节点为第一组播流获得第二P2MP路径的过程具体包括:获取上述n条P2P路径中每条P2P路径对应的比特串;基于上述n条P2P路径中上述每条P2P路径对应的比特串,获得上述第二P2MP路径对应的比特串,上述第二P2MP路径对应的比特串为上述n条P2P路径包括的所有P2P路径对应的比特串进行或操作的结果。
上述实现方式提供了BIER树工程(BIER tree engineering,BIER-TE)场景下算路的具体实现方式,能够支持在BIER-TE场景下高效地计算出P2MP路径。
在一种可能的实现方式中,根节点为第一组播流获得第二P2MP路径的过程具体包括:获取上述n条P2P路径中每条P2P路径对应的段列表;基于上述n条P2P路径中上述每条P2P路径对应的段列表,获得上述第二P2MP路径对应的段列表,上述第二P2MP路径对应的段列表包括上述n条P2P路径包括的所有P2P路径对应的段列表中的段标识。
上述实现方式提供了段路由(segment routing,SR)P2MP场景下算路的具体实现方式,能够支持在SR P2MP场景下高效地计算出P2MP路径。
在一种可能的实现方式中,上述第一P2MP路径为根据预设的服务等级协议(service-level agreement,SLA)需求以及预设的m个叶子节点建立的路径,上述第一组播流的SLA需求与上述预设的SLA需求相同,上述m为上述第一P2MP路径包括的叶子节点的数量。
上述实现方式中,通过根据预设的SLA需求以及预设的叶子节点的集合提前确定出了P2MP路径(第一P2MP路径),当需要为要求特定SLA的组播组确定P2MP路径时,基于提前建立的P2MP路径即可确定出满足SLA需求的P2MP路径,从而满足业务对SLA的需求。
在一种可能的实现方式中,上述第一P2MP路径为上述第一组播流对应的组播组中组播加入或者组播退出前的路径。
通过上述实现方式,在组播流的目的接收者加入或者退出导致叶子节点发生变化的场景下,结合原先的P2MP路径中与当前的叶子节点对应的P2P路径,即可得到新的P2MP路径,而无需根据网络拓扑整体上重新算路,从而提高了组播流的目的接收者加入或者退出的场景下算路的效率。
在一种可能的实现方式中,上述第一P2MP路径用于转发第二组播流,上述第二组播流的SLA需求与上述第一组播流的SLA需求相同。
通过上述实现方式,在多条组播流要求的SLA相同的情况下,能够复用一条组播流的P2MP路径来确定另一条组播流的P2MP路径,而无需每条组播流都重新计算P2MP路径,从而提高了存在多条组播流场景下算路的效率。
在一种可能的实现方式中,上述基于上述n条P2P路径获得第二P2MP路径之后,还包括:上述第二P2MP路径包括的第一P2P路径存在故障,基于上述第二P2MP路径获得第三P2MP路径,上述第三P2MP路径包括上述第一P2P路径的备路径以及上述n条P2P路径中上述第一P2P路径之外的P2P路径。
通过上述实现方式,当P2MP路径中发生故障时,通过将故障点所在的P2P路径切换为对应的备路径,即可获得更新后的P2P路径,而无需每条P2P路径都切换,因此有助于快速更新路径,提高了系统的稳定性,同时节省了更新P2MP路径的开销,提高了更新P2MP路径的效率。
在一种可能的实现方式中,上述基于上述第一P2MP路径以及用于接收第一组播流的n个叶子节点,获得n条点到点P2P路径之前,还包括:
基于上述第一组播流的SLA需求获取组播策略,上述组播策略包括上述n条P2P路径的信息以及用于标识上述SLA需求的信息。
通过采用上述实现方式,由于组播策略中包含P2MP路径中多条P2P路径的信息以及SLA需求,因此当需要为要求特定SLA的组播流确定P2MP路径时,查找与该SLA匹配的组播策略即可获得P2P路径以便确定P2MP路径,而无需在算路时临时执行将P2MP路径拆分为P2P路径的步骤,从而进一步提高了算路效率。
在一种可能的实现方式中,上述组播策略中上述n条P2P路径的信息包括上述n条P2P路径中每条P2P路径对应的比特串或段列表。
通过采用上述实现方式,为一条P2MP路径中多个叶子节点对应的多条P2P路径下发一个组播策略即可,而无需为每个叶子节点对应的P2P路径分别下发组播策略,从而避免策略的频繁下发。
在一种可能的实现方式中,上述组播策略中上述n个P2P路径的信息还包括上述n条P2P路径中每条P2P路径的备路径对应的比特串或段列表。
通过采用上述实现方式,当某一条P2P路径存在故障时,从组播策略中即可查找到该P2P路径的备路径,以便将P2P路径切换为备路径,从而减少故障时切换路径的时延,提高稳定性。
第二方面,提供了一种转发路径的确定装置,该转发路径的确定装置具有实现上述第一方面或第一方面任一种可选方式的功能。该转发路径的确定装置包括至少一个单元,至少一个单元用于实现上述第一方面或第一方面任一种可选方式所提供的方法。
在一些实施例中,转发路径的确定装置中的单元通过软件实现,转发路径的确定装置中的单元是程序模块。在另一些实施例中,转发路径的确定装置中的单元通过硬件或固件实现。第二方面提供的转发路径的确定装置的具体细节可参见上述第一方面或第一方面任一种可选方式,此处不再赘述。
第三方面,提供了一种路由设备,该路由设备提供为P2MP路径的根节点,该路由设备包括处理器,所述处理器与存储器耦合,所述存储器中存储有至少一条计算机程序指令,所述至少一条计算机程序指令由所述处理器加载并执行,以使所述路由设备实现上述第一方面或第一方面任一种可选方式所提供的方法。第三方面提供的路由设备的具体细节可参见上述第一方面或第一方面任一种可选方式,此处不再赘述。
第四方面,提供了一种路由设备,该路由设备提供为P2MP路径的根节点,该路由设备包括:主控板和接口板。主控板包括:第一处理器和第一存储器。接口板包括:第二处理器、第二存储器和接口卡。主控板和接口板耦合。
第一存储器可以用于存储程序代码,第一处理器用于调用第一存储器中的程序代码执行如下操作:基于所述第一P2MP路径以及用于接收第一组播流的n个叶子节点,获得n条点到点P2P路径,所述第一P2MP路径包括所述n条P2P路径,所述n为小于或等于所述第一P2MP路径的叶子节点数的正整数;基于所述n条P2P路径获得第二P2MP路径。
第二存储器可以用于存储程序代码,第二处理器用于调用第二存储器中的程序代码,触发接口卡执行如下操作:通过第二P2MP路径将所述第一组播流转发至所述n个叶子节点。
在一种可能的实现方式中,主控板和接口板之间建立进程间通信协议(inter-process communication,IPC)通道,主控板和接口板之间通过IPC通道进行通信。
第五方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令,该指令在计算机上运行时,使得计算机执行上述第一方面或第一方面任一种可选方式所提供的方法。
第六方面,提供了一种计算机程序产品,所述计算机程序产品包括一个或多个计算机程序指令,当所述计算机程序指令被计算机加载并运行时,使得所述计算机执行上述第一方面或第一方面任一种可选方式所提供的方法。
第七方面,提供了一种芯片,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行该计算机指令,以执行上述第一方面及其第一方面任意可能的实现方式中的方法。
第八方面,提供了一种网络系统,该系统包括上述第三方面或第四方面中的路由设备,该系统还包括控制器。控制器用于向路由设备发送组播策略,所述组播策略包括P2MP路径中多条P2P路径的信息以及用于标识P2MP路径对应的SLA需求的信息。
附图说明
图1是本申请实施例提供的一种应用场景的示意图;
图2是本申请实施例提供的一种P2MP路径的段列表的编码结构示意图;
图3是本申请实施例提供的一种P2MP路径的段列表的示意图;
图4是本申请实施例提供的一种应用场景的示意图;
图5是本申请实施例提供的一种应用场景的示意图;
图6是本申请实施例提供的一种实施环境的示意图;
图7是本申请实施例提供的一种转发路径的确定方法的流程图;
图8是本申请实施例提供的一种P2MP路径中发生故障的示意图;
图9是本申请实施例提供的一种BIER-TE网络的架构图;
图10是本申请实施例提供的一种BIER-TE网络中合并P2P路径的示意图;
图11是本申请实施例提供的一种SR P2MP网络的架构图;
图12是本申请实施例提供的一种SR P2MP网络中合并P2P路径的示意图;
图13是本申请实施例提供的一种组播策略的结构示意图;
图14是本申请实施例提供的一种实施环境的示意图;
图15是本申请实施例提供的一种转发路径的确定装置600的结构示意图;
图16是本申请实施例提供的一种路由设备的结构示意图;
图17是本申请实施例提供的另一种路由设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
本申请的一些实施例使用“<路径经过的每个节点的标识>”的形式简化表示一条具体的路径,例如<P1,P2,P3>表示一条经过节点P1、节点P2和节点P3的路径。本申请的一些实施例中,报文通过携带比特串(BitString)或者段列表(segments list)从而显式地指示报文的转发路径。比特串的形式例如是包含0或1的数字序列,比特串的更多细节可参考下文中的介绍。段列表的形式例如是包含多个段标识(segment ID,SID)的序列,SID的形式包括而不限于互联网协议第6版(internet protocol version 6,IPv6)地址或多协议标签交换(multi-protocol label switching,MPLS)标签。段列表的更多细节可参考下文中的介绍。
下面对本申请实施例涉及的一些术语概念做解释说明。
(1)组播段标识(multicast segment identifier,multicast SID)
组播SID(segment identifier,SID)也称为复制SID(replication SID)或者多播SID。在一个支持段路由(segment routing,SR)组播的域中,每一个节点通常具有一个组播节点SID,每一个节点的每一个邻接通常具有一个组播邻接SID。SR P2MP路径上一个节点的一个组播SID与该节点的多个下一跳(或者说下游)节点的SID关联。当节点接收到包含本节点的组播SID的报文时,节点根据多个下一跳节点的SID,对报文复制并将报文转发给多个下一跳节点中的每一个下一跳节点。组播SID的参数字段包括节点下分支数量(N-branches)和节点下SID数量(N-SIDs)。
(2)N-branches
N-branches是组播SID携带的一种参数。N-branches表示组播SID所属的节点具有多少个子节点。换句话说,N-branches等于P2MP路径上组播SID所属的节点的下一跳节点(或者说分支)的数量。例如,在图1所示的拓扑中,节点P1的组播SID中N-branches为2。当节点P1接收到携带节点P1的组播SID的报文时,节点P1根据N-branches为2,会向节点P1的2个下一跳节点(节点P2和节点P3)发送报文。
(3)点到多点(point to multipoint,P2MP)路径的段列表的编码结构
P2MP路径的段列表按照P2MP树的层级结构编码。具体地,如果P2MP路径经过的一个节点i具有B个下一跳节点,那么段列表中节点i的SID之后,依次是B个下一跳节点中每一个下一跳节点的SID,然后依次是每一个下一跳节点的子树的SID,其中B为大于或等于1的整数。图2示出了P2MP路径的段列表的编码结构示意图,如图2所示,节点i相当于P2MP树的根节点,或者说P2MP树中第一层节点,节点i的SID(图2中的SIDi)是段列表中第一个SID。节点i的B个下一跳节点相当于P2MP树的第二层节点,或者说根节点的B个分支。如图2所示,段列表中节点i的SID(图2中的SIDi)之后是B个下一跳节点的SID,首先是节点i的第一个子节点的SID(图2中的SIDi1),然后是节点i的第二个子节点的SID(图2中的SIDi2),然后是节点i的第三个子节点的SID(图2中未示出),以此类推,然后是节点i最后一个子节点的SID(图2中的SIDiBi)。节点i的下一跳节点的下一跳节点(也称节点i的子节点的子节点)相当于P2MP树的第三层节点,或者说来自于节点i的子节点的子树。如图2所示,B个下一跳节点的SID之后,首先是节点i的第一个子节点的子树(图2中的SegSeq1),然后是节点i的第二个子节点的子树(图2中的SegSeq2),依次类推,直至节点i的最后一个子节点的子树(图2中的SegSeqBi)。
结合图1所示的拓扑来看,图1所示拓扑中的P2MP路径的段列表的编码结构可选地如图3所示。请参考图3,图1示出的P2MP路径可以看成以节点P1为根的一棵树。节点P1属于树中的第一层。节点P1的两个子节点,即节点P2和节点P3属于树中的第二层,以此类推。根据图1中的P2MP路径的层级结构,编码得到图3中段列表。如图3所示,段列表中的组播SID按照从第一层到最后一层的先后顺序依次排列,首先是第一层节点的SID(图3中的P1),然后是第二层节点的SID(图3中的P2和P3),然后是第二层节点的子树对应的SID序列。
(4)基于比特位的显式复制(bit indexed explicit replication,BIER)
BIER是一种转发组播数据报文的新技术。BIER技术的典型特点为,将组播数据报文的目的节点集合以比特串(BitString)的方式封装在报文头部进行发送,从而使网络中间节点无需为每一个组播流建立组播树及保存组播流状态,从而减少对资源的占用。基于BIER技术转发的基本流程为,当组播数据报文进入BIER域时,比特转发入口路由器(bitforwarding ingress router,BFIR)确定报文需要发往的比特转发出口路由器(bitforwarding engress router,BFER)集合。BFIR向报文封装BIER选项(也称BIER头)。BIER选项包含BitString。BFIR也可称为BIER域中的入口节点。BFER也可称为BIER域中的出口节点。
在本申请的一些实施例中,BIER泛指根据BitString封装和转发报文的方法,即,发送端向报文封装BitString,路由设备接收到包含BitString的报文后根据BitString将报文复制发送给目的节点。本申请的一些实施例中,BIER报文复用原有的BIER报文格式。
(5)BitString
BitString用于标识报文的转发路径上一个或多个节点或者一条或多条链路。BitString包括多个比特位(bit positions,BP)。BitString中每一个比特位对应于一个节点或一条链路。BitString中每一个置位的比特位用于标识报文要经过的一个节点或者一条链路。BitString中置位的比特位标识的节点包括而不限于中间节点或目的节点(有些实施例中目的节点也称为尾节点或叶子节点或BFER)。BitString中置位的比特位的值例如是1,BitString中没有置位的比特位的值例如是0。例如,网络中包含节点P1、节点P2……节点P5这5个节点,报文的转发路径是<P1,P2,P3>,该转发路径对应的BitString例如是00111,该BitString中节点P1对应的比特位(例如是右数第一个比特位)、节点P2对应的比特位(例如是右数第二个比特位)和节点P3对应的比特位(例如是右数第三个比特位)均置位,从而标识报文需要转发给节点P1、节点P2和节点P3。
本申请实施例中的BitString不仅仅用于标识BIER域中报文的多个目的BFER(即转发路径上的叶子节点)。当BitString仅用于标识BIER域中报文的多个目的BFER(即转发路径上的叶子节点)时,BitString中每一个比特位对应于一个BFER。BitString中置位的比特为报文的目的BRER节点的标识的集合。当BFIR需要将报文通过中间节点转发至指定的一组BFER时,BFIR会将BIER选项中与该指定的一组BFER对应的比特位均置位,以便中间节点根据BitString的置位情况进行复制和转发。例如,BIER域中包含4个边缘节点,这4个边缘节点的标识例如分别是1、2、3和4,当BFIR需要将报文转发至BFR ID为1的边缘节点以及BFRID为2的边缘节点时,BFIR可以在BIER选项中携带以0011表示的BitString。
本申请实施例中的比特串还可采用bitstring、bit string、Bit string、BitString等表达,本申请实施例不限于上述BitString特定表达。
(6)BIER转发路由器(BIER forwarding router,BFR)
BFR是指支持BIER转发的节点。BFR包括BFIR、BFER和transit BFR。BFIR和BFER统称为BIER域的边缘节点。transit BFR是BIER域的中间转发节点。
(7)BIER转发路由器标识符(BIER forwarding router Identifier,BFR-ID)
BFR ID是BFER节点的标识。BFR ID用一个1到65535范围内的整数表示。例如,一个网络中拥有256个边缘节点,每个边缘节点需要配置一个1~256的唯一值,目的节点集合则使用一个256比特(或32字节)的BitString来表示,BitString的每个比特所在的位置或索引表示一个边缘节点。
(8)比特索引转发表(bit index forwarding table,BIFT)
BIFT是BIE域中每个BFR转发组播报文时使用的表项。BIFT用来表示通过该BFR邻居能到达的各BFER节点,包括BFR邻居(BFR neighbor,Nbr)和转发位掩码(forwarding bitmask,FBM)。
(9)BIER树工程(BIER tree engineering,BIER-TE)
BIER-TE相对于BIER而言,主要变化包括而不限于以下两点。
第一,在BIER中,BIER选项中比特串中的比特指示一个BFER,在BIER的控制面,BIFT中的比特用于确定到达该BFER的下一跳。在BIER-TE中,BIER选项中比特串中的比特指示BFER-TE拓扑中一个邻接或一个节点,例如,邻接中位于上游的BFR在本地的BIFT中填充比特位。在BIER-TE的转发面,当BFR接收到数据报文时,BFR会根据数据报文中比特串中置位的比特位,查找BIFT中填充的比特位,根据比特位在BIFT中对应的邻接关系类型复制报文。
第二,BIER中通常由网络中各个节点基于最短路径算法进行分布式算路,而BIER-TE中通常由控制器计算一条显式的路径并下发给头节点。
(10)基于互联网协议第6版的段路由(internet protocol version 6forsegment routing,SRv6)的流量工程(traffic engineering,TE)策略(policy)
SRv6 TE policy利用段路由(segment routing,SR)的源路由机制,通过在头节点封装一个有序的指令列表(即段列表)来指导报文穿越网络。SRv6 TE Policy的工作流程主要可以概括为5个步骤:1.转发器(中间节点或者头节点)将网络拓扑信息通过边界网关协议(border gateway protocol,BGP)链路状态(BGP linkstate,BGP-LS)协议上报给网络控制器。拓扑信息包括节点、链路,以及链路的开销、带宽和时延等TE属性。2.控制器基于收集到的拓扑信息,按照业务需求计算路径,符合业务的服务等级协议(service-levelagreement,SLA)需求。3.控制器通过BGP SR策略(BGP SR-policy)扩展将路径信息下发给网络的头节点,头节点生成SRv6 TE policy。生成的SRv6 TE policy包括头端地址、目的地址和颜色(color)等关键信息。4.网络的头节点为业务选择合适的SRv6 TE Policy指导转发。5.数据转发时,转发器需要执行自己发布的SID的指令。SRv6 TE Policy技术中,通过在SRH中封装段列表,可以显式指导报文按照规划的路径转发,实现对转发路径端到端的细粒度控制,满足业务的低时延、大带宽、高可靠等SLA需求。如果业务的目的地址与SRv6 TEPolicy的EndPoint匹配,业务的偏好(通过路由的color扩展团体属性标识)与SRv6 TEPolicy的一致,那么业务的流量就可以导入指定的SRv6 TE Policy进行转发。SRv6利用IPv6地址128比特的可编程能力,丰富了SRv6指令表达的网络功能范畴,除了用于标示转发路径的指令外,还能标示增值业务设备,例如防火墙、应用加速,或者用户网关等。除此之外,SRv6还有着非常强大的扩展能力,如果要支持一个新的网络功能,只需要定义一个新的指令即可,不需要改变协议的机制或部署,这大大缩短了网络创新业务的交付周期。所以说,SRv6 TE Policy可以实现业务的端到端需求,是实现SRv6网络编程的主要机制。
(11)段路由头(Segment Routing Header,SRH)
为了基于IPv6转发平面实现segment routing,IPv6路由扩展报文头新增加一种类型,称作SRH,该扩展报文头指定一个IPv6的显式路径,存储的是IPv6的路径约束信息(segments list)。头节点在IPv6报文中增加一个SRH扩展头,中间节点就可以按照SRH扩展头里包含的路径信息进行转发。
(12)SID
在SR-MPLS中,SID通常是20比特的MPLS标签,SID的类型包括用于标识目的地址前缀的前缀段(prefix segment)、用于标识邻接的邻接段(adjacency segment)、用于标识节点的节点段(node segment)等。
在SRv6中,SID通常是128比特的IPv6地址。SRv6 SID主要包括locator和function两部分。function部分还可以分出一个可选的参数段(arguments)。locator具有定位功能。节点配置locator之后,系统会生成一条locator网段路由,并且通过IGP在SRv6域内扩散。网络里其他节点通过locator网段路由就可以定位到本节点,同时本节点发布的所有SRv6SID也都可以通过该条locator网段路由到达。function代表设备的指令(Instruction),这些指令都由设备预先设定。function部分用于指示SRv6 SID的生成节点进行相应的功能操作。function通过Operation Code(Opcode)来显性的表征。function和arguments都是可以定义的,这也反映出SRv6 SID的结构更有利于对网络进行编程。
SRv6 SID主要包括End SID和End.X SID。End SID表示Endpoint SID,用于标识网络中的某个目的节点(Node)。例如,在各个节点上配置locator,然后为节点配置function的Opcode,locator和function的Opcode组合就能得到一个SID,这个SID可以代表本节点,我们称为End SID。End.X SID表示三层交叉连接的Endpoint SID,用于标识网络中的某条链路。例如,在节点上配置locator,然后为各个方向的邻接配置function的Opcode,locator和function的Opcode组合就能得到一个SID,这个SID可以代表一个邻接。End.XSID表示三层交叉连接的Endpoint SID,用于标识网络中的某条链路nd SID和End.X SID分别代表节点和邻接,都是路径SID,使用二者组合编排SID栈已经足够表征任何一条网络路径。SID栈代表了路径的约束,携带在IPv6 SRH中,SRv6就是通过这种方式实现了流量工程(Traffic Engineering,TE)。
(13)或操作(也称or操作)
对多个比特串进行或操作是指,对于同一个比特位而言,如果多个比特串中任一个比特串中该比特位的值为1,则或操作得到的结果中该比特位的值为1;如果多个比特串中所有比特串中该比特位的值均为0,则或操作得到的结果中该比特位的值为0。例如,比特串1是0001,比特串2是1000,则对比特串1和比特串2进行或操作的结果是1001。
SRv6是基于源路由理念而设计的在网络上转发IPv6数据报文的一种协议。SRv6基于IPv6转发技术,通过对IPv6扩展头进行扩展,实现类似标签转发的处理。SRv6将一些IPv6地址定义为实例化的SRv6 SID,每个SRv6 SID都有自己显式的作用和功能,通过不同SRv6SID的组合,实现简化的虚拟专用网络(Virtual Private Network,VPN)以及灵活的路径规划。
SRv6 SID主要包括两个部分-定位(locator)字段以及功能(function)字段,locator占据SRv6 SID的高比特位,function字段占据SRv6 SID的剩余部分。可选地,SRv6SID还包括参数(arguments,arg)字段。SRv6 SID可选地表示为locator:function:arguments,其中locator又可以表示为B:N。其中,B表示运营商为SRv6 SID分配的IPv6子网,N是实例化SID父节点的标识符。所以,SRv6 SID又可以表示为B:N:function:arguments。节点配置locator后,系统会生成一条locator网段路由,并且通过内部网关协议(interior gateway protocol,IGP)或BGP,在SR域内进行扩散。由于本节点分配的SRv6SID locator部分相同,所有其他节点都可以通过locator路由找到本节点配置的SRv6SID。function部分用于指示SRv6 SID的生成节点进行相应的功能操作,arguments字段可以定义一些报文的流和服务等信息。
无状态的SRv6 P2MP在草案“draft-chen-pim-srv6-p2mp-path”中提出。无状态的SRv6P2MP是指,对于从入口节点到多个出口节点的SR P2MP路径,使用段列表来表示SRP2MP路径,数据报文根据入口节点处封装的段列表转发到多个出口节点,并且网络核心中通常没有任何状态。以图1为例来说明无状态SRv6 P2MP的解决方案。图1中节点R为入口节点,节点L1、节点L2、节点L3和节点L4为出口节点(即叶子节点),节点P1、节点P2、节点P3和节点P4在P2MP路径中为转发节点(即中间节点)。草案中定义了一种新的SID,称为组播(multicast)SID。在支持SR组播的SR域中,每个节点都有一个组播节点SID;节点的每个邻接关系都有一个组播邻接SID。用段列表来表示图1中P2MP路径<P1,P2,P3,L1,L2,P4,L3,L4>,组播SID中用一个参数N-branches表示当前节点下多少个子节点,用另一个参数N-SIDs表示当前节点下SID的个数。编码后的段列表如下表1所示。
表1
段列表的编码按照P2MP树的层级来编码。以图1为例,图1示出的P2MP路径可以看成以节点P1为根的一棵树。节点P1属于树中的第一层。节点P1的子节点-节点P2和节点P3属于树中的第二层,以此类推。段列表中组播SID按照从第一层一直到最后一层的先后顺序依次排列。
当节点P1接收到携带上述段列表的数据报文时,节点P1发现段列表中第一个SID是本节点P1发布的组播SID,则节点P1从段列表中第一个SID中解析出N-branches和N-SIDs。节点P1根据N-branches知道段列表中第一个SID中接下来几个SID是节点P1的子节点的SID,则节点P1将数据报文进行复制,将数据报文分别发往节点P2和节点P3。发往节点P2的数据报文中段列表如下表2所示。
表2
发往节点P3的数据报文中段列表如下表3所示。
表3
BIER通过将组播报文目的节点的集合以BitString的方式封装在报文头部进行发送,从而使网络中间节点无需为每一个组播流建立组播树及保存组播流状态,中间节点仅需根据报文头部携带BitString对应的目的节点的集合对数据报文进行复制和转发。BIER-TE为比特位(bit positions,BP)引入了新的语义来指示邻接位置。BIER中用BP指示BFER。BIER-TE中,每个BFR的BIFT中通常仅填充与BIER-TE拓扑中BFR相邻的BP。表4描述了BIER-TE的拓扑及各个BFR的BIFT。p1…p14是使用的BP。所有BFR都可以作为BFIR,BFR1、BFR3、BFR4和BFR6也可作为BFER。Forward_connected()表示网络子网邻接的邻接名称,Local_decap()是表示解封装BIER-TE数据包并将其有效载荷传递给更高层处理的邻接名称。
表4
例如,数据报文需要从BFR1经过BFR4到BFR6,则数据报文需要携带的BitString为(p2,p8,p10,p12,p15)对应的。当数据报文携带BitString(p2,p8,p10,p12,p15)并转发至BFR1后,BFR1根据数据报文中的BitString,查找BFR1的BIFT进行转发。由上述表4中比特位与动作之间的对应关系可知,由于BitString中比特位p2被置位,所以BFR1将报文发送到BFR2。BFR2继续查本地BIFT进行转发。报文从BFR2转发到BFR4,继而转发到BFR5,最后转发到BFR6。最终BFR6根据p15接收并解封装数据报文。
当不仅需要将报文通过BFR4发送到BFR6,还需要向BFR3发送报文的副本时,报文携带的BitString为(p2,p5,p8,p10,p12,p13,p15)对应的BitString。其中获取(p2,p5,p8,p10,p12,p13,p15)对应的BitString的方法可参见上述关于BitString介绍部分,在此不再赘述。BFR2接收到携带该BitString的报文时,由于BitString中比特位p5和p8都置位了,因此BFR2会复制报文的副本,将报文的副本发送到BFR3和BFR4。
相关技术在确定组播业务的P2MP路径时,会将P2MP路径作为一个整体进行算路。每次计算P2MP路径时,都会根据目的叶子节点和业务SLA来计算P2MP路径。也即是,P2MP路径的算路过程并不是一个增量计算的过程,没有复用已有结果。
例如,结合图5示出的场景来看,比如,有一个组播流1,组播流1需要发送给图5中的节点N1和节点N2。相关技术在计算组播流1的P2MP路径时,会根据叶子节点(N1和N2)和组播流1的业务的服务等级协议(service level agreement,SLA)需求(SLA1),计算出P2MP路径1;还有一个组播流2,组播流2需要发送给图5中的节点N2和节点N3。相关技术在计算组播流2的P2MP路径时,会根据叶子节点(N2和N3),组播流2的业务的SLA需求(SLA2),计算P2MP路径2;还有某一个组播流3,组播流3需要发送给节点N2和节点N3。相关技术在计算组播流3的P2MP路径时,会根据叶子节点(N2&N3),组播流3的业务的SLA需求(SLA3),计算P2MP路径3。此外,如果组播流3不仅需要发送给节点N2和节点N3,还需要发送给节点N1时,相关技术会根据全网拓扑重新计算P2MP路径3。
然而,在采用这种将P2MP路径作为一个整体进行算路的方法时,由于整体上计算P2MP路径,每当叶子节点动态加入、或者叶子节点动态退出或者原先的路径中链路发生变化时,都需要重新计算整个P2MP路径,开销过大。例如,结合图5来看,当组播流3需要在发送给节点N2和节点N3的基础上,还发送给节点N1时,其实无需整体上重新计算P2MP路径,只需要计算从节点R1到节点N1的P2P路径,再结合原P2MP路径,即可计算出一条发往节点N2、节点N3和节点N1的P2MP路径。此外,当图5中节点R3到节点N3的路径发生故障时,上述方法需要重新计算组播流2和组播流3的P2MP路径,计算量过大。
有鉴于此,本实施例提供了一种确定P2MP路径的方法,相当于将P2MP路径的算路过程转换为将已有的P2MP路径拆分成多条P2P路径,再根据具体场景对P2P路径重新组合的过程,从而无需每次算路时都整体上重新计算整个P2MP路径,因此减少了确定P2MP路径所需的计算量,节省了算路开销,有助于高效快速地计算出P2MP路径。
图6是本申请实施例提供的一种网络系统的架构示意图。图6所示的网络系统包括组播源S1、多个网络节点以及多个组播接收者。下面对图6中各个设备举例说明。
(1)组播源S1
组播源S1为生成和发送组播报文的源设备。组播源S1发送的组播报文的目的地址为组播组的IP组播地址。可选地,组播源S1部署在用户网络中。组播源S1通过有线网络或无线网络与首节点R1相连。组播源S1包括而不限于服务器或者用户设备。用户设备包括而不限于个人计算机、移动电话、笔记本电脑、IP电话、摄像头、平板电脑、可穿戴设备等。
(2)网络节点
网络节点包括而不限于路由器、交换机、防火墙等。图6示出的网络节点包括首节点R1、中间节点P1、中间节点P2、中间节点P3、中间节点P4、中间节点P5、中间节点P6、中间节点P7、叶子节点L1、叶子节点L2、叶子节点L3、叶子节点L4、叶子节点L5、叶子节点L6、叶子节点L7和叶子节点L8。
在转发组播报文的流程中,首节点R1用于接收组播源S1发送的组播报文,向组播报文封装转发路径的信息或者目的叶子节点的信息后,向中间节点转发组播报文。中间节点接收到组播报文后,基于首节点R1封装的信息将组播报文转发至指定的目的叶子节点。
例如,在应用BIER技术转发组播报文的情况下,首节点R1充当BFIR,首节点R1向组播报文封装BitString,BitString中置位的比特表示转发路径上每个目的节点。中间节点作为BFR,根据BitString向下一个节点转发报文。叶子节点作为BFER,在发现BitString中本节点的BFR ID对应的比特位置位的情况下,查询路由信息从而将组播报文转发至对应的组播接收者。
又如,在应用SRv6技术转发组播报文的情况下,首节点R1充当头端(headend),首节点R1向组播报文封装段列表,段列表包括转发路径上每个节点的组播SID。中间节点根据段列表中的SID向下一个节点转发报文。
可选地,图6示出的各个网络节点位于同一个路由域中,该多个网络设备之间基于路由协议学习到彼此的路由信息。该路由域包括而不限于BIER域或者SR域。
可选地,首节点R1和各个叶子节点均为PE节点。各个中间节点均为P节点。
(3)组播接收者
组播接收者为基于IP组播地址接收组播报文的目的设备。组播接收者可加入至组播组中从而成为组播组的成员,或者从组播组退出。组播接收者包括而不限于服务器或者用户设备。图6示出的组播接收者包括组播接收者D1、组播接收者D2、组播接收者D3、组播接收者D4、组播接收者D5、组播接收者D6和组播接收者D7。可选地,图6中不同组播接收者分布在网络中不同位置。
图7是本申请实施例提供的一种转发路径的确定方法的流程图。图7所示方法应用于P2MP路径的根节点。图7所示方法是关于如何根据一条P2MP路径确定另一条P2MP路径。为了区分不同的P2MP路径,用“第一P2MP路径”、“第二P2MP路径”区分描述多个不同的P2MP路径。图7所示方法中不同的P2MP路径可选地用于转发不同的组播流。为了区分不同的组播流,用“第一组播流”、“第二组播流”区分描述多个不同的组播流。图7所示方法所基于的网络部署场景可选地如上述图6所示。例如,结合图6来看,图7所示方法中的根节点为图6中的R1,图7所示方法中第一P2MP路径为图6中从R1到L1、L2、L3……L8的路径,图7所示方法中n个叶子节点为图6中L1、L2、L3和L4这四个叶子节点,图7所示方法中n条P2P路径为图6中从R1到L1的路径、从R1到L2的路径、从R1到L3的路径和从R1到L4的路径这四条路径。图7所示方法可选地应用于BIER-TE网络或者SR P2MP网络中。例如,如图6所示,图7所示方法中根节点和叶子节点部署在BIER-TE网络或者SR P2MP网络的边缘,其中根节点为BIER-TE网络或者SR P2MP网络的入口节点,叶子节点为BIER-TE网络或者SR P2MP网络的出口节点。图7所示方法包括以下步骤S201至步骤S202。
步骤S201、根节点基于第一P2MP路径以及用于接收第一组播流的n个叶子节点,获得n条P2P路径。
可选地,第一P2MP路径是包含网络中所有边缘节点的路径,网络中每个边缘节点是第一P2MP路径上的一个叶子节点。例如,应用在BIER场景,第一P2MP路径可选地是包含BIER域中所有BFER的路径,BIER域中每个BFER是第一P2MP路径上的一个叶子节点。又如,在一个IP骨干网络中,第一P2MP路径可选地是包含IP骨干网络中所有PE的路径。
可选地,第一P2MP路径是预先建立的路径。根节点上保存了表示第一P2MP路径的信息,当需要确定第一组播流的转发路径时,根节点根据保存的信息获得第一P2MP路径。建立第一P2MP路径的执行主体包括多种情况。例如,由控制器进行路径计算,获得第一P2MP路径,控制器将第一P2MP路径下发给根节点,根节点接收控制器发送的第一P2MP路径;又如,由网络管理员采用静态配置的手段在根节点上配置第一P2MP路径;又如,由根节点进行路径计算,从而获得第一P2MP路径。
可选地,第一P2MP路径为根据预设的SLA需求以及预设的m个叶子节点建立的路径。m为第一P2MP路径包括的叶子节点的数量,m为大于或等于n的正整数。可选地,m大于或等于3。
预设的SLA需求包括而不限于时延低于阈值、丢包率小于阈值、带宽大于阈值等。可选地,由网络管理员采用静态配置的手段预先配置SLA需求。可选地,预设的SLA需求通过颜色(color)标识。例如,color 123标识时延低于阈值的SLA需求,color 456标识带宽大于阈值的SLA需求。
如何获得m个叶子节点包括多种实现方式。例如,由网络管理员采用静态配置的手段,预先配置m个叶子节点。又如,m个叶子节点中每个叶子节点向控制器或者根节点发送本节点的标识,控制器或者根节点接收m个叶子节点中每个叶子节点发送的节点标识,从而确定m个叶子节点。在一种可能的实现中,m个叶子节点中每个叶子节点基于BGP协议向控制器上报本节点的标识,以便控制器获得m个叶子节点从而计算出上述第一P2MP路径。其中,叶子节点的标识包括而不限于叶子节点的SID(如组播SID)或者叶子节点的BFR ID等。
n个叶子节点为第一组播流的目标接收者。n表示第一组播流的叶子节点的数量。
叶子节点的实体包括多种情况。在一种可能的实现中,n个叶子节点中的每个叶子节点为一个路由设备,n个叶子节点中的每个叶子节点和第一组播流的一个或多个目的主机相连,n个叶子节点中的每个叶子节点用于将接收到的第一组播流转发至本节点连接的目的主机。在另一种可能的实现中,n个叶子节点中的每个叶子节点为第一组播流的一个目的主机。
上述n个叶子节点属于第一P2MP路径中的m个叶子节点。n个叶子节点是m个叶子节点中的部分节点或者全部节点。例如,第一P2MP路径的叶子节点包括BFER 1、BFER 2、BFER3……BFER 7这7个BFER,m为7,第一组播流的叶子节点为BFER 1、BFER 2、BFER3这3个BFER,n为3。
根节点如何确定上述n个叶子节点包括多种实现方式。在一种可能的实现中,根节点基于接收到的组播加入消息或者组播退出消息,确定用于接收第一组播流的n个叶子节点。具体地,当一个网络设备要接收第一组播流时,该网络设备向根节点发送针对第一组播流的组播加入消息。根节点接收到组播加入消息后,根节点基于组播加入消息,将该网络设备确定为第一组播流的一个叶子节点。当一个网络设备要停止接收第一组播流时,该网络设备向根节点发送针对第一组播流的组播退出消息。根节点接收到组播退出消息后,根节点基于组播退出消息,将该网络设备从第一组播流的叶子节点中删除。
n条P2P路径中任一条P2P路径用于将第一组播流转发至n个叶子节点中对应的叶子节点。可选地,n条P2P路径中任一条P2P路径的尾节点(也称出口节点或者终止节点)为一个用于接收第一组播流的叶子节点。n条P2P路径中每条P2P路径的首节点(也称入口节点、头节点或者起始节点)为第一P2MP路径的根节点。
n条P2P路径中的每条P2P路径均为第一P2MP路径包含的路径。对于n条P2P路径中任一P2P路径而言,该P2P路径上的所有节点均是第一P2MP路径上的节点,该P2P路径上的所有链路均是第一P2MP路径上的链路。
在一些实施例中,获得n条P2P路径的具体过程包括:根节点获取由第一P2MP路径拆分得到的m条P2P路径。根节点根据接收第一组播流的n个叶子节点,从m条P2P路径中选择n条P2P路径。
在一些实施例中,上述m条P2P路径是根据叶子节点对第一P2MP路径进行拆分得到的。具体地,将第一P2MP路径中从根节点到一个叶子节点经过的路径划分为一条P2P路径,得到m条P2P路径。m条P2P路径中任一P2P路径的首节点为第一P2MP路径的根节点。m条P2P路径中任一P2P路径的尾节点为第一P2MP路径的一个叶子节点。
负责拆分第一P2MP路径的实体包括多种情况。在一些实施例中,由控制器拆分第一P2MP路径,以得到m条P2P路径;控制器将拆分得到的m条P2P路径下发给根节点,根节点接收控制器发送的m条P2P路径。在另一些实施例中,由根节点拆分第一P2MP路径,以得到m条P2P路径。
在一些实施例中,从m条P2P路径中选择n条P2P路径的过程具体包括:对于m条P2P路径中的每条P2P路径,根节点判断该P2P路径的叶子节点是否为用于接收第一组播流的叶子节点,如果该P2P路径的叶子节点是用于接收第一组播流的叶子节点,则选中该P2P路径以便获得第二P2MP路径。
步骤S202、根节点基于n条P2P路径获得第二P2MP路径。
第二P2MP路径是第一组播流的转发路径。第二P2MP路径用于将第一组播流从根节点转发至上述n个叶子节点。
第二P2MP路径包括上述n条P2P路径。可选地,第二P2MP路径的根节点和n条P2P路径中任一条P2P路径的首节点相同。可选地,第二P2MP路径的叶子节点包括上述n条P2P路径中每条P2P路径的叶子节点。可选地,第二P2MP路径上的节点包括n条P2P路径中每条P2P路径上的所有节点以及所有链路。
第二P2MP路径是第一P2MP路径包括的路径。在一些实施例中,第二P2MP路径的根节点和第一P2MP路径的根节点相同。第二P2MP路径的叶子节点为第一P2MP路径的部分叶子节点或者全部叶子节点。可选地,第二P2MP路径是第一P2MP路径的子树。
本实施例提供的方法,通过将已有的P2MP路径视为多条P2P路径的组合,基于P2MP路径中与特定组播流的叶子节点对应的P2P路径,来确定出特定组播流的P2MP路径,而无需整体上重新计算P2MP路径,此减少了确定P2MP路径所需的计算量,节省了算路开销,有助于高效快速地计算出P2MP路径。
可选地,根节点在获得第二P2MP路径之后,根节点通过第二P2MP路径向n个叶子节点转发第一组播流。在一个示例性实施例中,根节点创建第一组播流的组播源、第一组播流的组播组与第二P2MP路径之间的对应关系,根节点将该对应关系保存至根节点的转发表中。当根节点接收到第一组播流的组播报文时,根节点根据组播报文的组播源和组播组查询转发表中该对应关系,得到第二P2MP路径。根节点通过第二P2MP路径转发报文。例如,在BIER-TE场景下,根节点向组播报文封装第二P2MP路径的BitString后,将携带BitString的组播报文转发至中间节点。中间节点根据组播报文携带的BitString转发组播报文,使得组播报文通过第二P2MP路径沿途转发。又如,在SR-P2MP场景下,根节点向组播报文封装第二P2MP路径的段列表后,根节点将携带段列表的组播报文转发至中间节点。中间节点根据组播报文携带的段列表转发组播报文,使得组播报文通过第二P2MP路径沿途转发。
本实施例提供的方法支持多种场景下高效计算出P2MP路径。下面对一些应用场景举例说明。
场景一、组播流的叶子节点发生更新。
当一条组播流对应的组播组发生成员加入或者成员退出,会导致P2MP路径上的叶子节点发生更新。根节点采用本实施例提供的方法,能够复用原先的P2MP路径来计算出叶子节点更新后的P2MP路径,而无需重新计算整个P2MP路径。
例如,结合上述图7所示方法来看,图7所示方法中第一P2MP路径为第一组播流的叶子节点发生更新前的路径,而第二P2MP路径为第一组播流的叶子节点发生更新后的路径,n是指更新后的叶子节点的数量。
例如,根节点在第一组播流对应的组播组发生成员加入时执行图7所示方法。图7所示方法中第一P2MP路径为第一组播流对应的组播组中组播加入前的路径。第二P2MP路径为第一组播流对应的组播组中组播加入后的路径,n是指组播加入后叶子节点的数量。例如,在已经为具有m个叶子节点的第一组播流建立了第一P2MP路径之后,第一组播流对应的组播组发生成员加入。m个叶子节点中由于增加了新的叶子节点,变成了n个叶子节点。n个叶子节点包括原有的m个叶子节点以及新增的叶子节点。其中,n大于m,n与m的差值为新增的叶子节点的数量。在这种情况下,根节点通过执行图7所示方法,从而为具有n个叶子节点的第一组播流计算出一条新的P2MP路径(第二P2MP路径)。
例如,根节点在第一组播流对应的组播组发生成员退出时执行图7所示方法,图7所示方法中第一P2MP路径为第一组播流对应的组播组中组播退出前的路径。第二P2MP路径为第一组播流对应的组播组中组播退出后的路径,n是指组播退出后叶子节点的数量。例如,在已经为具有m个叶子节点的第一组播流建立了第一P2MP路径之后,第一组播流对应的组播组发生成员退出,m个叶子节点中由于部分叶子节点退出,变成了n个叶子节点。n个叶子节点为m个叶子节点中除了退出的叶子节点之外的叶子节点。其中,m大于n,m与n的差值为退出的叶子节点的数量。在这种情况下,根节点通过执行图7所示方法,从而为具有n个叶子节点的第一组播流计算出一条新的P2MP路径(第二P2MP路径)。
总结上述场景一的方法流程来看,通过在P2MP路径上的叶子节点发生更新时,利用更新后的叶子节点对应的P2P路径以及原先的路径,即可获得一条新的P2MP路径,而无需重新计算整个P2MP路径,从而极大地降低了计算P2MP路径的复杂度,节省了计算P2MP路径的开销,提高了计算P2MP路径的效率。并且,避免每当叶子节点动态加入或者退出时都需要重新下发策略(policy)来生成P2MP路径,从而避免策略的频繁下发,节省传输策略的通信开销。
场景二、多个组播流的SLA需求相同且具有公共的叶子节点。
如果已经为组播流1计算出了P2MP路径,对于组播流2而言,如果组播流2的SLA需求与组播流1的SLA需求相同,而且组播流2具有和组播流1公共的叶子节点,例如组播流2的所有叶子节点刚好都是组播流1的叶子节点,或者组播流2的一部分叶子节点是组播流1的叶子节点而另一部分叶子节点不是组播流1的叶子节点,根节点采用本实施例提供的方法,能够复用组播流1的P2MP路径来计算出组播流2的P2MP路径,而无需重新为组播流2计算整个P2MP路径,因此极大地降低了计算P2MP路径的复杂度,节省了计算P2MP路径的开销,提高了计算P2MP路径的效率。
例如,结合上述图7所示方法来看,图7所示方法中第一P2MP路径为第二组播流(上一段举例中的组播流1)的转发路径。图7所示方法中n是指和第二组播流具有相同SLA需求的第一组播流(对应于上一段举例中的组播流2)的叶子节点数量,第二P2MP路径为第一组播流的转发路径,第二P2MP路径用于将第一组播流从根节点转发至n个叶子节点。第二组播流的SLA需求与第一组播流的SLA需求相同。
场景三、组播流的叶子节点为预设的叶子节点集合的子集,且组播流的SLA需求与预设的SLA需求相同。
具体地,预先设定一个叶子节点集合,并预先设定一个SLA需求,根据预设的叶子节点集合和预设的SLA需求提前建立一条P2MP路径。之后,对于任一条组播流而言,如果该组播流为预设的叶子节点集合的子集,且组播流的SLA需求与预设的SLA需求相同,通过本实施例提供的方法,能够复用提前建立的P2MP路径,而无需重新计算整个P2MP路径,从而极大地降低了计算P2MP路径的复杂度,提高了计算P2MP路径的效率。
可选地,预先设定多个SLA需求,根据多个SLA需求中的每个SLA需求以及预设的叶子节点集合提前建立P2MP路径,从而得到多条P2MP路径。并且,建立多条P2MP路径与多个SLA需求之间的对应关系。之后,对于任一条组播流而言,根据该组播流的SLA需求以及预先建立的对应关系,获取该组播流的SLA需求对应的提前建立的P2MP路径,再通过复用这条提前建立的P2MP路径从而获得该组播流的P2MP路径。
场景四、P2MP路径发生故障时切换P2MP路径。
如果P2MP路径中某条链路或者某个节点发生故障,利用本实施例提供的方法来切换P2MP路径时,根节点通过更新P2MP路径中经过故障点的P2P路径,从而获得更新后的P2P路径,而无需更新未经过故障点的P2P路径,也无需重新计算整个P2MP路径,因此有助于快速切换路径,提高了系统的稳定性,同时节省了更新P2MP路径的开销,提高了更新P2MP路径的效率。
例如,结合上述图7所示方法来看,以图7所示方法中第二P2MP路径发生故障为例,例如第二P2MP路径包括的第一P2P路径存在故障,根节点基于第二P2MP路径获得第三P2MP路径。
第一P2P路径是指上述n条P2P路径中的一条P2P路径。第一P2P路径存在故障包括而不限于第一P2P路径上一个或多个节点发生故障或者第一P2P路径经过的一条或多条链路发生故障。
根节点如何确定第一P2P路径存在故障包括多种实现方式。在一种可能的实现中,根节点对第二P2MP路径中每条P2P路径进行状态检测,根据状态检测的结果确定第一P2P路径存在故障。可选地,根节点采用单播技术中的状态检测机制对P2P路径进行状态检测。例如,根节点采用单播技术中的双向主动测量协议(two-way active measurementprotocol,TWAMP)、双向转发检测(bidirectional forwarding detection,BFD)、基于网际互连协议数据流的随路OAM性能测量(in-situ flow information telemetry,iFit)、操作维护管理(operations,administration,and maintenance,OAM)等方式,检测从本节点到第一P2P路径的尾节点的路径状态,从而确定第一P2P路径存在故障。在另一种可能的实现中,第一P2P路径的尾节点对第一P2P路径进行状态检测。当尾节点发现第一P2P路径发生故障时,尾节点向根节点发送通知消息,根节点根据尾节点的通知消息确定第一P2P路径存在故障。
第三P2MP路径是指切换后的P2MP路径。第三P2MP路径包括第一P2P路径的备路径以及n条P2P路径中第一P2P路径之外的P2P路径。也即是,在第三P2MP路径中,发生故障的P2P路径(第一P2P路径)切换为备路径,未发生故障的P2P路径无需切换。
在一些实施例中,切换后的路径是对故障点所在的P2P路径的备路径与其他P2P路径进行合并从而得到的。以如何获得上述第三P2MP路径的过程为例,当第一P2P路径发生故障时,根节点获取第一P2P路径的备路径,根节点对n条P2P路径中第一P2P路径之外的P2P路径与第一P2P路径的备路径进行合并,得到第三P2MP路径。具体地,在采用上述合并方式一时,根节点获取第一P2P路径的备路径的BitString、n条P2P路径中第一P2P路径之外的P2P路径的BitString;根节点基于第一P2P路径的备路径的BitString、n条P2P路径中第一P2P路径之外的P2P路径的BitString,获得第三P2MP路径对应的BitString。第三P2MP路径对应的BitString为第一P2P路径的备路径的BitString、n条P2P路径中第一P2P路径之外的P2P路径的BitString进行或操作的结果。在采用上述合并方式二时,根节点获取第一P2P路径的备路径的段列表、n条P2P路径中第一P2P路径之外的P2P路径的段列表;根节点基于第一P2P路径的备路径的段列表、n条P2P路径中第一P2P路径之外的P2P路径的段列表,获得第三P2MP路径对应的段列表,第三P2MP路径对应的段列表包括第一P2P路径的备路径的段列表中的SID以及n条P2P路径中第一P2P路径之外的P2P路径的段列表中的SID。
在一些实施例中,根节点基于组播策略(policy)获得第一P2P路径的备路径。在一种可能的实现中,对于n条P2P路径中每条P2P路径,组播策略不仅包括该P2P路径的主路径,还包括该P2P路径的备路径。例如,组播策略包括P2P路径的权重(weight),充当主路径的P2P路径的权重高于充当备路径的P2P路径的权重。当第一P2P路径故障后,根节点从组播策略中选择权重次高的P2P路径,得到第一P2P路径的备路径。
在一些实施例中,组播策略包括n条P2P路径中每条P2P路径的备路径对应的BitString或段列表。根节点从组播策略中获得第一P2P路径的备路径对应的BitString或段列表,进而根据BitString或段列表进行路径合并。
下面结合图8示出的网络拓扑对切换P2MP路径的方法举例说明。
如图8所示,当中间节点P2到中间节点P4之间的链路故障,则影响了从根节点R1到叶子节点L1的P2P路径以及从根节点R1到叶子节点L1的P2P路径。在这一情况下,根节点将叶子节点L1和叶子节点L2对应的路径<P1,P2,P4,L1,L2>切换成路径<P1’,P2’,P4’,L1,L2>。而不需要切换叶子节点L3对应的P2P路径、叶子节点L4对应的P2P路径、叶子节点L5对应的P2P路径,进而提高了系统的稳定性。
总结上述场景四中的方法流程来看,通过在P2MP路径中某个节点或者某条链路发生故障时,更新P2MP路径中经过故障点的P2P路径以获得更新后的P2P路径,实现了针对P2P路径的保护粒度,进而整个P2MP路径状态监测可利用现有单播技术。并且,由于P2MP路径发生故障时可复用故障前的路径,而无需重新计算整个P2MP路径,从而避免每当发生故障都需要重新下发策略来生成P2MP路径,从而避免策略的频繁下发,节省传输策略的通信开销以及计算P2MP路径的处理开销。
在一种可能的实现中,根节点对n条P2P路径进行合并,得到第二P2MP路径。换句话说,第二P2MP路径是由n条P2P路径合并后的路径。具体如何合并n条P2P路径包括多种实现方式,下面结合两种合并方式举例说明。上述场景一至场景四中的任一种场景下,均可以采用下面介绍的两种合并方式中的任一种合并方式。
合并方式一、根节点基于n条P2P路径的BitString合并n条P2P路径。
合并方式一应用在BIER-TE网络中。例如,第一P2MP路径的根节点是BIER-TE网络中的BFIR,P2P路径例如是从BFIR到BIER-TE网络中一个BFER的路径,n条P2P路径对应于BIER-TE网络中n个BFER,该n个BFER例如是n个支持BIER转发的网络设备。
在BIER-TE网络中,路径通过BitString表示。在合并n条P2P路径的过程中,根节点获取n条P2P路径中每条P2P路径对应的BitString;根节点基于n条P2P路径中每条P2P路径对应的BitString,获得第二P2MP路径对应的BitString。第二P2MP路径是从BFIR到n个BFER的路径。
P2P路径对应的BitString包括至少一个置位的比特,BitString每一个置位的比特表示P2P路径的一个目的节点、或者P2P路径中一个中间节点、或者P2P路径中两个相邻节点之间的邻接关系。置位的比特对应于本节点的BFR ID或者本节点上出接口的ID。可选地,置位比特标识的邻接关系是单向的邻接关系,即从本节点指向下一跳节点的邻接关系。n条P2P路径对应于n个BitString。可选地,n条P2P路径中每条P2P路径的BitString的长度相同。
如何获得n条P2P路径中每条P2P路径对应的BitString包括多种实现方式。在一些实施例中,控制器向根节点发送组播策略,组播策略包括每条P2P路径对应的BitString。根节点接收控制器发送的组播策略,从组播策略中获得每条P2P路径对应的BitString。可选地,组播策略包括一个或多个candidate path,每个candidate path对应于一条P2MP路径,每个candidate path包括一个或多个BitString。根节点首先从组播策略中获得第一P2MP路径对应的candidate path,再从第一P2MP路径对应的candidate path中获得n条P2P路径中每条P2P路径对应的BitString。在另一些实施例中,根节点通过静态配置的方式获得每条P2P路径对应的BitString。例如,网络管理员配置第一P2MP路径的标识与n条P2P路径中每条P2P路径对应的BitString之间的对应关系,根节点基于第一P2MP路径的标识以及预先配置的对应关系获得每条P2P路径对应的BitString。
第二P2MP路径对应的BitString包括多个置位的比特,BitString每一个置位的比特表示第二P2MP路径的一个目的节点、或者第二P2MP路径经过的一个中间节点、或者第二P2MP路径经过的两个相邻节点之间的邻接关系。可选地,第二P2MP路径对应的BitString的长度和n条P2P路径中每条P2P路径对应的BitString的长度相同。
第二P2MP路径对应的BitString为n条P2P路径包括的所有P2P路径对应的BitString进行或操作的结果。例如,第二P2MP路径对应的BitString中第i个比特位的值为第一个BitString中第i个比特位的值、第二个BitString中第i个比特位的值……第n个BitString中第i个比特位的值进行或操作的结果。
由于进行或操作获得第二P2MP路径对应的BitString,第二P2MP路径对应的BitString会保留n条P2P路径的BitString中所有BitString中置位的比特位,例如,对于n条P2P路径中第j条P2P路径的BitString中第i个比特位来说,如果第j条P2P路径的BitString中第i个比特位是置位的,那么第二P2MP路径对应的BitString中第i个比特位是置位的。由于置位的比特位标识了P2P路径经过的节点或链路,因此采用该合并方式能够使得合并后的P2MP路径包含合并前的n条P2P路径上的所有节点或链路。
下面结合图9所示的BIER-TE网络对如何采用图7所示方法计算P2MP路径举例说明。
图9是本申请实施例提供的一种BIER-TE网络的架构图。该BIER-TE网络包括BFR1、BFR2、BFR3……BFR17这17个BFR。
如图9所示,BFR1通过网络与BFR2连接。BFR1上预先配置有比特位P1。P1表示BFR1上连接BFR2的出接口,P1用于标识从BFR1到BFR2的邻接关系。BFR1的BIFT中保存有P1与转发至邻接BFR2的对应关系。
BFR2通过网络与BFR1、BFR3和BFR6连接。BFR2上预先配置有比特位P2、P3和P4。P2表示BFR2上连接BFR1的出接口,P2用于标识从BFR2到BFR1的邻接关系。P3表示BFR2上连接BFR3的出接口,P3用于标识从BFR2到BFR3的邻接关系。P4表示BFR2上连接BFR6的出接口,P4用于标识从BFR2到BFR6的邻接关系。BFR2的BIFT中保存有P2与转发至邻接BFR1的对应关系、P3与转发至邻接BFR3的对应关系、P4与转发至邻接BFR6的对应关系。
BFR3通过网络与BFR2、BFR4和BFR9连接。BFR3上预先配置有比特位P5、P6和P12。P5表示BFR3上连接BFR2的出接口,P5用于标识从BFR3到BFR2的邻接关系。P6表示BFR3上连接BFR4的出接口,P2用于标识从BFR3到BFR4的邻接关系。P12为BFR3上连接BFR9的出接口,P3用于标识从BFR3到BFR9的邻接关系。
BFR4通过网络与BFR3、BFR10和BFR11连接。BFR4上预先配置有比特位P7、P8和P10。P7表示BFR4上连接BFR3的出接口,P7用于标识从BFR4到BFR3的邻接关系。P8为BFR4上连接BFR10的出接口,P8用于标识从BFR4到BFR10的邻接关系。P10表示BFR4上连接BFR11的出接口,P10用于标识从BFR4到BFR11的邻接关系。
BFR9通过网络与BFR3、BFR12和BFR13连接。BFR9上预先配置有比特位P13和P14。P13表示BFR9上连接BFR3的出接口,P13用于标识从BFR9到BFR3的邻接关系。P14为BFR9上连接BFR12的出接口,P14用于标识从BFR9到BFR12的邻接关系。
BFR6通过网络与BFR2、BFR7和BFR8连接。BFR6上预先配置有比特位P15、P18和P24。P15表示BFR6上连接BFR2的出接口,P15用于标识从BFR6到BFR2的邻接关系。P18表示BFR6上连接BFR7的出接口,P18用于标识从BFR6到BFR7的邻接关系。P24表示BFR6上连接BFR8的出接口,P24用于标识从BFR6到BFR8的邻接关系。
BFR7通过网络与BFR6、BFR14和BFR15连接。BFR7上预先配置有比特位P19、P20和P22。P19表示BFR7上连接BFR6的出接口,P19用于标识从BFR7到BFR6的邻接关系。P20为BFR7上连接BFR14的出接口,P20用于标识从BFR7到BFR14的邻接关系。P22表示BFR7上连接BFR15的出接口,P22用于标识从BFR7到BFR15的邻接关系。
BFR8通过网络与BFR16和BFR17连接。BFR8上预先配置有比特位P25、P26和P28。P25表示BFR8上连接BFR6的出接口,P25用于标识从BFR8到BFR6的邻接关系。P26为BFR8上连接BFR16的出接口,P26用于标识从BFR8到BFR16的邻接关系。P28表示BFR8上连接BFR17的出接口,P28用于标识从BFR8到BFR17的邻接关系。
BFR10通过网络与BFR4连接。BFR10上配置有比特位P9和P30。P9表示BFR10上连接BFR4的出接口,P9用于标识从BFR10到BFR4的邻接关系。P30表示本节点(BFR10)。BFR10的BIFT中保存有P9与转发至邻接BFR4的对应关系、P30与本地解封装报文的对应关系。
BFR11通过网络与BFR4连接。BFR11上配置有比特位P11和P31。P11表示BFR11上连接BFR4的出接口,P11用于标识从BFR11到BFR4的邻接关系。P31表示本节点(BFR11)。BFR11的BIFT中保存有P11与转发至邻接BFR4的对应关系、P31与本地解封装报文的对应关系。
BFR12通过网络与BFR9连接。BFR12上配置有比特位P16和P32。P16表示BFR12上连接BFR9的出接口,P16用于标识从BFR12到BFR9的邻接关系。P32表示本节点(BFR12)。BFR12的BIFT中保存有P16与转发至邻接BFR9的对应关系、P32与本地解封装报文的对应关系。
BFR13通过网络与BFR9连接。BFR13上配置有比特位P17和P33。P17表示BFR13上连接BFR9的出接口,P17用于标识从BFR13到BFR9的邻接关系。P33表示本节点(BFR13)。BFR13的BIFT中保存有P17与转发至邻接BFR9的对应关系、P33与本地解封装报文的对应关系。
BFR14通过网络与BFR7连接。BFR14上配置有比特位P21和P34。P21表示BFR14上连接BFR7的出接口,P21用于标识从BFR14到BFR7的邻接关系。P34表示本节点(BFR14)。BFR14的BIFT中保存有P21与转发至邻接BFR7的对应关系、P34与本地解封装报文的对应关系。
BFR15通过网络与BFR7连接。BFR15上配置有比特位P23和P35。P23表示BFR15上连接BFR7的出接口,P23用于标识从BFR15到BFR7的邻接关系。P35表示本节点(BFR15)。BFR15的BIFT中保存有P23与转发至邻接BFR7的对应关系、P35与本地解封装报文的对应关系。
BFR16通过网络与BFR8连接。BFR16上配置有比特位P27和P36。P27表示BFR16上连接BFR8的出接口,P27用于标识从BFR16到BFR8的邻接关系。P36表示本节点(BFR16)。BFR16的BIFT中保存有P27与转发至邻接BFR8的对应关系、P36与本地解封装报文的对应关系。
BFR17通过网络与BFR8连接。BFR17上配置有比特位P29和P37。P29表示BFR17上连接BFR8的出接口,P29用于标识从BFR17到BFR8的邻接关系。P37表示本节点(BFR17)。BFR17的BIFT中保存有P29与转发至邻接BFR8的对应关系、P37与本地解封装报文的对应关系。
在拓扑如图9所示的BIER-TE网络中,BFR1为根节点(首节点/ingress节点),BFR10、BFR11、BFR12、BFR13、BFR14、BFR15、BFR16、BFR17为预设的叶子节点集合。SLA需求例如通过color1表示。控制器根据color1和叶子节点集合计算出的P2MP路径为<P2,P5,P7,P9,P11,P13,P16,P17,P15,P19,P21,P23,P25,P27,P29,P30,P31,P32,P33,P34,P35,P36,P37>。
控制器将P2MP路径按照叶子节点拆分成多条P2P路径。拆分得到的多条P2P路径具体如下表5所示。
表5
其中,P30、P31、P32……至P37表示节点,对应于BIER中BFER的BFR-ID。例如,P30的作用相当于BFR10的BFR ID。当BitString中与P30对应的比特位置位时表示报文的目的节点包括BFR10。P1、P2……至P29表示本节点上一个指定的出接口,相当于两个BFR的邻接关系的标识。例如,P3标识BFR2上用于连接BFR3的出接口,对应于BFR2上指向BFR3的邻接。当BitString中与P3对应的比特位置位时用于指示BFR2将报文转发给BFR3。例如,有组播流1,当BFR10、BFR12、BFR13和BFR15依次向BFR1发送加入消息,通过加入消息表示要接收组播流1时,组播流1的P2MP路径变化过程如图10所示。
一开始只有BFR10加入时,此时P2MP路径即为BFR1到BFR10的P2P路径。如图10所示,P2MP路径为<P2,P5,P7,P9,P30>,通过该P2MP路径转发的报文携带的BitString中节点P2、节点P5、节点P7、节点P9和节点P30对应的比特位置位。当BFR12加入时,BFR1将BFR10对应的P2P路径的BitString和BFR12对应的P2P路径的BitString相“或”,即保留BitString中已置位的比特位。如图10所示,BFR10对应的P2P路径为<P2,P5,P7,P9,P30>,BFR12对应的P2P路径为<P2,P5,P7,P11,P31>,BFR1对这两个P2P路径对应的BitString进行或操作后得到的BitString为<P2,P5,P7,P9,P13,P16,P30,P32>对应的BitString。路径<P2,P5,P7,P9,P13,P16,P30,P32>为BFR10和BFR12这两个叶子节点对应的P2MP路径,通过该路径转发的报文携带的BitString中节点P2、节点P5、节点P7、节点P9、节点P13、节点P16、节点P30和节点P32对应的比特位置位,即<P2,P5,P7,P9,P13,P16,P30,P32>对应的BitString中节点P2、节点P5、节点P7、节点P9、节点P13、节点P16、节点P30和节点P32对应的比特位置位。
BFR13和BFR15的加入过程与BFR12的加入过程类似。具体地,当BFR13加入时,BFR1将BFR10和BFR12对应的P2MP路径的BitString和BFR13对应的P2P路径的BitString进行或操作,得到BFR10、BFR12、BFR13这三个叶子节点对应的P2MP路径。如图10所示,BFR1对路径<P2,P5,P7,P9,P13,P16,P30,P32>对应的BitString与路径<P2,P5,P13,P17,P33>对应的BitString进行或操作,得到路径<P2,P5,P7,P9,P13,P16,P17,P30,P32,P33>对应的BitString。
当BFR15加入时,BFR1将BFR10、BFR12、BFR13对应的P2MP路径的BitString和BFR15对应的P2P路径的BitString进行或操作,得到BFR10、BFR12、BFR13和BFR15这四个叶子节点对应的P2MP路径。如图10所示,BFR1对路径<P2,P5,P7,P9,P13,P16,P17,P30,P32,P33>对应的BitString与路径<P2,P15,P19,P23,P35>对应的BitString进行或操作,得到路径<P2,P5,P7,P9,P13,P15,P16,P17,P19,P23,P30,P32,P33,P35>对应的BitString。
当BFR10、BFR12、BFR13和BFR15都加入为组播流的叶子节点后,BFR1上组播组(S,G)对应的BFR-id列表包括BFR10、BFR12、BFR13和BFR15这四个BFR的BFR ID。如果BFR13向BFR1发送退出消息,则BFR1从组播组(S,G)对应的BFR-ID列表中删除BFR13的BFR ID,更新后的BFR-id列表包括BFR10、BFR12和BFR15这三个BFR的BFR ID。BFR1重新更新P2MP路径。
合并方式二、根节点基于n条P2P路径的段列表合并n条P2P路径。
合并方式二应用在SR-P2MP网络中。例如,第一P2MP路径的根节点是SR-P2MP网络中的头节点,P2P路径是从头节点到SR-P2MP网络中一个尾节点(或者说endpoint)的路径,n条P2P路径对应于SR-P2MP网络中n个尾节点,该n个尾节点例如是n个支持SR的网络设备。
在SR-P2MP网络中,路径通过段列表表示。在合并n条P2P路径的过程中,根节点获取n条P2P路径中每条P2P路径对应的段列表;根节点基于n条P2P路径中每条P2P路径对应的段列表,获得第二P2MP路径对应的段列表。第二P2MP路径是从头节点到n个尾节点的路径。
P2P路径对应的段列表包括多个有序排列的SID,段列表中每一个SID表示P2P路径经过的一个节点或者一条链路。段列表中SID的排列顺序表示P2P路径的方向,例如段列表中的SID按照从头节点到尾节点的顺序依次排列或者按照从尾节点到头节点的顺序依次排列。n条P2P路径对应于n个段列表。可选地,P2P路径对应的段列表中的每个SID均为组播SID。组播SID的具体概念可参考本文中术语概念解释部分(1)的介绍。
可选地,P2P路径对应的段列表包括P2P路径上所有节点的SID。或者,P2P路径对应的段列表包括P2P路径中部分节点的SID,例如段列表中不包括头节点的SID,或者段列表中不包括部分中间节点的SID。
如何获得n条P2P路径中每条P2P路径对应的段列表包括多种实现方式。在一些实施例中,控制器向根节点发送组播策略,组播策略包括n条P2P路径中每条P2P路径对应的段列表。根节点接收控制器发送的组播策略,从组播策略中获得每条P2P路径对应的段列表。在另一些实施例中,根节点通过静态配置的方式获得每条P2P路径对应的段列表。例如,网络管理员配置第一P2MP路径的标识与n条P2P路径中每条P2P路径对应的段列表之间的对应关系,根节点基于第一P2MP路径的标识以及预先配置的对应关系获得每条P2P路径对应的段列表。
第二P2MP路径对应的段列表用于表示第二P2MP路径。第二P2MP路径对应的段列表
包括多个有序排列的SID,段列表中每一个SID表示第二P2MP路径经过的一个节点或者一
条链路。具体地,第二P2MP路径对应的段列表包括n条P2P路径包括的所有P2P路径对应
的段列表中的SID。可选地,第二P2MP路径对应的段列表中每个SID均为组播SID。
在一些实施例中,第二P2MP路径对应的段列表按照P2MP树的层级编码,第二P2MP路径对应的段列表中SID的排列顺序表示P2MP树的层级顺序。
可选地,第二P2MP路径对应的段列表中的SID按照从P2MP树的第一层(如根节点)至P2MP树的最后一层(如上述n个叶子节点)依次排列。P2MP树中下一层节点的SID排在上一层节点的SID之后。例如,第二P2MP路径对应的段列表中第一个SID是根节点(第一层节点)的SID,然后是根节点的所有子节点(第二层节点)的SID,然后是根节点的第一个子节点的子树(第三层节点)的SID序列,然后是根节点的第二个子节点的子树(第三层节点)的SID,以此类推,直至最后一个子节点的子树的SID。
可替代地,第二P2MP路径对应的段列表采用逆序的方式编码,第二P2MP路径对应的段列表中的SID按照从P2MP树的最后一层(如上述n个叶子节点至)P2MP树的第一层(如根节点)依次排列。P2MP树中下一层节点的SID排在上一层节点的SID之前。
第二P2MP路径对应的段列表的编码结构的更多细节可参考上文中术语解释部分(3)的描述。
下面结合图11所示的SR P2MP网络对如何采用图7所示方法计算P2MP路径举例说明。
图11是本申请实施例提供的一种SR P2MP网络的架构图。该SR P2MP网络包括根节点R1、中间节点P1、中间节点P2、中间节点P3、中间节点P4、中间节点P5、中间节点P6、中间节点P7、叶子节点L1、叶子节点L2、叶子节点L3、叶子节点L4、叶子节点L5、叶子节点L6、叶子节点L7和叶子节点L8。根节点R1通过网络与中间节点P1连接。中间节点P1通过网络与中间节点P2和中间节点P3连接。中间节点P2通过网络与中间节点P4和中间节点P5连接。中间节点P3通过网络与中间节点P6和中间节点P7连接。中间节点P4通过网络与叶子节点L1和叶子节点L2连接。中间节点P5通过网络与叶子节点L3和叶子节点L4连接。中间节点P6通过网络与叶子节点L5和叶子节点L6连接。中间节点P7通过网络与叶子节点L7和叶子节点L8连接。
在拓扑如图11所示的SR P2MP的网络中,控制器根据预设的SLA需求和预设的叶子节点集合计算出P2MP路径<P1,P2,P3,P4,P5,L1,L2,L3,L4,P6,P7,L5,L6,L7,L8>,通过该P2MP路径转发的报文携带的段列表中包含节点P1、节点P2、节点P3、节点P4、节点P5、节点L1,节点L2、节点L3、节点L4、节点P6、节点P7、节点L5、节点L6、节点L7、节点L8这些节点中每一个节点的SID。控制器根据叶子节点将P2MP路径拆分成多个P2P路径。拆分得到的多条P2P路径具体如下表6所示。
表6
P2P路径 | 首节点 | 尾节点 |
<P1,P2,P4,L1> | R1 | L1 |
<P1,P2,P4,L2> | R1 | L2 |
<P1,P2,P5,L3> | R1 | L3 |
<P1,P2,P5,L4> | R1 | L4 |
<P1,P3,P6,L5> | R1 | L5 |
<P1,P3,P6,L6> | R1 | L6 |
<P1,P3,P7,L7> | R1 | L7 |
<P1,P3,P7,L8> | R1 | L8 |
当存在组播流2,当叶子节点L1、叶子节点L2、叶子节点L5、叶子节点L6依次向根节点R1发送加入消息时,组播流2的组播组对应的P2MP路径变化过程如图12所示。SR P2MP网络中叶子节点加入时更新P2MP路径的过程与BIER-TE网络中叶子节点加入时更新P2MP路径的过程的基本流程一致,而在具体合并算法方面有区别。
根节点R1在基于两个段列表对两个P2P路径进行合并时,由于两个P2P路径的根节点相同,则根节点R1比较两个P2P路径中根节点的子节点是否相同。如果两个P2P路径中根节点的子节点相同,则根节点R1继续比较两个P2P路径中子节点的子节点是否相同。如果两个P2P路径中根节点的子节点不相同,则根节点R1将当前子节点以及当前子节点的子树都添加到第一个段列表上。其中,节点例如是SR P2MP网络中一个支持SR的设备,段列表中每一个SID表示一个节点。
图12是本申请实施例提供的一种合并段列表的示意图。如图12所示,头节点R1具有与尾节点L1、尾节点L2、尾节点L5或尾节点L6之间的会话。头节点R1上保存了到达尾节点L1的P2P路径<P1,P2,P4,L1>对应的段列表、到达尾节点L2的P2P路径<P1,P2,P4,L2>对应的段列表、到达尾节点L5的P2P路径<P1,P3,P6,L5>对应的段列表和到达尾节点L6的P2P路径<P1,P3,P6,L6>对应的段列表。下面,对图12对应的段列表合并过程进行介绍。
首先,尾节点L1向头节点R1发送了加入消息,此时转发路径为<P1,P2,P4,L1>。在尾节点L1加入组播后,尾节点L2向头节点R1发送了加入消息。头节点R1接收到尾节点L2的加入消息后,头节点R1对尾节点L1对应的路径<P1,P2,P4,L1>与尾节点L2对应的路径<P1,P2,P4,L2>进行合并。段列表或者说路径的合并过程包括:头节点R1从第二个节点开始查找是否存在当前节点,如果存在则继续查找下一个节点;不存在则插入当前节点。例如,头节点R1从路径<P1,P2,P4,L2>中第二个节点P2开始,查找路径<P1,P2,P4,L1>中是否存在节点P2。头节点R1从路径<P1,P2,P4,L1>中查找到节点P2,则头节点R1从路径<P1,P2,P4,L2>中获得第三个节点P4,继续查找路径<P1,P2,P4,L1>中是否存在节点P4。头节点R1从路径<P1,P2,P4,L1>中查找到节点P4,则头节点R1从路径<P1,P2,P4,L2>中获得第四个节点L2,继续查找路径<P1,P2,P4,L1>中是否存在节点L2。头节点R1从路径<P1,P2,P4,L1>未查找到节点L2,则向路径<P1,P2,P4,L1>插入节点L2得到路径<P1,P2,P4,L1,L2>,路径<P1,P2,P4,L1,L2>表示从头节点R1到达节点L1和节点L2的P2MP路径。路径<P1,P2,P4,L1,L2>的段列表符合P2MP树的层级结构编码结构,如P4下的两个节点(L1、L2)的SID都排在P4的SID之后。头节点获得路径<P1,P2,P4,L1,L2>之后,当接收到组播流2的组播报文时,头节点向组播报文中添加路径<P1,P2,P4,L1,L2>对应的段列表,使得组播报文能够通过段列表转发至节点L1和节点L2。
尾节点L1和尾节点L2加入组播后,尾节点L5向头节点R1发送了加入消息。头节点R1接收到尾节点L5的加入消息后,头节点R1对尾节点L1和尾节点L2对应的路径<P1,P2,P4,L1,L2>和尾节点L5对应的路径<P1,P3,P6,L5>进行合并。段列表或者说路径的合并过程包括:将第二个节点P3和当前P1下的子节点进行比较,如果查找到则继续比较下一层节点;如果未查找到则该节点插入到P1后做为子节点,根据已有子节点P2的SID中子树的数量,跳过P2的子树,将P3的子树插入。具体地,由于路径<P1,P2,P4,L1,L2>和路径<P1,P3,P6,L5>中根节点相同,则从子节点开始比较。头节点从路径<P1,P3,P6,L5>中获得节点P1的子节点P3,而路径<P1,P2,P4,L1,L2>中节点P1的子节点为P2,由于当前子节点P3不属于路径<P1,P2,P4,L1,L2>中节点P1的子节点,因此头节点将节点P3插入到路径<P1,P2,P4,L1,L2>中。插入节点P3的具体方式是,向路径<P1,P2,P4,L1,L2>中节点P1已有的子节点P2之后插入节点P3,使得P3作为节点P1的子节点。并且,头节点从路径<P1,P3,P6,L5>中获得节点P3的子树<P6,L5>,向路径<P1,P2,P4,L1,L2>中插入子树<P6,L5>。插入子树<P6,L5>的具体方式是,从路径<P1,P2,P4,L1,L2>中节点P1已有的子节点P2的SID的N-branches字段中,获得子节点P2的子树数量,根据子节点P2的子树数量,跳过子节点P2的子树,将节点P3的子树<P6,L5>插入到整个树的后面,合并后的P2MP路径为<P1,P2,P3,P4,L1,L2,P6,L5>。路径<P1,P2,P3,P4,L1,L2,P6,L5>符合P2MP树的层级结构编码结构,例如P1是P2MP树中第一层节点,P2和P3是P2MP树中第二层节点,P4、L1和L2是P2的子树(或者说P2下层的节点),P6、L5和L6是P3的子树(或者说P3下层的节点),而路径<P1,P2,P3,P4,L1,L2,P6,L5>对应的段列表中按照从前到后的顺序依次是P1的SID、P2和P3中每一个节点的SID、P4、L1和L2中每一个节点的SID、P4、L1和L2中每一个节点的SID、P6、L5和L6中每一个节点的SID。头节点获得路径<P1,P2,P3,P4,L1,L2,P6,L5>之后,当接收到组播流2的组播报文时,头节点向组播报文中添加路径<P1,P2,P3,P4,L1,L2,P6,L5>对应的段列表,使得组播报文能够通过该段列表转发至节点L1、节点L2和节点L5。
尾节点L1、尾节点L2和尾节点L5加入组播后,尾节点L6向头节点R1发送了加入消息。头节点R1接收到尾节点L6的加入消息后,头节点R1对尾节点L1、尾节点L2和尾节点L5对应的路径<P1,P2,P3,P4,L1,L2,P6,L5>和尾节点L6对应的路径<P1,P3,P6,L6>进行合并。在合并段列表时,由于路径<P1,P3,P6,L6>中P1、P3、P6均在路径<P1,P2,P3,P4,L1,L2,P6,L5>中查找到,而路径<P1,P3,P6,L6>中L6没有在路径<P1,P2,P3,P4,L1,L2,P6,L5>查找到,因此将L6插入到路径<P1,P2,P3,P4,L1,L2,P6,L5>中,得到路径<P1,P2,P3,P4,L1,L2,P6,L5,L6>。
在一些实施例中,上述第一P2MP路径和/或n条P2P路径是根节点基于组播策略获得的。
组播策略用于指示满足SLA需求的P2MP路径。可选地,根节点上保存有一个或多个组播策略,每一个组播策略对应于一种SLA需求。在为第一组播流确定P2MP路径的过程中,根节点根据第一组播流的SLA需求,从保存的一个或多个组播策略中,查找与第一组播流的SLA需求匹配的组播策略。根节点基于与第一组播流的SLA需求匹配的组播策略,获得n条P2P路径。可选地,组播策略还包括颜色,颜色表示SLA需求。
在一些实施例中,组播策略的内容包括多条P2P路径的信息,该多条P2P路径是通过对预先建立的P2MP路径进行拆分得到的。当需要为组播流确定P2MP路径时,再对组播策略中的P2P路径进行合并,从而得到包含这条组播流接收者的P2MP路径。例如,结合图7所示方法来看,由控制器对上述第一P2MP路径进行拆分,得到m条P2P路径。控制器生成包含m条P2P路径的信息的组播策略,控制器将组播策略发至根节点。根节点在根据第一组播流的SLA需求查找到该组播策略之后,根节点基于用于接收第一组播流的n个叶子节点,从组播策略的m条P2P路径中查找n个叶子节点对应的n条P2P路径,对n条P2P路径进行合并,得到用于转发第一组播流的第二P2MP路径。
可选地,根节点基于控制器下发的方式获得组播策略。具体地,控制器生成并向根节点发送组播策略,根节点接收来自控制器的所组播策略。或者,根节点基于静态配置的方式获得组播策略。具体地,根节点基于配置操作获得组播策略。
下面对组播策略的结构进行具体说明。
组播策略包括n条P2P路径的信息。例如,组播策略包括n条P2P路径中每条P2P路径对应的BitString或段列表。
例如,针对BIER-TE场景,对于n条P2P路径中每条P2P路径,组播策略中包括该P2P路径的一个或多个BitString。可选地,组播策略包括每个BitString对应的权重。权重用于表示对应的BitString的角色是主用还是备份。例如,对于从头节点到叶子节点A的P2P路径,组播策略包括该P2P路径的多个BitString以及每个BitString的权重,权重最高的BitString表示从头节点到叶子节点A的主用P2P路径,权重次高的BitString表示从头节点到叶子节点A的备份P2P路径。
又如,针对SR-P2MP场景,对于n条P2P路径中每条P2P路径,组播策略中包括该P2P路径的一个或多个段列表。可选地,组播策略包括每个段列表对应的权重。权重用于表示对应的段列表的角色是主用还是备份。例如,对于从头节点到叶子节点A的P2P路径,组播策略包括该P2P路径的多个段列表以及每个段列表的权重,权重最高的段列表表示从头节点到叶子节点A的主用P2P路径,权重次高的段列表表示从头节点到叶子节点A的备份P2P路径。
可选地,组播策略还包括n条P2P路径中每条P2P路径对应的SLA需求或者第一P2MP路径对应的SLA需求。
可选地,组播策略还包括第一P2MP路径的根节点的标识或者n条P2P路径中每条P2P路径的头节点的标识。
在一种可能的实现中,组播策略包括SLA需求(通过color或者其他数据表示)、至少一条候选路径(candidate path)、每条候选路径的优先级(preference)、至少一个BitString(或段列表)以及每个BitString(或段列表)的权重。其中,优先级最高的candidate path为组播策略中充当主路径的P2MP路径,优先级次高的candidate path为组播策略中充当备路径的P2MP路径。每条candidate path下包括多个P2P路径的BitString或段列表。同一条candidate path下不同BitString或段列表对应的端点(endpoint)可能相同也可能不同。以BitString为例,不同endpoint对应的BitString表示从头节点到不同叶子节点的P2P路径。相同endpoint对应的不同BitString中权重最高的BitString为主用P2P路径的BitString。
结合图7所示方法来看,在组播策略采用上述结构的情况下,根节点获得n条P2P路径的具体过程包括:根节点基于第一组播流的SLA需求,从根节点保存的多个组播策略中,查找SLA需求与第一组播流的SLA需求匹配的组播策略。根节点从与第一组播流的SLA需求匹配的组播策略中,选取优先级最高的candidate path。根节点根据n个叶子节点中每个叶子节点的标识,从优先级最高的candidate path中查找端点与叶子节点的标识相同的路径,得到n条P2P路径。其中,查找组播策略的过程例如包括:以color为索引,根据第一组播流的SLA需求对应的color与组播策略中的color进行匹配,从而查找组播策略。
下面结合图13对组播策略的结构举例说明。
图13是本申请实施例提供的一种组播策略的结构示意图。组播策略的定义与单播policy的定义有类似之处。单播policy的定义一般包括三个要素:头端、color和尾端(endpoint)。可选地,组播策略的定义同样包括三个要素:根节点、color和endpoint,组播策略中endpoint无意义,例如组播策略中endpoint定义为0.0.0.0/::。或者,组播策略的定义包括两个要素:根节点和color。
组播策略中每个candidate path代表一个P2MP路径。组播策略中不同candidatepath代表的P2MP路径具有主用和备份的关系。组播策略中preference值最大的candidatepath为主路径。每一个candidate path下面有多个或一个P2P路径。P2P路径有两种表示方式:BitString和段列表。对比单播policy中段列表,组播策略中含有多个P2P路径。组播策略中P2P路径是从头节点到叶子节点的路径。组播策略中P2P路径的endpoint存在不同的情况。一种情况是,两条P2P路径具有不同的endpoint,例如这两条P2P路径是从头节点到两个不同的叶子节点的路径。另一种情况是,两条P2P路径具有相同的endpoint,例如这两条P2P路径中一条P2P路径是主路径,另一条P2P路径是备路径。组播策略下其他candidate path可作为主路径的备路径(P2MP路径)。
利用图13所示的组播策略,由于一个candidate path下面存在多条相同endpoint的P2P路径,当一条P2P路径发生故障时,通过从当前policy中candidate path中选择weight值次大的P2P路径,即可获得P2P路径的备路径,进而将原先的P2P路径切换为备路径。
下面结合图14示出的应用场景对如何使用本实施例实现无状态P2MP转发路径计算和控制举例说明。
图14是本申请实施例提供的一种应用场景示意图。图14示出的应用场景包括控制器、组播源S1、头节点A、中间节点B、中间节点C、中间节点E、叶子节点D、叶子节点F、组播接收者1和组播接收者2。其中,组播源S1通过网络和头节点A连接,头节点A通过网络和中间节点B连接,中间节点B通过网络和中间节点C、中间节点E连接,中间节点C通过网络和叶子节点D、叶子节点F连接,叶子节点D通过网络和组播接收者1连接,叶子节点F通过网络和组播接收者2连接。
图14是以BIER-TE场景为例进行说明的,上述头节点A、中间节点B、中间节点C、中间节点E、叶子节点D、叶子节点F中的每一个节点均为BFR。叶子节点D和叶子节点F上会配置本节点的BFR ID。其中,叶子节点D的BFR ID为2。叶子节点F的BFR ID为3。
控制器根据预设的SLA需求和预设的叶子节点集合1计算出P2MP路径。预设的SLA需求可在控制器上配置。预设的叶子节点集合可在控制器上配置,或者在叶子节点(如图14中的叶子节点D和叶子节点F)上配置,由叶子节点通过BGP-LS协议上报控制器。例如,如图14所示,叶子节点D通过BGP-LS协议向控制器上报叶子节点D的BFR ID(即2),叶子节点F通过BGP-LS协议向控制器上报叶子节点F的BFR ID(即3)。控制器从叶子节点D和叶子节点F分别接收叶子节点D的BFR ID和叶子节点F的BFR ID,控制器根据叶子节点D的BFR ID和叶子节点F的BFR ID,确定预设的叶子节点集合包括叶子节点D和叶子节点F。
控制器将计算出来的P2MP路径下发到头节点(如图14中的头节点A)。控制器可通过BGP或者PECP下发P2MP路径。或者,直接在头节点配置P2MP路径的信息。控制器将计算出来的P2MP路径拆分成多条头节点到叶子节点的P2P路径,如图14中从头节点A到叶子节点D的P2P路径以及从头节点A到叶子节点F的P2P路径。此外,头节点上可静态配置组播组和SLA需求的对应关系。或者,控制器向头节点下发组播组和SLA需求的对应关系。头节点基于组播组和SLA需求的对应关系,可以根据组播组对应的SLA需求找到对应的组播策略。
对于组播流1来说,当组播流1的组播组发生成员加入时,叶子节点(egress节点)会向头节点(ingress节点)发送加入消息。例如,结合图14来看,当组播接收者1想要收到组播组G1的组播数据时,组播接收者1会向叶子节点D发送报告消息,然后叶子节点D向头节点A发送加入消息。当组播接收者2想要收到组播组G1的组播数据时,组播接收者2会向叶子节点F发送报告消息,然后叶子节点F向头节点A发送加入消息。
其中,组播接收者发送的报告消息例如为IGMP成员关系报告报文(Membershipreport message),该报告消息例如为图14中的report(*,G1),“*”代表任意组播源,G1代表组播组。叶子节点发送的加入消息可简化表示为join(S,G,leaf<BFR ID>),其中S表示组播源,G表示组播组,(S,G)表示组播源为S的组播组G。leaf<BFR ID>表示叶子节点的BFR ID。叶子节点D发送的加入消息包括组播源S1的标识、组播组G1的标识和叶子节点D的BFR ID(2)。叶子节点F发送的加入消息包括组播源S1的标识、组播组G1的标识和叶子节点F的BFRID(3)。
头节点(ingress节点)接收到叶子节点(egress节点)发送的加入消息后,头节点根据加入消息更新本地的BFR ID列表。头节点根据更新后的BFR ID列表,从组播策略中preference值最大的candidate path下选择weight值最大的ingress节点到egress节点的P2P路径,再将多个P2P路径合并成P2MP路径(具体合并方法可参考图7实施例中的描述)。头节点将P2MP路径下到该(S,G)的转发表,指导组播报文转发。
BFR ID列表包括一个组播流的所有目的叶子节点的BFR ID。针对叶子节点D加入的场景,头节点更新BFR ID列表的过程包括:头节点基于叶子节点D发送的加入消息,获得加入消息携带的组播源S1的标识、组播组G1的标识和叶子节点D的BFR ID。头节点查找组播源S1、组播组G1对应的BFR ID列表,向组播源S1、组播组G1对应的BFR ID列表中添加叶子节点D的BFR ID。同理地,针对叶子节点F加入的场景,头节点基于叶子节点F发送的加入消息,获得加入消息携带的组播源S1的标识、组播组G1的标识和叶子节点F的BFR ID。头节点查找组播源S1、组播组G1对应的BFR ID列表,向组播源S1、组播组G1对应的BFR ID列表中添加叶子节点F的BFR ID。
BFR ID列表中每一个BFR ID用于选择出一条P2P路径。具体地,在基于BFR ID列表选择P2P路径的过程中,头节点首先根据组播流1的SLA需求对应的color,找到该color匹配的组播策略,再从组播策略中选取preference最大的candidate path,再以BFR ID列表中每个叶子节点的BFR-ID为索引,从candidate path中查找P2P路径中endpoint与叶子节点的BFR-ID相同的路径,进而对查找到的P2P路径进行合并。
同理地,如果叶子节点D后续退出组播,那么叶子节点D会向头节点发送离开消息,离开消息包括组播源S1的标识、组播组G1的标识和叶子节点D的BFR ID。头节点接收到叶子节点D的离开消息后,头节点会从BFR ID列表中删除叶子节点D的BFR ID,从而更新BFR ID列表。头节点更新BFR ID列表后,头节点根据更新后的BFR ID列表中的BFR ID,从组播策略中获得BFR ID对应的多条P2P路径,对获得的多条P2P路径进行合并,得到新的不经过叶子节点D的P2MP路径。
以上以BIER-TE场景为例描述了P2MP路径的计算和控制方法,该方法也能应用在SR P2MP场景下。在SR P2MP场景下,上述BFR ID可替换为SID(例如组播SID)。头节点选择P2P路径的步骤中,根据BFR-ID查找P2P路径可替换为根据SID查找P2P路径。
图15是本申请实施例提供的一种转发路径的确定装置600的结构示意图。装置600设于第一P2MP路径的根节点,装置600包括获取单元601和处理单元602。获取单元601用于支持装置600执行图7中S201。处理单元602用于支持装置600执行图7中S202。可选地,装置600还包括接收单元,接收单元用于支持装置600接收第一组播流。可选地,装置600还包括发送单元,发送单元用于支持装置600将第一组播流转发至所述n个叶子节点。
可选地,结合图1所示的应用场景来看,图15所示的装置600设于图1中的根节点R上。装置600用于支持图1中的根节点R根据到达叶子节点L1、叶子节点L2、叶子节点L3和叶子节点L4的一条P2MP路径,确定到达叶子节点L1、叶子节点L2、叶子节点L3和叶子节点L4中至少两项的另一条P2MP路径。
可选地,结合图4所示的应用场景来看,图15所示的装置600设于图4中的BFR1上。
可选地,结合图5所示的应用场景来看,图15所示的装置600设于图5中的R1上。装置600用于支持图5中的根节点R1在叶子节点L3加入组播时,根据组播流3原始的到达叶子节点L1和叶子节点L2的路径,确定组播流3的到达叶子节点L1、叶子节点L2和叶子节点L3的一条新的路径。
可选地,结合图6所示的应用场景来看,图15所示的装置600设于图6中的R1上。例如,装置600用于支持图6中的根节点R基于到达叶子节点L1至叶子节点L8的P2MP路径,为第一组播流确定到达叶子节点L1至叶子节点L4的P2MP路径。
可选地,结合图7所示的方法流程来看,图15所示的装置600用于执行图7所示方法流程。
可选地,结合图8所示的应用场景来看,图15所示的装置600设于图8中的根节点R1上。例如,装置600用于支持图8中的根节点R1在节点P2和节点P4之间的链路发生故障时,将P2MP路径中到达叶子节点L1和叶子节点L2的两条P2P路径分别切换为对应的备路径。
可选地,结合图9所示的应用场景来看,图15所示的装置600设于图9中BIER-TE网络的入口节点BFR1上。例如,装置600用于支持图9中的节点BFR1根据包含BFR10、BFR11至BFR17的P2MP路径,为目的叶子节点为BFR10、BFR11和BFR12的组播流确定出到达BFR10、BFR11和BFR12的P2MP路径。
可选地,结合图11所示的应用场景来看,图15所示的装置600设于图11中的SRP2MP网络中入口节点R1上。例如,装置600用于支持图11中的入口节点R1根据包含节点L1、L2至L8的P2MP路径,为目的叶子节点为L1、L2、L3和L4的组播流确定出到达L1、L2、L3和L4的P2MP路径。
可选地,结合图14所示的应用场景来看,图15所示的装置600设于图14中的头节点A上。
图15所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
装置600中的各个单元全部或部分地通过软件、硬件、固件或者其任意组合来实现。
在采用软件实现的情况下,例如,上述处理单元602和获取单元601是由图16中的至少一个处理器701读取存储器702中存储的程序代码后,生成的软件功能单元来实现。
在采用硬件实现的情况下,例如,图15中上述各个单元由路由设备中的不同硬件分别实现,例如处理单元602由图16中的至少一个处理器701中的一部分处理资源(例如多核处理器中的一个核或两个核)实现,而获取单元601由图16中至少一个处理器701中的其余部分处理资源(例如多核处理器中的其他核),或者采用现场可编程门阵列(field-programmable gate array,FPGA)、或协处理器等可编程器件来完成。接收单元和发送单元(图15中未示出)由图16中的网络接口703实现。
在采用软件硬件相结合的方式来实现的情况下,例如,处理单元602由硬件可编程器件实现,而获取单元601是由CPU读取存储器中存储的程序代码后,生成的软件功能单元。
下面对上述方法实施例中根节点的基本硬件结构举例说明。
图16是本申请实施例提供的一种路由设备700的结构示意图。图16示出的路由设备700可以提供为上述方法实施例中的根节点。路由设备700包括至少一个处理器701、存储器702以及至少一个网络接口703。
可选地,结合图1所示的应用场景来看,图16所示的路由设备700为图1中的根节点R。
可选地,结合图4所示的应用场景来看,图16所示的路由设备700为图4中的BFR1。
可选地,结合图5所示的应用场景来看,图16所示的路由设备700为图5中的R1。
可选地,结合图6所示的应用场景来看,图16所示的路由设备700为图6中的R1。
可选地,结合图7所示的方法流程来看,图16所示的路由设备700用于执行图7所示方法流程。
可选地,结合图8所示的应用场景来看,图16所示的路由设备700为图8中的根节点R1。
可选地,结合图9所示的应用场景来看,图16所示的路由设备700为图9中BIER-TE网络的入口节点BFR1。
可选地,结合图11所示的应用场景来看,图16所示的路由设备700为图11中的SRP2MP网络中入口节点R1。
可选地,结合图14所示的应用场景来看,图16所示的路由设备700为图14中的头节点A。
可选地,结合图15所示的转发路径的确定装置600来看,图15中的装置600设于图16中的路由设备700上。装置600中的处理单元602和获取单元601通过图16中的处理器701实现。装置600中的接收单元和发送单元(图16中未示出)通过图16中的网络接口703实现。
处理器701例如是通用中央处理器(central processing unit,CPU)、网络处理器(network processer,NP)、图形处理器(graphics processing unit,GPU)、神经网络处理器(neural-network processing units,NPU)、数据处理单元(data processing unit,DPU)、微处理器或者一个或多个用于实现本申请方案的集成电路。例如,处理器701包括专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。PLD例如是复杂可编程逻辑器件(complexprogrammable logic device,CPLD)、现场可编程逻辑门阵列(field-programmable gatearray,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合。
存储器702例如是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其它类型的静态存储设备,又如是随机存取存储器(random access memory,RAM)或者可存储信息和指令的其它类型的动态存储设备,又如是电可擦可编程只读存储器(electrically erasable programmable read-only Memory,EEPROM)、只读光盘(compactdisc read-only memory,CD-ROM)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备,或者是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。可选地,存储器702独立存在,并通过内部连接704与处理器701相连接。或者,可选地存储器702和处理器701集成在一起。
网络接口703使用任何收发器一类的装置,用于与其它设备或通信网络通信。网络接口703例如包括有线网络接口或者无线网络接口中的至少一项。其中,有线网络接口例如为以太网接口。以太网接口例如是光接口,电接口或其组合。无线网络接口例如为无线局域网(wireless local area networks,WLAN)接口,蜂窝网络网络接口或其组合等。
在一些实施例中,处理器701包括一个或多个CPU,如图16中所示的CPU0和CPU1。
在一些实施例中,路由设备700可选地包括多个处理器,如图16中所示的处理器701和处理器705。这些处理器中的每一个例如是一个单核处理器(single-CPU),又如是一个多核处理器(multi-CPU)。这里的处理器可选地指一个或多个设备、电路、和/或用于处理数据(如计算机程序指令)的处理核。
在一些实施例中,路由设备700还包括内部连接704。处理器701、存储器702以及至少一个网络接口703通过内部连接704连接。内部连接704包括通路,在上述组件之间传送信息。可选地,内部连接704是单板或总线。可选地,内部连接704分为地址总线、数据总线、控制总线等。
在一些实施例中,路由设备700还包括输入输出接口706。输入输出接口706连接到内部连接704上。
可选地,处理器701通过读取存储器702中保存的程序代码710实现上述实施例中的方法,或者,处理器701通过内部存储的程序代码实现上述实施例中的方法。在处理器701通过读取存储器702中保存的程序代码710实现上述实施例中的方法的情况下,存储器702中保存实现本申请实施例提供的方法的程序代码。
处理器701实现上述功能的更多细节请参考前面各个方法实施例中的描述,在这里不再重复。
参见图17,图17是本申请实施例提供的一种路由设备的结构示意图。图17示出的路由设备800可以提供为上述方法实施例中的根节点。路由设备800包括:主控板810和接口板830。
可选地,结合图1所示的应用场景来看,图17所示的路由设备800为图1中的根节点R。
可选地,结合图4所示的应用场景来看,图17所示的路由设备800为图4中的BFR1。
可选地,结合图5所示的应用场景来看,图17所示的路由设备800为图5中的R1。
可选地,结合图6所示的应用场景来看,图17所示的路由设备800为图6中的R1。
可选地,结合图7所示的方法流程来看,图17所示的路由设备800用于执行图7所示方法流程。
可选地,结合图8所示的应用场景来看,图17所示的路由设备800为图8中的根节点R1。
可选地,结合图9所示的应用场景来看,图17所示的路由设备800为图9中BIER-TE网络的入口节点BFR1。
可选地,结合图11所示的应用场景来看,图17所示的路由设备800为图11中的SRP2MP网络中入口节点R1。
可选地,结合图14所示的应用场景来看,图17所示的路由设备800为图14中的头节点A。
可选地,结合图15所示的转发路径的确定装置600来看,图15中的装置600设于图17中的路由设备700上。装置600中的处理单元602和获取单元601通过图17中的主控板810上中央处理器811实现。装置600确定出的第二P2MP路径由主控板810以转发表项的形式下发至接口板830,接口板830将转发表项存储至存储器834,并通过物理接口卡833转发组播流。
主控板也称为主处理单元(main processing unit,MPU)或路由处理卡(routeprocessor card),主控板810用于对路由设备800中各个组件的控制和管理,包括路由计算、设备管理、设备维护、协议处理功能。主控板810包括:中央处理器811和存储器812。
接口板830也称为线路接口单元卡(line processing unit,LPU)、线卡(linecard)或业务板。接口板830用于提供各种业务接口并实现数据包的转发。业务接口包括而不限于以太网接口、POS(packet over sONET/SDH)接口等,以太网接口例如是灵活以太网业务接口(flexible ethernet clients,FlexE clients)。接口板830包括:中央处理器831、网络处理器832、转发表项存储器834和物理接口卡(physical interface card,PIC)833。
接口板830上的中央处理器831用于对接口板830进行控制管理并与主控板810上的中央处理器811进行通信。
网络处理器832用于实现报文的转发处理。网络处理器832的形态例如是转发芯片。具体而言,网络处理器832用于基于转发表项存储器834保存的转发表转发接收到的报文,如果报文的目的地址为路由设备800的地址,则将该报文上送至CPU(如中央处理器811)处理;如果报文的目的地址不是路由设备800的地址,则根据该目的地址从转发表中查找到该目的地址对应的下一跳和出接口,将该报文转发到该目的地址对应的出接口。其中,上行报文的处理包括:报文入接口的处理,转发表查找;下行报文的处理:转发表查找等等。
物理接口卡833用于实现物理层的对接功能,原始的流量由此进入接口板830,以及处理后的报文从该物理接口卡833发出。物理接口卡833也称为子卡,可安装在接口板830上,负责将光电信号转换为报文并对报文进行合法性检查后转发给网络处理器832处理。在一些实施例中,中央处理器也可执行网络处理器832的功能,比如基于通用CPU实现软件转发,从而物理接口卡833中不需要网络处理器832。
可选地,路由设备800包括多个接口板,例如路由设备800还包括接口板840,接口板840包括:中央处理器841、网络处理器842、转发表项存储器844和物理接口卡843。
可选地,路由设备800还包括交换网板820。交换网板820也例如称为交换网板单元(switch fabric unit,SFU)。在路由设备有多个接口板830的情况下,交换网板820用于完成各接口板之间的数据交换。例如,接口板830和接口板840之间例如通过交换网板820通信。
主控板810和接口板830耦合。例如。主控板810、接口板830和接口板840,以及交换网板820之间通过系统总线与系统背板相连实现互通。在一种可能的实现方式中,主控板810和接口板830之间建立进程间通信协议(inter-process communication,IPC)通道,主控板810和接口板830之间通过IPC通道进行通信。
在逻辑上,路由设备800包括控制面和转发面,控制面包括主控板810和中央处理器831,转发面包括执行转发的各个组件,比如转发表项存储器834、物理接口卡833和网络处理器832。控制面执行路由器、生成转发表、处理信令和协议报文、配置与维护设备的状态等功能,控制面将生成的转发表下发给转发面,在转发面,网络处理器832基于控制面下发的转发表对物理接口卡833收到的报文查表转发。控制面下发的转发表例如保存在转发表项存储器834中。在有些实施例中,控制面和转发面例如完全分离,不在同一设备上。
接口板840上的操作与接口板830的操作一致,为了简洁,不再赘述。应理解,本实施例的路由设备800可对应于上述各个方法实施例中的根节点,该路由设备800中的主控板810、接口板830和/或840例如实现上述各个方法实施例中的根节点所具有的功能和/或所实施的各种步骤,为了简洁,在此不再赘述。
主控板可能有一块或多块,有多块的时候例如包括主用主控板和备用主控板。接口板可能有一块或多块,路由设备的数据处理能力越强,提供的接口板越多。接口板上的物理接口卡也可以有一块或多块。交换网板可能没有,也可能有一块或多块,有多块的时候可以共同实现负荷分担冗余备份。在集中式转发架构下,路由设备可以不需要交换网板,接口板承担整个系统的业务数据的处理功能。在分布式转发架构下,路由设备可以有至少一块交换网板,通过交换网板实现多块接口板之间的数据交换,提供大容量的数据交换和处理能力。所以,分布式架构的路由设备的数据接入和处理能力要大于集中式架构的设备。可选地,路由设备的形态也可以是只有一块板卡,即没有交换网板,接口板和主控板的功能集成在该一块板卡上,此时接口板上的中央处理器和主控板上的中央处理器在该一块板卡上可以合并为一个中央处理器,执行两者叠加后的功能,这种形态设备的数据交换和处理能力较低(例如,低端交换机或路由器等路由设备)。具体采用哪种架构,取决于具体的组网部署场景,此处不做任何限定。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分可互相参考,每个实施例重点说明的都是与其他实施例的不同之处。
A参考B,指的是A与B相同或者A为B的简单变形。
本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序,也不能理解为指示或暗示相对重要性。例如,第一P2MP路径和第二P2MP路径用于区别不同的P2MP路径,而不是用于描述P2MP路径的特定顺序,也不能理解为第一P2MP路径比第二P2MP路径更重要。
本申请实施例,除非另有说明,“至少一个”的含义是指一个或多个,“多个”的含义是指两个或两个以上。例如,多个P2P路径是指两个或两个以上的P2P路径。
上述实施例可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例描述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘SolidState Disk(SSD))等。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (21)
1.一种转发路径的确定方法,其特征在于,应用于第一点到多点P2MP路径的根节点,包括:
基于所述第一P2MP路径以及用于接收第一组播流的n个叶子节点,获得n条点到点P2P路径,所述第一P2MP路径包括所述n条P2P路径,所述n为小于或等于所述第一P2MP路径的叶子节点数的正整数;
基于所述n条P2P路径获得第二P2MP路径,所述第二P2MP路径用于将所述第一组播流转发至所述n个叶子节点。
2.根据权利要求1所述的方法,其特征在于,所述n条P2P路径中任一P2P路径的首节点为所述第一P2MP路径的根节点,所述n条P2P路径中任一P2P路径的尾节点为所述第一P2MP路径的一个叶子节点。
3.根据权利要求1或2所述的方法,其特征在于,所述基于所述n条P2P路径获得第二P2MP路径包括:
获取所述n条P2P路径中每条P2P路径对应的比特串;
基于所述n条P2P路径中所述每条P2P路径对应的比特串,获得所述第二P2MP路径对应的比特串,所述第二P2MP路径对应的比特串为所述n条P2P路径包括的所有P2P路径对应的比特串进行或操作的结果。
4.根据权利要求1或2所述的方法,其特征在于,所述基于所述n条P2P路径获得第二P2MP路径包括:
获取所述n条P2P路径中每条P2P路径对应的段列表;
基于所述n条P2P路径中所述每条P2P路径对应的段列表,获得所述第二P2MP路径对应的段列表,所述第二P2MP路径对应的段列表包括所述n条P2P路径包括的所有P2P路径对应的段列表中的段标识。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述第一P2MP路径为根据预设的服务等级协议SLA需求以及预设的m个叶子节点建立的路径,所述第一组播流的SLA需求与所述预设的SLA需求相同,所述m为所述第一P2MP路径包括的叶子节点的数量。
6.根据权利要求1至4中任一项所述的方法,其特征在于,所述第一P2MP路径为所述第一组播流对应的组播组中组播加入或者组播退出前的路径。
7.根据权利要求1至4中任一项所述的方法,其特征在于,所述第一P2MP路径用于转发第二组播流,所述第二组播流的SLA需求与所述第一组播流的SLA需求相同。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述基于所述n条P2P路径获得第二P2MP路径之后,还包括:
所述第二P2MP路径包括的第一P2P路径存在故障,基于所述第二P2MP路径获得第三P2MP路径,所述第三P2MP路径包括所述第一P2P路径的备路径以及所述n条P2P路径中所述第一P2P路径之外的P2P路径。
9.根据权利要求1至8中任一项所述的方法,其特征在于,所述基于所述第一P2MP路径以及用于接收第一组播流的n个叶子节点,获得n条点到点P2P路径之前,还包括:
基于所述第一组播流的SLA需求获取组播策略,所述组播策略包括所述n条P2P路径的信息以及用于标识所述SLA需求的信息。
10.根据权利要求9所述的方法,其特征在于,所述组播策略中所述n条P2P路径的信息包括所述n条P2P路径中每条P2P路径对应的比特串或段列表。
11.根据权利要求10所述的方法,其特征在于,所述组播策略中所述n个P2P路径的信息还包括所述n条P2P路径中每条P2P路径的备路径对应的比特串或段列表。
12.一种转发路径的确定装置,其特征在于,包括:
获取单元,用于基于第一点到多点P2MP路径以及用于接收第一组播流的n个叶子节点,获得n条点到点P2P路径,所述第一P2MP路径包括所述n条P2P路径,所述n为小于或等于所述第一P2MP路径的叶子节点数的正整数;
处理单元,用于基于所述n条P2P路径获得第二P2MP路径,所述第二P2MP路径用于将所述第一组播流转发至所述n个叶子节点。
13.根据权利要求12所述的装置,其特征在于,所述n条P2P路径中任一P2P路径的首节点为所述第一P2MP路径的根节点,所述n条P2P路径中任一P2P路径的尾节点为所述第一P2MP路径的一个叶子节点。
14.根据权利要求12或13所述的装置,其特征在于,所述处理单元,用于获取所述n条P2P路径中每条P2P路径对应的比特串;基于所述n条P2P路径中所述每条P2P路径对应的比特串,获得所述第二P2MP路径对应的比特串,所述第二P2MP路径对应的比特串为所述n条P2P路径包括的所有P2P路径对应的比特串进行或操作的结果。
15.根据权利要求12或13所述的装置,其特征在于,所述处理单元,用于获取所述n条P2P路径中每条P2P路径对应的段列表;基于所述n条P2P路径中所述每条P2P路径对应的段列表,获得所述第二P2MP路径对应的段列表,所述第二P2MP路径对应的段列表包括所述n条P2P路径包括的所有P2P路径对应的段列表中的段标识。
16.根据权利要求12至15中任一项所述的装置,其特征在于,所述第一P2MP路径为根据预设的服务等级协议SLA需求以及预设的m个叶子节点建立的路径,所述第一组播流的SLA需求与所述预设的SLA需求相同,所述m为所述第一P2MP路径包括的叶子节点的数量。
17.根据权利要求12至15中任一项所述的装置,其特征在于,所述第一P2MP路径为所述第一组播流对应的组播组中组播加入或者组播退出前的路径。
18.根据权利要求12至15中任一项所述的装置,其特征在于,所述第一P2MP路径用于转发第二组播流,所述第二组播流的SLA需求与所述第一组播流的SLA需求相同。
19.根据权利要求12至18中任一项所述的装置,其特征在于,所述处理单元,还用于所述第二P2MP路径包括的第一P2P路径存在故障,基于所述第二P2MP路径获得第三P2MP路径,所述第三P2MP路径包括所述第一P2P路径的备路径以及所述n条P2P路径中所述第一P2P路径之外的P2P路径。
20.根据权利要求12至19中任一项所述的装置,其特征在于,所述获取单元,还用于基于所述第一组播流的SLA需求获取组播策略,所述组播策略包括所述n条P2P路径的信息以及用于标识所述SLA需求的信息。
21.根据权利要求12至20中任一项所述的装置,其特征在于,所述装置设于所述第一P2MP路径的根节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111308370.8A CN116094987A (zh) | 2021-11-05 | 2021-11-05 | 转发路径的确定方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111308370.8A CN116094987A (zh) | 2021-11-05 | 2021-11-05 | 转发路径的确定方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116094987A true CN116094987A (zh) | 2023-05-09 |
Family
ID=86197874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111308370.8A Pending CN116094987A (zh) | 2021-11-05 | 2021-11-05 | 转发路径的确定方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116094987A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116566886A (zh) * | 2023-07-11 | 2023-08-08 | 南京邮电大学 | 一种基于双平面的无状态单播保护路由方法 |
-
2021
- 2021-11-05 CN CN202111308370.8A patent/CN116094987A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116566886A (zh) * | 2023-07-11 | 2023-08-08 | 南京邮电大学 | 一种基于双平面的无状态单播保护路由方法 |
CN116566886B (zh) * | 2023-07-11 | 2023-09-26 | 南京邮电大学 | 一种基于双平面的无状态单播保护路由方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111385206B (zh) | 报文转发的方法、网络系统、相关设备及计算机存储介质 | |
US8792506B2 (en) | Inter-domain routing in an n-ary-tree and source-routing based communication framework | |
US11689452B2 (en) | Method for forwarding service data, network device, and network system | |
KR101317969B1 (ko) | 링크 애그리게이션 방법 및 노드 | |
CN110401599B (zh) | 数据包的处理方法及装置、存储介质、电子装置 | |
US9485198B1 (en) | Methods and apparatus for multicast traffic failover in a network | |
WO2021000752A1 (zh) | 一种在数据中心网络中转发报文的方法及相关装置 | |
CN114465920B (zh) | 确定对应关系的方法、装置以及系统 | |
WO2018058639A1 (zh) | 伪线负载分担的方法和设备 | |
EP4044533A1 (en) | Method, device, and equipment for load sharing in bit index explicit replication network | |
US11929923B2 (en) | Packet transmission method and apparatus | |
US8243728B2 (en) | Apparatus and method for transmitting packets in a packet switched network | |
CN112822097A (zh) | 报文转发的方法、第一网络设备以及第一设备组 | |
CN116094987A (zh) | 转发路径的确定方法及装置 | |
EP4325800A1 (en) | Packet forwarding method and apparatus | |
US11784919B2 (en) | Method for sending BIERv6 packet and first network device | |
CN113285878B (zh) | 负载分担的方法、第一网络设备 | |
WO2022116615A1 (zh) | 报文传输的方法、获取对应关系的方法、装置及系统 | |
US20240195729A1 (en) | Communication method and apparatus | |
WO2022194193A1 (zh) | 用于获取路径的方法和装置 | |
WO2024087688A1 (zh) | 报文转发方法、装置、设备、存储介质及计算机程序 | |
WO2023226859A1 (zh) | 一种段路由策略处理方法及装置 | |
WO2024061184A1 (zh) | 对应关系的获取方法、参数通告方法、装置、设备及介质 | |
CN115118651A (zh) | 用于获取路径的方法和装置 | |
CN116132364A (zh) | 报文传输方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |