掌桥专利:专业的专利平台
掌桥专利
首页

段路由点到多点路径

文献发布时间:2023-06-19 18:32:25


段路由点到多点路径

相关申请的交叉引用

本专利申请要求由Huaimo Chen等人于2020年6月16日提交的、发明名称为“段路由点到多点路径(Segment Routing Point To Multipoint Path)”的第63/039,856号美国临时专利申请的权益,该专利申请通过引用的方式并入本文中。

技术领域

本发明通常涉及网络通信,并且具体涉及在互联网协议版本6(internetprotocol version six,IPv6)网络中使用段路由(segment routing,SR)创建点到多点(point to multipoint,P2MP)路径的机制。

背景技术

某些网络使用网络状态来路由网络数据包。例如,控制器可以通过将转发状态分配给沿着路径的节点来在网络上创建路径。每个节点可以为经过节点的每个路径存储一个或多个状态,例如在内存中的转发表中。随着网络继续创建新路径,这些节点的转发表会逐渐变得更加拥挤。因此,分配给这些表的内存会限制可以经过节点的路径的数量。进一步,随着转发表大小的增加,用于搜索转发表的处理资源也会增加。因此,随着网络中路径的数量的增加,路径状态使用不断增加的内存和处理资源。因此,使用状态来描述路径的网络不像无状态网络那样可扩展。

发明内容

在一个实施例中,本发明包括一种由网络中的入口节点实现的方法,该方法包括:入口节点的处理器将描述段路由点到多点(segment routing point-to-multipoint,SRP2MP)路径的段列表推送到数据包上;在沿着SR P2MP路径的下游接口上发送数据包。

段路由(segment routing,SR)是一种路由协议,该协议支持路由,而不维护网络中的状态。具体地,SR使用段列表来描述路径。在点对点(point-to-point,P2P)路由中,段列表实现为描述路径的段的标签或SID的堆栈。用段列表封装数据包。路径中的每个节点都可以从数据包中弹出栈顶标签,并根据堆栈中的下一个标签转发数据包。这样,唯一维护状态的节点是入口节点。中间节点和出口节点根据标签栈转发数据包,因此SR协议在核心网上是无状态的。SR适用于P2P路径,但不支持P2MP路径。例如,支持P2MP路径的路由协议是有状态的,因此不与SR中使用的无状态方法集成。例如,一些路由协议计算P2MP路径,并在每个节点创建状态,以支持沿着P2MP路径转发。

本方面包括一种基于SR的机制,用于通过IPv6网络以无状态方式创建和维护P2MP路径。入口节点可以创建描述通过网络的P2MP路径的段列表。段列表包括P2MP路径中节点的组播SID。组播SID可以标识节点和/或可以标识节点的链路/接口,具体取决于示例。组播SID包括分支的数量字段和SID的数量字段。分支的数量指示P2MP路径的从对应节点向下游延伸的段的数量。SID的数量指示对应节点下游的P2MP路径中包括的组播节点的数量。这些信息可以由入口节点通过封装推送到数据包上。然后,数据包可以向下游发送,以沿着如所示的P2MP路径进行复制和/或路由。例如,每个当前节点(例如,入口节点和中间节点)可以复制数据包的次数等于由为当前节点指示的组播SID的分支的数量所指示的分支数。然后,当前节点可以在转发数据包之前,用描述当前节点下游沿着对应分支的P2MP路径的子树的段列表封装每个数据包。下一跳节点的组播SID和相关参数可以包括在数据包的目的地地址中,当前节点的地址可以包括在源地址中。这支持通过SR在IPv6网络上创建无状态P2MP通信。因此,所描述的示例为IPv6核心网中的节点创建了附加的功能。进一步,所描述的示例不需要维护核心网中的状态,因此随着P2MP路径的数量的扩展,减少了整个核心网的内存和处理器资源的占用。因此,所描述的示例解决了网络通信特定的各种问题,并增加了网络通信设备的功能和/或可操作性。

可选地,根据上述任一方面,在该方面的另一种实现方式中,还包括在与数据包不同的下游接口上发送数据包的副本,其中,数据包的副本包括第二段列表,并且其中,段列表和第二段列表描述SR P2MP路径的不同子树。

可选地,根据上述任一方面,在该方面的另一种实现方式中,SR P2MP路径在网络上是无状态的。

可选地,根据上述任一方面,在该方面的另一种实现方式中,将段列表推送到数据包上还包括:将沿着SR P2MP路径的子树的下一跳的组播段标识符(segment identifier,SID)设置为数据包的目的地地址。

可选地,根据上述任一方面,在该方面的另一种实现方式中,段列表包括SR P2MP路径的子树中每个节点或每个链路的组播SID。

可选地,根据上述任一方面,在该方面的另一种实现方式中,每个组播SID包括组播块前缀、节点标识符和自变量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,每个组播SID包括组播邻接SID定位符、链路号和自变量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,自变量包括子树的与对应节点关联的分支的数量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,自变量还包括对应节点下游的子树中包括的SID的数量。

在一个实施例中,本发明包括一种由网络中沿着SR P2MP路径的中间节点实现的方法,该方法包括:接收包括描述SR P2MP路径的一个或多个子树的上游段列表的数据包;中间节点的处理器根据上游段列表,确定描述SR P2MP路径中包括的中间节点的下游接口的子树的下游段列表;处理器将与数据包关联的上游段列表替换为下游段列表;在沿着SRP2MP路径的下游接口上发送数据包。

SR是一种路由协议,该协议支持路由,而不维护网络中的状态。具体地,SR使用段列表来描述路径。在P2P路由中,段列表实现为描述路径的段的标签或SID堆栈。用段列表封装数据包。路径中的每个节点都可以从数据包中弹出栈顶标签,并根据堆栈中的下一个标签转发数据包。这样,唯一维护状态的节点是入口节点。中间节点和出口节点根据标签栈转发数据包,因此SR协议在核心网上是无状态的。SR适用于P2P路径,但不支持P2MP路径。例如,支持P2MP路径的路由协议是有状态的,因此不与SR中使用的无状态方法集成。例如,一些路由协议计算P2MP路径,并在每个节点创建状态,以支持沿着P2MP路径转发。

本方面包括一种基于SR的机制,用于通过IPv6网络以无状态方式创建和维护P2MP路径。入口节点可以创建描述通过网络的P2MP路径的段列表。段列表包括P2MP路径中节点的组播SID。组播SID可以标识节点和/或可以标识节点的链路/接口,具体取决于示例。组播SID包括分支的数量字段和SID的数量字段。分支的数量指示P2MP路径的从对应节点向下游延伸的段的数量。SID的数量指示对应节点下游的P2MP路径中包括的组播节点的数量。这些信息可以由入口节点通过封装推送到数据包上。然后,数据包可以向下游发送,以沿着如所示的P2MP路径进行复制和/或路由。例如,每个当前节点(例如,入口节点和中间节点)可以复制数据包的次数等于由为当前节点指示的组播SID的分支的数量所指示的分支数。然后,当前节点可以在转发数据包之前,用描述当前节点下游沿着对应分支的P2MP路径的子树的段列表封装每个数据包。下一跳节点的组播SID和相关参数可以包括在数据包的目的地地址中,当前节点的地址可以包括在源地址中。这支持通过SR在IPv6网络上创建无状态P2MP通信。因此,所描述的示例为IPv6核心网中的节点创建了附加的功能。进一步,所描述的示例不需要维护核心网中的状态,因此随着P2MP路径的数量的扩展,减少了整个核心网的内存和处理器资源的占用。因此,所描述的示例解决了网络通信特定的各种问题,并增加了网络通信设备的功能和/或可操作性。

可选地,根据上述任一方面,在该方面的另一种实现方式中,还包括:处理器复制数据包,以生成数据包的副本,以用于在中间节点的第二下游接口上发送;处理器根据上游段列表,确定描述SR P2MP路径中包括的第二下游接口的第二子树的第二下游段列表;处理器将与数据包的副本关联的上游段列表替换为第二下游段列表;发送器在沿着SR P2MP路径的第二下游接口上发送数据包的副本。

可选地,根据上述任一方面,在该方面的另一种实现方式中,将上游段列表替换为第二下游段列表包括:复制包括上游段列表的数据包,然后将上游段列表替换为数据包的副本中的第二下游段列表。

可选地,根据上述任一方面,在该方面的另一种实现方式中,将上游段列表替换为第二下游段列表包括:在复制之前从数据包中删除上游段列表,并将第二下游段列表推送到数据包的副本上。

可选地,根据上述任一方面,在该方面的另一种实现方式中,接收到的数据包包括标识中间节点的目的地地址,其中,目的地地址包括自变量,自变量包括与中间节点关联的分支的数量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,上游段列表包括与中间节点关联的子树中每个节点或每个链路的组播SID。

可选地,根据上述任一方面,在该方面的另一种实现方式中,每个组播SID包括对应节点下游的子树中包括的SID的数量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,确定下游段列表包括:使用目的地地址中指示的分支的数量来确定下一跳节点的数量;使用每个下一跳节点的组播SID中的SID的数量来确定与每个下一跳节点关联的每个子树中的组播SID的数量;生成仅包括与下一跳节点的子树关联的组播SID的下游段列表,下一跳节点与下游接口关联。

可选地,根据上述任一方面,在该方面的另一种实现方式中,确定第二下游段列表包括:根据目的地地址中指示的分支的数量和每个下一跳节点的组播SID中的SID的数量,生成仅包括与第二下游接口的第二子树关联的组播SID的第二下游列表。

可选地,根据上述任一方面,在该方面的另一种实现方式中,中间节点不存储SRP2MP路径的状态。

可选地,根据上述任一方面,在该方面的另一种实现方式中,将上游段列表替换为下游段列表还包括:将下游接口的沿着子树的下一跳的组播SID设置为数据包的目的地地址。

在一个实施例中,本发明包括一种非瞬时性计算机可读介质,包括供网络中的第一节点使用的计算机程序产品,其中,计算机程序产品包括存储在非瞬时性计算机可读介质中的计算机可执行指令,计算机可执行指令在由处理器执行时,使第一节点执行上述任一方面的方法。

在一个实施例中,本发明包括网络中的入口节点,该节点包括:接收部件,用于接收数据包;处理部件,用于将描述SR P2MP路径的段列表推送到数据包上;发送部件,用于在沿着SR P2MP路径的下游接口上发送数据包。

SR是一种路由协议,该协议支持路由,而不维护网络中的状态。具体地,SR使用段列表来描述路径。在P2P路由中,段列表实现为描述路径的段的标签或SID堆栈。用段列表封装数据包。路径中的每个节点都可以从数据包中弹出栈顶标签,并根据堆栈中的下一个标签转发数据包。这样,唯一维护状态的节点是入口节点。中间节点和出口节点根据标签栈转发数据包,因此SR协议在核心网上是无状态的。SR适用于P2P路径,但不支持P2MP路径。例如,支持P2MP路径的路由协议是有状态的,因此不与SR中使用的无状态方法集成。例如,一些路由协议计算P2MP路径,并在每个节点创建状态,以支持沿着P2MP路径转发。

本方面包括一种基于SR的机制,用于通过IPv6网络以无状态方式创建和维护P2MP路径。入口节点可以创建描述通过网络的P2MP路径的段列表。段列表包括P2MP路径中节点的组播SID。组播SID可以标识节点和/或可以标识节点的链路/接口,具体取决于示例。组播SID包括分支的数量字段和SID的数量字段。分支的数量指示P2MP路径的从对应节点向下游延伸的段的数量。SID的数量指示对应节点下游的P2MP路径中包括的组播节点的数量。这些信息可以由入口节点通过封装推送到数据包上。然后,数据包可以向下游发送,以沿着如所示的P2MP路径进行复制和/或路由。例如,每个当前节点(例如,入口节点和中间节点)可以复制数据包的次数等于由为当前节点指示的组播SID的分支的数量所指示的分支数。然后,当前节点可以在转发数据包之前,用描述当前节点下游沿着对应分支的P2MP路径的子树的段列表封装每个数据包。下一跳节点的组播SID和相关参数可以包括在数据包的目的地地址中,当前节点的地址可以包括在源地址中。这支持通过SR在IPv6网络上创建无状态P2MP通信。因此,所描述的示例为IPv6核心网中的节点创建了附加的功能。进一步,所描述的示例不需要维护核心网中的状态,因此随着P2MP路径的数量的扩展,减少了整个核心网的内存和处理器资源的占用。因此,所描述的示例解决了网络通信特定的各种问题,并增加了网络通信设备的功能和/或可操作性。

可选地,根据上述任一方面,在该方面的另一种实现方式中,接收部件、处理部件和发送部件用于执行上述任一方面的方法。

在一个实施例中,本发明包括网络中的中间节点,该节点包括:接收部件,用于接收包括描述SR P2MP路径的一个或多个子树的上游段列表的数据包;处理部件,用于:根据上游段列表,确定描述SR P2MP路径中包括的中间节点的下游接口的子树的下游段列表;将与数据包关联的上游段列表替换为下游段列表;发送部件,用于在沿着SR P2MP路径的下游接口上发送数据包。

SR是一种路由协议,该协议支持路由,而不维护网络中的状态。具体地,SR使用段列表来描述路径。在P2P路由中,段列表实现为描述路径的段的标签或SID堆栈。用段列表封装数据包。路径中的每个节点都可以从数据包中弹出栈顶标签,并根据堆栈中的下一个标签转发数据包。这样,唯一维护状态的节点是入口节点。中间节点和出口节点根据标签栈转发数据包,因此SR协议在核心网上是无状态的。SR适用于P2P路径,但不支持P2MP路径。例如,支持P2MP路径的路由协议是有状态的,因此不与SR中使用的无状态方法集成。例如,一些路由协议计算P2MP路径,并在每个节点创建状态,以支持沿着P2MP路径转发。

本方面包括一种基于SR的机制,用于通过IPv6网络以无状态方式创建和维护P2MP路径。入口节点可以创建描述通过网络的P2MP路径的段列表。段列表包括P2MP路径中节点的组播SID。组播SID可以标识节点和/或可以标识节点的链路/接口,具体取决于示例。组播SID包括分支的数量字段和SID的数量字段。分支的数量指示P2MP路径的从对应节点向下游延伸的段的数量。SID的数量指示对应节点下游的P2MP路径中包括的组播节点的数量。这些信息可以由入口节点通过封装推送到数据包上。然后,数据包可以向下游发送,以沿着如所示的P2MP路径进行复制和/或路由。例如,每个当前节点(例如,入口节点和中间节点)可以复制数据包的次数等于由为当前节点指示的组播SID的分支的数量所指示的分支数。然后,当前节点可以在转发数据包之前,用描述当前节点下游沿着对应分支的P2MP路径的子树的段列表封装每个数据包。下一跳节点的组播SID和相关参数可以包括在数据包的目的地地址中,当前节点的地址可以包括在源地址中。这支持通过SR在IPv6网络上创建无状态P2MP通信。因此,所描述的示例为IPv6核心网中的节点创建了附加的功能。进一步,所描述的示例不需要维护核心网中的状态,因此随着P2MP路径的数量的扩展,减少了整个核心网的内存和处理器资源的占用。因此,所描述的示例解决了网络通信特定的各种问题,并增加了网络通信设备的功能和/或可操作性。

可选地,根据上述任一方面,在该方面的另一种实现方式中,接收部件、处理部件和发送部件用于执行上述任一方面的方法。

在一个实施例中,本发明包括网络中的入口节点,该节点包括:接收器,用于接收数据包;处理器,用于将描述SR P2MP路径的段列表推送到数据包上;发送器,用于在沿着SRP2MP路径的下游接口上发送数据包。

SR是一种路由协议,该协议支持路由,而不维护网络中的状态。具体地,SR使用段列表来描述路径。在P2P路由中,段列表实现为描述路径的段的标签或SID堆栈。用段列表封装数据包。路径中的每个节点都可以从数据包中弹出栈顶标签,并根据堆栈中的下一个标签转发数据包。这样,唯一维护状态的节点是入口节点。中间节点和出口节点根据标签栈转发数据包,因此SR协议在核心网上是无状态的。SR适用于P2P路径,但不支持P2MP路径。例如,支持P2MP路径的路由协议是有状态的,因此不与SR中使用的无状态方法集成。例如,一些路由协议计算P2MP路径,并在每个节点创建状态,以支持沿着P2MP路径转发。

本方面包括一种基于SR的机制,用于通过IPv6网络以无状态方式创建和维护P2MP路径。入口节点可以创建描述通过网络的P2MP路径的段列表。段列表包括P2MP路径中节点的组播SID。组播SID可以标识节点和/或可以标识节点的链路/接口,具体取决于示例。组播SID包括分支的数量字段和SID的数量字段。分支的数量指示P2MP路径的从对应节点向下游延伸的段的数量。SID的数量指示对应节点下游的P2MP路径中包括的组播节点的数量。这些信息可以由入口节点通过封装推送到数据包上。然后,数据包可以向下游发送,以沿着如所示的P2MP路径进行复制和/或路由。例如,每个当前节点(例如,入口节点和中间节点)可以复制数据包的次数等于由为当前节点指示的组播SID的分支的数量所指示的分支数。然后,当前节点可以在转发数据包之前,用描述当前节点下游沿着对应分支的P2MP路径的子树的段列表封装每个数据包。下一跳节点的组播SID和相关参数可以包括在数据包的目的地地址中,当前节点的地址可以包括在源地址中。这支持通过SR在IPv6网络上创建无状态P2MP通信。因此,所描述的示例为IPv6核心网中的节点创建了附加的功能。进一步,所描述的示例不需要维护核心网中的状态,因此随着P2MP路径的数量的扩展,减少了整个核心网的内存和处理器资源的占用。因此,所描述的示例解决了网络通信特定的各种问题,并增加了网络通信设备的功能和/或可操作性。

可选地,根据上述任一方面,在该方面的另一种实现方式中,发送器还用于在与数据包不同的下游接口上发送数据包的副本,其中,数据包的副本包括第二段列表,并且其中,段列表和第二段列表描述SR P2MP路径的不同子树。

可选地,根据上述任一方面,在该方面的另一种实现方式中,SR P2MP路径在网络上是无状态的。

可选地,根据上述任一方面,在该方面的另一种实现方式中,将段列表推送到数据包上还包括:将沿着SR P2MP路径的子树的下一跳的组播段标识符(segment identifier,SID)设置为数据包的目的地地址。

可选地,根据上述任一方面,在该方面的另一种实现方式中,段列表包括SR P2MP路径的子树中每个节点或每个链路的组播SID。

可选地,根据上述任一方面,在该方面的另一种实现方式中,每个组播SID包括组播块前缀、节点标识符和自变量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,每个组播SID包括组播邻接SID定位符、链路号和自变量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,自变量包括子树的与对应节点关联的分支的数量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,自变量还包括对应节点下游的子树中包括的SID的数量。

在一个实施例中,本发明包括中间节点,该节点包括:接收器,用于接收包括描述经过中间节点的SR P2MP路径的一个或多个子树的上游段列表的数据包;处理器,用于:根据上游段列表,确定描述SR P2MP路径中包括的中间节点的下游接口的子树的下游段列表;将与数据包关联的上游段列表替换为下游段列表;发送器,用于在沿着SR P2MP路径的下游接口上发送数据包。

SR是一种路由协议,该协议支持路由,而不维护网络中的状态。具体地,SR使用段列表来描述路径。在P2P路由中,段列表实现为描述路径的段的标签或SID堆栈。用段列表封装数据包。路径中的每个节点都可以从数据包中弹出栈顶标签,并根据堆栈中的下一个标签转发数据包。这样,唯一维护状态的节点是入口节点。中间节点和出口节点根据标签栈转发数据包,因此SR协议在核心网上是无状态的。SR适用于P2P路径,但不支持P2MP路径。例如,支持P2MP路径的路由协议是有状态的,因此不与SR中使用的无状态方法集成。例如,一些路由协议计算P2MP路径,并在每个节点创建状态,以支持沿着P2MP路径转发。

本方面包括一种基于SR的机制,用于通过IPv6网络以无状态方式创建和维护P2MP路径。入口节点可以创建描述通过网络的P2MP路径的段列表。段列表包括P2MP路径中节点的组播SID。组播SID可以标识节点和/或可以标识节点的链路/接口,具体取决于示例。组播SID包括分支的数量字段和SID的数量字段。分支的数量指示P2MP路径的从对应节点向下游延伸的段的数量。SID的数量指示对应节点下游的P2MP路径中包括的组播节点的数量。这些信息可以由入口节点通过封装推送到数据包上。然后,数据包可以向下游发送,以沿着如所示的P2MP路径进行复制和/或路由。例如,每个当前节点(例如,入口节点和中间节点)可以复制数据包的次数等于由为当前节点指示的组播SID的分支的数量所指示的分支数。然后,当前节点可以在转发数据包之前,用描述当前节点下游沿着对应分支的P2MP路径的子树的段列表封装每个数据包。下一跳节点的组播SID和相关参数可以包括在数据包的目的地地址中,当前节点的地址可以包括在源地址中。这支持通过SR在IPv6网络上创建无状态P2MP通信。因此,所描述的示例为IPv6核心网中的节点创建了附加的功能。进一步,所描述的示例不需要维护核心网中的状态,因此随着P2MP路径的数量的扩展,减少了整个核心网的内存和处理器资源的占用。因此,所描述的示例解决了网络通信特定的各种问题,并增加了网络通信设备的功能和/或可操作性。

可选地,根据上述任一方面,在该方面的另一种实现方式中,处理器还用于:复制数据包,以生成数据包的副本,以用于在中间节点的第二下游接口上发送;根据上游段列表,确定描述SR P2MP路径中包括的第二下游接口的第二子树的第二下游段列表;将与数据包的副本关联的上游段列表替换为第二下游段列表;其中,发送器还用于在沿着SR P2MP路径的第二下游接口上发送数据包的副本。

可选地,根据上述任一方面,在该方面的另一种实现方式中,将上游段列表替换为第二下游段列表包括:复制包括上游段列表的数据包,然后将上游段列表替换为数据包的副本中的第二下游段列表。

可选地,根据上述任一方面,在该方面的另一种实现方式中,将上游段列表替换为第二下游段列表包括:在复制之前从数据包中删除上游段列表,并将第二下游段列表推送到数据包的副本上。

可选地,根据上述任一方面,在该方面的另一种实现方式中,接收到的数据包包括标识中间节点的目的地地址,其中,目的地地址包括自变量,自变量包括与中间节点关联的分支的数量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,上游段列表包括与中间节点关联的子树中每个节点或每个链路的组播SID。

可选地,根据上述任一方面,在该方面的另一种实现方式中,每个组播SID包括对应节点下游的子树中包括的SID的数量。

可选地,根据上述任一方面,在该方面的另一种实现方式中,确定下游段列表包括:使用目的地地址中指示的分支的数量来确定下一跳节点的数量;使用每个下一跳节点的组播SID中的SID的数量来确定与每个下一跳节点关联的每个子树中的组播SID的数量;生成仅包括与下一跳节点的子树关联的组播SID的下游段列表,下一跳节点与下游接口关联。

可选地,根据上述任一方面,在该方面的另一种实现方式中,确定第二下游段列表包括:根据目的地地址中指示的分支的数量和每个下一跳节点的组播SID中的SID的数量,生成仅包括与第二下游接口的第二子树关联的组播SID的第二下游列表。

可选地,根据上述任一方面,在该方面的另一种实现方式中,中间节点不存储SRP2MP路径的状态。

可选地,根据上述任一方面,在该方面的另一种实现方式中,将上游段列表替换为下游段列表还包括:将下游接口的沿着子树的下一跳的组播SID设置为数据包的目的地地址。

为了清楚起见,上述任一实施例可以与上述其它任何一个或多个实施例组合以创建在本发明范围内的新实施例。

从结合附图和权利要求书的以下详细描述中,将更清楚地理解这些和其它特征。

附图说明

为了更完整地理解本发明,结合附图和具体实施方式,参考以下简要描述,其中,相同的附图标记表示相同的部件。

图1是用于使用SR机制来实现P2MP路径的示例性IPv6网络的示意图。

图2是示例性网络节点的示意图。

图3是指示描述IPv6网络中的SR P2MP路径的段列表中的节点的组播段标识符(segment identifier,SID)的示例性编码的示意图。

图4是指示节点和子树信息的组播SID的示例性编码的示意图。

图5是根据IPv6网络中的节点描述SR P2MP路径的段列表的示例性编码的示意图。

图6是组播SID的示例性编码的示意图,组播SID指示描述IPv6网络中的SR P2MP路径的段列表中的链路。

图7是指示链路和子树信息的组播邻接SID的示例性编码的示意图。

图8是根据IPv6网络中的链路描述SR P2MP路径的段列表的示例性编码的示意图。

图9是IPv6网络边缘的入口节点将数据包发送到SR P2MP路径的示例性方法的流程图。

图10是IPv6网络中的中间节点沿着SR P2MP路径转发数据包的示例性方法的流程图。

图11是用于在IPv6网络中维护SR P2MP路径的设备的实施例。

具体实施方式

首先应理解,尽管下文提供了一个或多个实施例的说明性实现方式,但所公开的系统和/或方法可使用任何数量的技术来实现,无论这些技术是当前已知还是现有的。本发明绝不限于下文所说明的说明性实现方式、附图和技术,包括本文所说明和描述的示例性设计和实现方式,而是可在所附权利要求书的范围以及其等效部分的完整范围内修改。

以下术语的定义如下所述,除非在本文相反的上下文中使用。具体地,以下定义旨在更加清晰地描述本发明。但是,术语在不同的上下文中可能会有不同的描述。因此,以下定义应当视为补充信息,不应当视为对此处为这些术语提供的描述的任何其它定义进行限制。

网络是一组连接的节点,这些节点使用一组共享的通信协议进行通信。IPv6网络是使用IPv6协议的网络,IPv6协议是一种使用128位地址机制在互联网上发送数据包的通信协议。入口节点是位于网络边缘的节点,其提供的处理机制支持对应数据包进入网络。中间节点是网络中用于根据预定协议转发数据包的节点。数据包是数据单元,其大小适于由节点进行路由/交换,并根据预定格式组织。SR是一种路由协议,该协议用标签(例如,标签堆栈)或段标识符(segment identifier,SID)封装数据包,这些SID描述了通过网络的段路径。段列表是对对应于路径的段的有序描述。上游段列表是从上游节点接收到的数据包中包括的段列表。下游段列表是为下游传输准备的数据包中包括的段列表。P2MP路径是从单个源前进到多个目的地的路径。下游接口是节点在相对于对应通信的下游方向上与链路通信的端口。上游接口是节点在相对于对应通信的上游方向上与链路通信的端口。数据包的副本是作为原始数据包的再现的新数据包,其中,新数据包包括与原始数据包基本相似(例如,相同)的有效载荷和潜在不同的路由数据。

树是一种网络结构,其中,单个根和多个叶通过多个分支连接。子树是树的一部分,子树包括的元素少于树中的所有元素。状态是用于处理数据的记忆信息。无状态是对不使用记忆信息处理数据的系统的描述。下一跳是路径中的后续节点。目的地地址是标识数据包被发送到的节点和/或链路的信息。组播SID是标识符,其将链路和/或节点唯一地标识为组播通信中的段。组播块前缀是地址的开头部分,指示该地址与组播通信关联。节点标识符是指示对应节点的信息。自变量是提供补充数据供路由协议使用的参数。组播邻接SID定位符是用于指示链路作为组播通信中的段的标识符。链路号是标识节点的接口和/或连接到该接口的链路的数据。分支的数量是指示树/子树有多少分支从对应组播节点向下游延伸的数据。SID的数量是指示以对应节点为根的子树中包括多少组播节点/接口的数据。

SR是一种路由协议,该协议支持路由,而不维护网络中的状态。具体地,SR使用段列表来描述路径。在点对点(point-to-point,P2P)路由中,段列表实现为描述路径的段的标签或SID的堆栈。用段列表封装数据包。路径中的每个节点都可以从数据包中弹出栈顶标签,并根据堆栈中的下一个标签转发数据包。这样,唯一维护状态的节点是入口节点。中间节点和出口节点根据标签栈转发数据包,因此SR协议在核心网上是无状态的。SR适用于P2P路径,但不支持P2MP路径。例如,支持P2MP路径的路由协议是有状态的,因此不与SR中使用的无状态方法集成。例如,一些路由协议计算P2MP路径,并在每个节点创建状态,以支持沿着P2MP路径转发。

本文公开了一种基于SR的机制,用于通过IPv6网络以无状态方式创建和维护P2MP路径。入口节点可以创建描述通过网络的P2MP路径的段列表。段列表包括P2MP路径中节点的组播SID。组播SID可以标识节点和/或可以标识节点的链路/接口,具体取决于示例。组播SID包括分支的数量字段和SID的数量字段。分支的数量指示P2MP路径的从对应节点向下游延伸的段的数量。SID的数量指示对应节点下游的P2MP路径中包括的组播节点的数量。这些信息可以由入口节点通过封装推送到数据包上。然后,数据包可以向下游发送,以沿着如所示的P2MP路径进行复制和/或路由。例如,每个当前节点(例如,入口节点和中间节点)可以复制数据包的次数等于由为当前节点指示的组播SID的分支的数量所指示的分支数。然后,当前节点可以在转发数据包之前,用描述当前节点下游沿着对应分支的P2MP路径的子树的段列表封装每个数据包。下一跳节点的组播SID和相关参数可以包括在数据包的目的地地址中,当前节点的地址可以包括在源地址中。这支持通过SR在IPv6网络上创建无状态P2MP通信。因此,所描述的示例为IPv6核心网中的节点创建了附加的功能。进一步,所描述的示例不需要维护核心网中的状态,因此随着P2MP路径的数量的扩展,减少了整个核心网的内存和处理器资源的占用。因此,所描述的示例解决了网络通信特定的各种问题,并增加了网络通信设备的功能和/或可操作性。

图1是用于使用SR机制来实现P2MP路径的示例性IPv6网络100的示意图。例如,网络100用于使用SR协议。SR是一种路由协议,该协议用标签或SID封装数据包,这些SID描述了通过网络100的段路径。描述路径的SID的堆栈可以称为段列表。段列表可以定义为对对应于路径的段的有序描述。封装可以用于将段列表附加到数据包(例如,数据包的前面),以便根据段列表而不是根据数据包中的数据路由数据包。例如,网络100的节点用于使用封装算法用SID封装数据包(例如,将SID推送到数据包的段列表中),当数据包穿过网络100时,从数据包的段列表中获取当前SID,并根据SID路由数据包(例如,段列表的当前SID)。网络100还用于使用封装和段列表来实现P2MP路径,下文更详细地进行了描述。

网络100为IPv6网络。IPv6网络使用IPv6协议进行通信。IPv6协议是一种通信协议,用于使用128位地址机制在互联网上发送数据包。网络100包括任意数量的节点。图1中仅描述了相关节点。网络100包括边缘节点和内部节点。边缘节点是同时连接到网络100和某个外部网络或节点的任何节点。内部节点仅连接到网络100中的其它节点。

边缘节点用于例如通过提供网络安全和/或外部协议与网络100使用的协议之间的转换,将来自其它网络的数据包转换到网络100中/转换出网络100。在路径路由上下文中,边缘节点可以充当入口节点101或出口节点105。入口节点101是接受来自外部源的数据包以用于在网络上发送的边缘节点。因此,入口节点101是位于网络100边缘的节点,其提供的处理机制支持对应数据包进入网络100。出口节点105是边缘节点,其接受来自网络100内的数据包,并将此类数据包朝向网络100外的目的地转发。出口节点105还可以将数据包从网络100使用的协议转换为外部协议。

网络100还包括中间节点103。中间节点103是网络100中用于根据预定协议转发数据包的内部节点。中间节点103使用链路相互连接、与入口节点101连接和/或与出口节点105连接。这种链路可以包括光链路、光电链路、电链路和/或无线链路。这种链路在接口连接到入口节点101、中间节点103和出口节点105。接口是节点连接链路的端口。根据示例,可以为节点、节点的接口或两者分配地址以支持路由数据包。地址是局部或全局唯一的字符集,标识用于交换和/或路由目的的对应组件(例如,链路、节点、虚拟链路、虚拟节点等)。

在本示例中,网络100包括P2MP路径107,该路径是从单个起点前进到多个目的地的路径。因此,P2MP路径107可以用于将数据包流从单个源(例如,点)发送到多个目的地(例如,多点)。P2MP路径107从源朝向目的地前进。从沿着P2MP路径107的任何一点,相对方向可以描述为上游或下游。从当前链路和/或节点的角度来看,上游是在源的方向上。从当前链路和/或节点的角度来看,下游是在目的地的方向上。因此,每个节点包括上游接口和下游接口。上游接口是节点在相对于对应通信的上游方向上与链路通信的端口。下游接口是节点在相对于对应通信的下游方向上与链路通信的端口。

P2MP路径107在入口节点101处在上游接口从源进入网络100。入口节点101用下面描述的段列表封装流中的数据包,并执行用于将数据包转换到网络100的任何其它协议转换。P2MP路径107在一个或多个下游接口离开入口节点101,并朝向与各个目的地关联的出口节点105的上游接口前进。在一些情况下,P2MP路径107还前进到中间节点103的上游接口,并通过这些中间节点103的下游接口,朝向出口节点105。出口节点105删除任何剩余封装,并执行任何其它相关协议转换,以将数据包从网络100转移出来,以便朝向目的地发送。

根据图论,P2MP路径107可以描述为树。树是一种网络结构,其中,单个根和多个叶通过多个分支连接。分支是从节点下游前进的链路,出口节点105是叶。树包括子树。子树是树的一部分,子树包括的元素少于树中的所有元素。例如,从对应节点(例如,除入口节点101以外的任何节点)下游前进的P2MP路径107的一部分可以被称为以对应节点为根的子树。

P2MP路径107路径使入口节点101和中间节点103在上游接口上接收数据包,根据需要复制数据包,并在从节点分支的下游接口上发送每个数据包/数据包的副本。如上所述,一些网络通过在关联节点中存储状态来管理这种功能。状态是用于处理数据的记忆信息。例如,当接收到作为所指示流的一部分的数据包时,中间节点103可以接收执行特定复制和转发过程的指令。这种方法的问题是,P2MP路径107的增加导致必须对大量的表进行排序以获取正确的复制和转发指令。随着网络100中P2MP路径107的数量的增加,这增加了处理资源需求并减缓了转发。进一步,中间节点103中的存储器的量限制了可以在任何特定时间点建立的P2MP路径107的数量。因此,有状态P2MP路径的可扩展性有限。进一步,SR协议被设计为无状态。无状态是对不使用记忆信息处理数据的系统的描述。

本发明使用通过网络100创建无状态P2MP路径107的机制。这种机制与SR协议的设计原则一致,并支持P2MP路径107的数量扩展。因此,网络100可以同时支持任意大量的无状态P2MP路径107。如本文所使用的,这些机制是无状态的,因为它们不要求在任何中间节点103或出口节点105中维护状态。入口节点101仍然可以维护以入口节点101为根的任何P2MP路径107的状态数据。

使用格式化为描述组播树的段列表执行沿着P2MP路径107的无状态转发。在一些示例中,段列表使用指示P2MP路径107中的每个节点的组播SID。在其它示例中,段列表使用指示P2MP路径107中的每个链路的组播SID。段列表还包括附加的自变量,这些自变量有助于节点解释段列表中的信息。对于流中的每个数据包,入口节点101根据需要复制数据包,并通过附加段列表来封装数据包。数据包被转发到中间节点103,中间节点103在由段列表指示时复制每个接收到的数据包,根据预定义的规则更新段列表,并根据更新的段列表转发这些数据包。例如,中间节点103可以从包括上游段列表的上游方向接收数据包。中间节点103可以复制上游段列表指示的数据包,并根据上游段列表创建一个或多个下游段列表。然后,中间节点103可以将正确的下游段列表附加到每个数据包,并根据下游段列表向下游转发这些数据包。上游段列表是从上游节点接收到的数据包中包括的段列表。下游段列表是为下游传输准备的数据包中包括的段列表。接收数据包的出口节点105可以连同封装一起删除段列表,并将数据包朝向最终目的地转发。

以下示例用于说明使用段列表来编码P2MP路径107的过程。在本示例中,入口节点101具有提供商边缘(provider edge,PE)8的地址。出口节点105具有PE1、PE2、PE3、PE4和PE5的地址。中间节点103具有提供商节点P1、P2、P3和P4的地址。这种节点的接口可以通过指定连接到该链路的接口的链路号具体寻址。例如,第一接口可以表示为-1组播(multicast,m),第二接口可以表示为-2m等。因此,节点P1上的第一接口可以表示为P1-1m,节点PE4上的第一接口可以表示为PE4-1m等。在操作系统中,这些地址可以用局部有效和/或全局有效的数值代替。

在本示例中,入口节点101(节点PE8)接收与P2MP路径107关联的数据包。P2MP路径107从PE8有两个分支,因此PE2复制数据包。用段列表封装一个数据包,该段列表描述了以PE8为根的子树,该子树延伸到PE5。在本示例中,从PE8延伸到PE5的子树是单个链路。在一些示例中,这种段列表包括PE5的组播SID。但是,由于在入口节点101(PE8)与出口节点(PE5)之间存在没有分支的单个链路/路径,因此,根据通用SR协议,这种段列表可以可选地格式化为描述从PE8到PE5的路径的SID。例如,可以将指示PE5和/或PE5-1m的组播SID设置为数据包的目的地地址。段列表可以为空或省略。然后,数据包可以被发送到PE5,以用于解封装并朝向目的地转发。

用段列表封装另一个数据包,该段列表描述了以PE8为根的子树,该子树朝向PE1-PE4延伸。例如,段列表可以包括子树中链路/节点的组播SID和每个组播SID的自变量。这些自变量可以包括从组播SID指示的节点延伸的P2MP路径107分支的数量。这些自变量还可以包括与组播SID关联的节点/链路下游的组播SID的数量。在一个示例中,沿着对应分支的下一跳节点的组播SID(在这种情况下为P1和/或P1-1m)被设置为预计离开PE8前往P1的数据包的目的地地址。子树中剩余节点的组播SID包括在段列表中,在这种情况下为P2、P3、PE1、PE2、P4、PE3和PE4(或如果使用接口地址,则为P2-1m、P3-1m、PE1-1m、PE2-1m、P4-1m、PE3-1m和PE4-1m)。然后,数据包从PE8转发到P1。

该数据包在P1接收,并包括从上游节点接收的段列表。为了清楚讨论,本文将其称为上游段列表。因此,上游段列表是从上游节点接收到的数据包中包括的段列表。表示为P1的中间节点103根据上游目的地地址和上游段列表为数据包创建一个或多个下游段列表,并根据下游段列表转发数据包。下游段列表是为下游传输准备的数据包中包括的段列表。在本示例中,上游目的地地址包括指示P2MP路径107包括P1下游的两个分支的自变量。因此,复制数据包,以创建数据包的两个副本,从而为每个分支生成一个数据包。然后,P1根据上游目的地地址中的分支的数量从段列表中获取前两个组播SID。具体地,P1从段列表中获取第一组播SID(在这种情况下为P2或P2-1m),并将该值作为分配来从P1发送到P2的数据包的下游目的地地址。P1从段列表中获取第二组播SID(在这种情况下为P3或P3-1m),并将该值作为分配来从P1发送到P3的数据包的下游目的地地址。由于上游目的地地址指示的P1只有两个分支,所以P1确定段列表中剩余的组播SID是与P2和P3关联的其它子树的一部分。例如,P1可以分别根据P2和P3的组播SID中的SID的数量这一自变量确定P2下游有两个组播SID且P3下游有三个组播SID。因此,下游目的地地址(例如PE1/PE1-1m和PE2/PE2-1m)之后的前两个组播SID被包括在附加到从P1前进到P2的数据包的下游段列表中。P3与三个下游组播SID关联,因此上游段列表中的下三个组播SID(例如P4/P4-1m、PE3/PE3-1m和PE4/PE4-1m)包括在附加到从P1前进到P3的数据包的下游段列表中。

这样,在每个当前跳处重写段列表,以仅包括通过P2MP路径107的对应下游分支的当前跳下游的节点/链路的组播SID。在一些示例中,上游段列表在复制数据包之前被删除,然后下游段列表根据上游列表生成并被推送到对应数据包上。在其它示例中,数据包在包括上游段列表的同时被复制。然后,每个数据包中的上游段列表被对应下游段列表替换。下文中详细地包括了段列表的完整示例性编码和对应描述。一旦在P2MP路径107的出口节点105处接收到数据包,这些数据包可以包括空段列表。进一步,这些数据包的目的地地址可以指示从对应节点延伸的零分支,以及从对应节点下游延伸的零组播SID。使用该信息,出口节点105可以确定数据包应转换出网络100。出口节点105可以解封装数据包以删除段列表,并根据解封装的数据包中包括的数据将数据包朝向最终目的地转发。

使用上述机制,数据包可以沿着P2MP路径107转发,而不在中间节点103或出口节点105处使用状态。因此,所公开的机制支持以既可扩展又与SR协议一致的方式创建P2MP路径107。

图2是用于在IPv6网络中操作的示例网络节点200(例如网络100中的节点)的示意图。例如,网络节点200可以用于实现入口节点101、中间节点103和/或出口节点105。因此,网络节点200适用于实现本文所描述的公开示例/实施例。网络设备200包括下游端口220、上游端口250和/或收发单元(Tx/Rx)210。收发单元210包括发送器和/或接收器,用于通过网络在上游和/或下游进行数据通信。需要说明的是,Tx/Rx 210可以实现为接收器、接收器电路、发送器、发送器电路,或其组合。网络设备200还包括处理器230和存储器232。处理器230包括逻辑单元和/或中央处理单元(central processing unit,CPU),以处理数据。存储器232用于存储数据。网络设备200还可以包括与上游端口250和/或下游端口220耦合的光电(optical-to-electrical,OE)组件、电光(electrical-to-optical,EO)组件和/或无线通信组件,用于通过电通信网络、光通信网络和/或无线通信网络进行数据通信。

处理器230通过硬件和软件来实现。处理器230可以实现为一个或多个CPU芯片、核(例如,多核处理器)、现场可编程门阵列(field-programmable gate array,FPGA)、专用集成电路(application specific integrated circuit,ASIC)和数字信号处理器(digitalsignal processor,DSP)。处理器230与下游端口220、Tx/Rx 210、上游端口250和存储器232通信。处理器230包括P2MP模块214。P2MP模块214实现本文所描述的公开实施例。具体地,P2MP模块214可以通过使用包括组播SID、组播邻接SID定位符和/或对应子树信息的对应段列表来维护IPv6网络中的SR P2MP路径。例如,P2MP模块214可以接收数据包,从数据包读取段列表,复制数据包,将段列表推送到描述下游子树的数据包上,和/或转发这些数据包,以便通过IPv6网络传输。因此,P2MP模块214可以用于执行解决上述一个或多个问题的机制。因此,P2MP模块214改进了网络节点200的功能,并解决了网络通信技术特定的问题。进一步,P2MP模块214实现网络节点200到不同状态的转换。或者,P2MP模块214可以实现为存储在存储器232中并由处理器230执行的指令(例如,存储在非瞬时性介质中的计算机程序产品)。

存储器232包括一个或多个存储器类型,如磁盘、磁带机、固态驱动器、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、闪存、三态内容寻址存储器(ternary content-addressable memory,TCAM)、静态随机存取存储器(staticrandom-access memory,SRAM)等。存储器232可以用作溢出数据存储设备,以在选择程序用于执行时存储此类程序,并存储程序执行期间读取的指令和数据。

图3是组播SID 300的示例性编码的示意图,该组播SID 300指示描述IPv6网络中的SR P2MP路径(例如网络100中的P2MP路径107)的段列表中的节点,例如网络节点200。组播SID 300可以在网络域中全局唯一,因此可以从网络域中的任何其它节点唯一地标识节点。在一个示例中,网络管理员可以为每个节点配置组播SID 300。在另一个示例中,中央控制器可以为每个节点分配组播SID 300,并向每个对应节点发送指示组播SID的信息。在任何一种情况下,节点都可以在网络域上分发它们自己的组播SID 300。

组播SID 300包括组播SID块310、节点ID 311和自变量313。组播SID 300可以是128位长,以支持IPv6寻址系统。组播SID块310包括分配给组播节点SID使用的公共前缀。例如,组播SID块310可以用于指示组播SID 300中包括的地址是用于表示P2MP路径的地址。组播SID块310可以是位数(B)长。节点ID 311包括节点标识符(identifier,ID)。节点ID可以在网络域中全局唯一,并可以指示特定节点。节点ID 311可以是位数(N)长,其中,N+B小于128位。在一个示例中,标识开放式最短路径优先(open shortest path first,OSPF)路由协议节点的OSPF路由器ID可以用作节点ID 311。在这种情况下,节点ID 311是32位长。在另一个示例中,从1到n的唯一编号被分配给网络域中的n个节点中的每一个节点,并且该编号可以用作节点ID 311。自变量313是用于支持附加功能的参数,如下文详细地描述的。自变量313可以小于或等于128位减去N位和减去B位。

图4是指示节点和子树信息的组播SID 400的示例性编码的示意图。组播SID 400是组播SID 300的示例性实现方式。因此,组播SID 400可以用于唯一地标识沿着IPv6网络中的P2MP路径(例如网络100中的P2MP路径107)定位的网络节点,例如网络节点200。组播SID 400包括组播SID块410、节点ID 411和自变量413,它们分别基本上类似于组播SID块310、节点ID 311和自变量313。例如,组播SID块410从位0扩展到位B,节点ID 411从位B扩展到位N+B,自变量从位N+B扩展到位127,从而得到128位地址。

自变量413还包括分支的数量414和SID的数量416。分支的数量414是指示从具有由组播SID块410和节点ID 411指定的地址的对应组播节点向下游延伸的树/子树的分支的数量的数据。因此,分支的数量414包括从与组播SID 400关联的节点沿着组播树的出接口或分支的数量。因此,当节点在SR P2MP路径或树传输的数据包中接收节点的组播SID 400时,组播SID 400包括从节点沿着P2MP路径或树的出接口或分支的数量。分支的数量414可以被认为是自变量413的一部分,并且可以从位N+B延伸。

SID的数量416是指示以具有由组播SID块410和节点ID 411指定的地址的对应组播节点为根的子树中包括的组播节点的数量的数据。SID的数量416可以被认为是自变量413的一部分,并且可以从分支的数量414之后的位延伸。自变量413中的SID的数量416之后的任何位都可以保留用于其它目的。

图5是根据IPv6网络中的节点描述SR P2MP路径的段列表500和501的示例性编码的示意图。具体地,段列表500和段列表501描述了网络100中的P2MP路径107。段列表500和501使用组播SID 300和/或400来寻址P2MP路径107中的节点,例如节点200。

段列表501描述了节点PE8与节点PE5之间的P2MP路径107的子树,而段列表500描述了节点PE8与节点PE1至PE4之间的P2MP路径107的子树。段列表500和501中的每个都包括组播节点SID列510、节点ID列511、分支的数量列514、SID的数量列516和自变量列513。段列表500和/或501的每个条目都包括组播SID,例如组播SID 400。因此,组播节点SID列510、节点ID列511、分支的数量列514、SID的数量列516和自变量列513分别包括段列表500和/或501中包括的组播SID 400中的条目,这些条目包括组播SID块410、节点ID 411、分支的数量414、SID的数量416和自变量413。

如图1所示,P2MP路径107包括从节点PE8到节点PE5的单个链路的子树。因此,如图5所示,描述节点PE8与节点PE5之间的子树的段列表501包括指示PE5作为目的地的单个组播SID。具体地,段列表501包括具有单个组播SID的单个条目。组播SID包括组播节点SID块,指示该地址用于表示P2MP路径。组播SID还包括设置为PE5的节点ID,指示节点PE5是沿着P2MP路径107的对应分支的下一跳。节点PE5的组播SID包括自变量,这些自变量包括设置为零的分支的数量和设置为零的SID的数量。这指示P2MP路径107的分支没有延伸到节点PE5之外,并且节点PE5的下游没有进一步的组播SID。任一自变量提供足够的信息以推断节点PE5是终止P2MP路径107的对应分支的出口节点105。因此,在段列表501中不存在进一步的组播SID。因此,入口节点101可以在对应数据包的目的地地址中包括节点PE5的组播SID,并从段列表501中删除节点PE5的组播SID。在一些示例中,对应数据包可以被发送到具有空段列表501的节点PE5。在其它示例中,入口节点101可以省略段列表501,并使用SR协议标签栈代替段列表501。

段列表500描述了节点PE8与节点PE1至PE4之间的P2MP路径107的子树。使用两个下游分支的入口节点101(因此是两个段列表500和501)复制传入数据包,将段列表500推送到数据包的一个副本上,并将段列表501推送到数据包的另一个副本上。沿着节点PE8与节点PE1至PE4之间的分支的下一跳节点是节点P1。因此,段列表500中的第一条目包括节点P1的组播SID。节点P1的组播SID包括设置为两个的分支的数量,这指示P1包括两个下游分支。节点P1的组播SID还包括设置为7的SID的数量,这指示节点P1的下游有7个节点(P2、P3、PE1、PE2、P4、PE3和PE4)。因此,节点P1的组播SID之后的段列表中有7个条目。这些条目以预定顺序包括,以支持下游节点确定哪些节点与每个子树关联。入口节点101在段列表500中包括这些组播SID,使得这些地址可以由下游节点解释,如以下所讨论。段列表500的第一条目可以作为对应数据包的目的地地址包括,从段列表500中删除,并且剩余段列表500可以通过封装被推送到数据包上。

因为P1是目的地地址,所以数据包被发送到节点P1。目的地地址包括一个自变量,指示节点P1包括两个下游分支。因此,在节点P1复制数据包,以基于上游数据包的目的地地址创建两个数据包。上游目的地地址的两个分支指示段列表500中剩余的前两个组播SID是沿着这两个分支的下一跳。因此,创建包括节点P2的组播SID的第一下游段列表,并且创建包括节点P3的组播SID的第二下游段列表。节点P2的组播SID指示节点P1下游沿着节点P1与节点P2之间延伸的分支有两个组播SID。因此,节点P3(PE1和PE2)之后的前两个组播SID被包括在段列表中,并且节点P2的组播SID被设置为分配用于从节点P1发送到节点P2的数据包的目的地地址。同样,节点P3的组播SID指示节点P3下游有三个组播SID。为分配用于从节点P1发送到节点P3的数据包创建段列表。节点P3的组播SID被设置为这种数据包的目的地地址,并且位于P2分支数据之后的三个组播SID被包括在要朝向节点P3发送的数据包的段列表中(基于节点P3的组播SID中的SID的数量的三个值)。然后,具有两个不同段列表的数据包从节点P1下游朝向节点P2和节点P3转发。

当在节点P2接收到对应数据包时,根据节点P2的组播SID中的自变量,目的地地址中的分支的数量确定为两个。因此,数据包被复制。节点P2收到的上游段列表只有两个条目(PE1和PE2),上游目的地地址指示只有两个分支。因此,节点P2可以确定节点PE1的组播SID和节点PE2的组播SID应设置为数据包的相应副本的目的地地址。由于节点PE1的组播SID包括指示从节点PE1下游的组播SID的数量为零的自变量,所以节点P2可以在分配用于从节点P2发送到节点PE1的数据包中包括空段列表。同样,由于节点PE2的组播SID包括指示从节点PE2下游的组播SID的数量为零的自变量,所以节点P2可以在分配用于从节点P2发送到节点PE2的数据包中包括空段列表。当在节点PE1和PE2接收到这些数据包时,对应目的地地址中的空段列表和/或设置为零的SID的数量支持节点PE1和PE2确定对应数据包可以被解封装并朝向相应的目的地转发。

节点P3接收到的数据包包括设置为节点P3的组播SID的目的地地址,并包括包含段列表500的最后三个条目(P4、PE3和PE4)的段列表。上游目的地地址(节点P3的组播SID)指示节点P3下游只有一个分支,因此不复制数据包。由于没有分支,所以从上游段列表中弹出第一组播SID(指示节点P4),并设置为数据包的下游目的地地址。这将产生包括段列表500的最后两个条目(PE3和PE4)的下游段列表。然后,数据包根据下游目的地地址从节点P3转发到节点P4。

节点P4接收到的数据包包括设置为节点P4的组播SID的目的地地址并包括包含段列表500的最后两个条目(PE3和PE4)的段列表。节点P4的组播SID指示节点P4下游有两个分支,因此复制数据包。由于分支的数量等于上游目的地地址中指示的节点P4下游的SID的数量(并且由于段列表中的剩余条目数量等于分支的数量),所以节点P4可以确定节点PE3和PE4是出口节点。因此,节点P4可以确定节点PE3和节点PE4应设置为数据包的相应副本的目的地地址。由于节点PE3的组播SID包括指示从节点PE3下游的组播SID的数量为零的自变量,所以节点P4可以在分配用于从节点P4发送到节点PE3的数据包中包括空段列表(或无段列表)。同样,由于节点PE4的组播SID包括指示从节点PE4下游的组播SID的数量为零的自变量,所以节点P4可以在分配用于从节点P4发送到节点PE4的数据包中包括空段列表。当在节点PE3和PE4接收到这些数据包时,对应目的地地址中的空段列表和/或设置为零的SID的数量支持节点PE3和PE4确定对应数据包可以被解封装并朝向相应的目的地转发。

如以上所讨论,沿着P2MP路径的每个节点可以读取包括组播SID(或其部分)以及数据包目的地地址中的组播SID的段列表500和/或501,以正确地从流中复制数据包,并创建新段列表,以由下游节点用于处理这些数据包。这样,数据包就可以以无状态的方式从单点发送到多个目的地。

图6是组播邻接SID 600的示例性编码的示意图,该组播邻接SID 600指示描述IPv6网络中的SR P2MP路径(例如网络100中的P2MP路径107)的段列表中的链路,例如通过连接到该链路的网络节点200的接口来指示。组播邻接SID 600可以类似于组播SID 300,但可以以链路而不是以节点来描述P2MP路径。因此,组播邻接SID 600是组播SID的不同实现方式(例如,不同类型)。

组播链路可以由连接到该链路的节点的上游和/或下游接口标识和/或寻址。对于网络域中的每个节点,连接的组播链路中的每个组播链路都可以由关联的组播SID标识,该关联的组播SID可以实现为组播邻接SID 600。组播邻接SID 600可以包括局部重要的地址元素,因此相对于特定节点进行描述。例如,网络域中的每个节点可以将来自预定组播SID块的组播SID分配给节点的链路中的每个链路,作为该链路的组播邻接SID 600。然后,节点可以通告描述链路的组播邻接SID 600。在另一个示例中,中央控制器和/或管理员可以将来自预定组播SID块的组播SID分配给每个节点的每个链路,作为对应链路的组播邻接SID600。然后,控制器和/或管理员可以将描述链路的组播邻接SID 600发送到节点和该节点的邻居节点。当前节点的邻居节点是与当前节点共享直连链路的任何节点。

组播邻接SID 600包括组播SID邻接定位符610、链路号611和自变量613。组播邻接SID 600可以是128位长,以符合IPv6寻址。组播SID邻接定位符610可以用于定位指定节点。组播SID邻接定位符610可以包括分配给所有组播邻接SID的公共前缀和节点特定的附加标识符。例如,组播SID邻接定位符610可以基本上类似于组播节点SID块310和节点ID311的组合。组播SID邻接定位符610可以是位数(B)长。

链路号611可以是标识连接到节点的每个链路的链路序列号。链路号611可以是局部有效值。例如,对于一个节点的所有n个链路,链路序列号/链路号为1、2……n可以分别分配给n个链路。由于链路号611标识连接到节点的链路,所以链路号611可以唯一地标识节点的接口,例如用作沿着P2MP路径的上游接口和/或下游接口的特定接口(例如,特定的下游端口220和/或上游端口250)。链路号611可以是位数(L)长,其中,B+L小于128位。自变量613可以基本上类似于自变量313。自变量613可以小于或等于128位减去B位和减去L位。

图7是指示链路和子树信息的组播邻接SID 700的示例性编码的示意图。组播邻接SID700是组播邻接SID 600的示例性实现方式。因此,组播邻接SID 700可以用于唯一地标识沿着IPv6网络中的P2MP路径(例如网络100中的P2MP路径107)定位的网络节点的链路,例如网络节点200的接口。组播邻接SID 700可以类似于组播SID 400,但可以用于标识链路而不是节点。组播邻接SID 700包括组播SID邻接定位符710和链路号711,其可以分别基本上类似于组播SID邻接定位符610和链路号611。进一步,组播邻接SID 700包括自变量713,其包括分支的数量714和SID的数量716。自变量713、分支的数量714和SID的数量716可以分别基本上类似于自变量413、分支的数量414和SID的数量416。因此,组播SID邻接定位符710和链路号711可以将组播链路标识为节点接口,并且分支的数量714和SID的数量716可以用于使用以上所描述的机制根据上游段列表创建下游段列表。下面描述使用组播邻接SID 700的示例性段列表。

图8是根据IPv6网络中的链路描述SR P2MP路径的段列表800的示例性编码的示意图。具体地,段列表800和段列表801描述了网络100中的P2MP路径107。段列表800和段列表801分别基本上类似于段列表500和段列表501,但是段列表800和801以链路(例如,节点上游接口)而不是节点来描述P2MP路径107。段列表800和801使用组播邻接SID 600和/或700来寻址P2MP路径107中的链路连接节点,例如作为节点200的上游接口。

段列表800和801中的每个都包括组播SID邻接定位符列810、链路号列811、分支的数量列814、SID的数量列816和自变量列813。段列表800和/或801的每个条目包括组播SID,例如组播邻接SID 700。因此,组播SID邻接定位符列810、链路号列811、分支的数量列814、SID的数量列816和自变量列813分别包括段列表800和/或801中包括的组播邻接SID 700中的条目,这些条目包括组播SID邻接定位符710、链路号711、分支的数量714、SID的数量716和自变量713。

段列表801描述了从节点PE8到节点PE5的子树,而段列表800描述了从节点PE8到节点PE1-PE4的子树。因此,段列表800和段列表801包括与段列表500和段列表501相同的信息,但根据链路/上游接口而不是根据节点格式化组播SID。组播SID邻接定位符列810包括与组播节点SID列510和节点ID列511的组合基本相同的信息。进一步,分支的数量列814、SID的数量列816和自变量列813分别包括与分支的数量列514、SID的数量列516和自变量列513基本相同的信息。此外,段列表800和801还包括链路号列811。链路号列811指示与组播SID邻接定位符列810中的对应条目描述的节点对应的上游接口/链路。

因此,段列表800和/或801描述了除了使用节点地址之外,还使用链路地址来编码P2MP路径(例如P2MP路径107)的示例性实现方式。因此,沿着P2MP路径的每个节点可以读取包括指示链路地址的组播SID(或其部分)以及指示数据包目的地地址中链路地址的组播SID的段列表800和/或801,以正确地从流复制数据包,并创建由下游节点用于处理这些数据包的新段列表。这样,数据包就可以使用链路地址以无状态的方式从单点发送到多个目的地。

以下描述实施例的示例性实现方式。单播或点对点(Point-to-Point,P2P)路径的SR使用段列表来描述路径中的段。SR组播或P2MP路径/树可以使用多个SR P2P路径实现。从入口节点到多个(例如,任意数量n)出口/叶节点的SR P2MP路径/树的功能由n个SR P2P路径实现。这n个P2P路径是从P2MP路径/树的入口到这n个出口/叶节点。该方案可能会浪费链路带宽等一些网络资源。

替代方案使用多个P2MP链隧道来实现从入口到n个出口/叶节点的P2MP路径/树。每个P2MP链隧道都是从入口到叶节点作为隧道尾端的隧道。一些叶节点可以被指示为沿着隧道的芽节点。与上述使用纯P2P路径的方案相比,该替代方案提高了网络资源的使用率。但是,这两种方案都是基于SR P2P路径。SR P2MP路径/树也可以使用P2MP组播树。对于从入口/根到多个出口/叶节点的SR P2MP路径/树,可以创建组播P2MP树,以将流量从入口/根传递到出口/叶节点。树的状态可以由树的根节点、中间复制节点和叶节点上的路径计算单元(path computation element,PCE)等控制器在转发平面中实例化。这种方法与SR原则不一致,在SR原则中,网络核心不存储状态。该示例性实现方式为SR IPv6(SR IPv6,SRv6)P2MP路径/树提供了一种方案,以将流量从路径的入口传递到SR域中路径的多个出口/叶。该方案使用P2MP组播树,而不在网络核心中存储SR P2MP路径/树的路径状态。

下面描述P2MP组播树的概述。对于从入口到出口的SR P2P路径,将该路径的段列表提供给入口。入口将列表推送到数据包中,数据包根据段列表递送到出口,在网络核心中没有任何状态。对于从入口到多个出口/叶节点的SR P2MP路径,向入口提供P2MP路径的段列表。入口将列表推送到数据包,数据包根据段列表递送到多个出口/叶节点,在网络核心中没有任何状态。图1示出了从入口/根PE8到四个出口/叶节点PE1、PE2、PE3和PE4的示例性SR P2MP路径。节点P1、P2、P3和P4是P2MP路径的中间节点。假设X-m是节点X的SID。X-m可以是邻接SID或节点SID。为简单起见,X-m是下面讨论中的节点SID。PE8-m、P1-m、P2-m、P3-m、P4-m、PE1-m、PE2-m、PE3-m和PE4-m是SR P2MP路径上节点的SID。它们通常是组播SID或复制SID。

组播SID是组播SID块的SID。在支持SR组播的SR域中,每个节点都有一个组播节点SID,该组播节点SID具有全局意义。节点的每个邻接都有一个组播邻接SID,该组播邻接SID具有局部意义。SR P2MP路径上节点的组播SID与下一跳/下游节点的SID关联。当节点接收到具有该节点组播SID的数据包时,该节点根据其SID复制数据包并将数据包发送到每个下一跳节点。如果SR P2MP路径上的节点P沿着路径有B(B>1)个下一跳节点,则当P-m在P2MP路径的段列表中时,节点P的SID(即,P-m)是组播SID。B个下一跳节点的SID仅在段列表中的P-m之后。当节点P收到具有P-m的数据包时,节点P复制数据包并将数据包发送到沿着P2MP路径的B个下一跳节点中的每个下一跳节点。

图1中SR P2MP路径的段列表被推送到入口/根节点PE8的数据包上。这种段列表可以如下:。节点P1沿着P2MP路径有两个下一跳节点P2和P3。下一跳节点的SID P2-m和P3-m在P1-m之后,P1-m是P1的组播SID。当P1接收到通过P2MP路径传输的数据包时,P1复制数据包并根据P1-m、P2-m和P3-m将数据包发送到下一跳节点P2和P3。节点P1的分支或下一跳的数量是P1-m中一个称为N-Branches的自变量的值。组播SID P1-m的N-Branches值为2。利用该信息,节点P1复制数据包并将数据包发送到两个下一跳节点P2和P3,这两个下一跳节点由P1-m之后的两个SID P2-m和P3-m指示。

节点P1下面的节点的SID的数量是称为N-SIDs的组播SID的另一个自变量的值。P1-m中的N-SIDs值为7,指示段列表中P1-m后面有7个SID。存在节点P2的两个分支或下一跳(PE1和PE2)和节点P2下面的节点的两个SID(PE1-m和PE2-m)。P2-m中的N-Branches的值和N-SIDs的值为2和2。利用该信息,在将数据包发送到节点P2之前,节点P1将节点P2下面的SID推送到数据包上。数据包具有一个新段列表,该段列表具有节点P2下面的SID。新段列表将替换数据包中的旧的段列表。存在节点P3的一个分支或下一跳(P4)和节点P3下面的节点的三个SID(即P4-m、PE3-m和PE4-m)。P3-m中的N-Branches的值和N-SIDs的值分别为1和3。利用该信息,在将数据包发送到节点P3之前,节点P1将节点P3下面的SID推送到数据包上。SR P2MP路径上的每个节点根据段列表将数据包发送到下一跳节点,任何中间节点都不存储状态,因此网络核心也不存储状态。数据包从入口递送到出口/叶节点。

下面介绍P2MP组播树的编码。对于从P2MP路径入口节点的SR P2MP路径的每个子树STi,假设下一跳节点NHi的组播SID为mSIDi。进一步,沿着子树,从节点NHi到下一跳节点BNHj(j=1……Bi)有Bi个分支(出接口),BNHj的组播SID为mSIDij。此外,节点BNHj(j=1……Bi)下面的分支(出接口)数量为BBj。此外,节点BNHj的Bi个分支中的每个分支下面的节点的SID的数量为NSj(j=1……Bi)。子树STi编码为段列表,如下所示:

其中,mSIDi是NHi的SID,mSIDi1至mSIDiBi分别是节点NHi的Bi个分支/下一跳BNHj的SID,SegSeq1是BNH1的子树的SID的序列,SegSeqBi是BNHBi的子树的SID的序列。具体地,mSIDi包括N-Branches字段中的分支的数量Bi,以及N-SIDs字段中mSIDi下面的SID的数量。mSIDij(j=1……Bi)包括N-Branches字段中的分支的数量BBj和N-SIDs字段中的SID的数量NSj。SegSeqj(j=1……Bi)是编码节点BNHj的子树的段列表中的SID序列。

对于图1中从入口节点PE8到出口节点PE1、PE2、PE3和PE4的P2MP路径,存在一个从PE8的子树。对于该子树,下一跳节点为P1,P1的组播SID为P1-m。从节点P1沿着子树到下一跳节点P2和P3有两个分支。P1下面的节点的SID的数量为7。P2和P3的组播SID分别为P2-m和P3-m。这两个分支下面的节点的SID的数量分别为2个和3个。P2下面的节点的SID为PE1-m和PE2-m。P3下面的节点的SID为P4-m、PE3-m和PE4-m。子树编码为段列表,如下面所示:

其中,P1-m是P1的SID,P2-m和P3-m分别是节点P1的两个分支/下一跳P2和P3的SID,PE1-m和PE2-m是P2的子树的SID序列,P4-m、PE3-m、PE4-m是P3的子树的SID序列。具体地,P1-m的N-Branches字段设置为2,N-SIDs字段设置为7。P2-m的N-Branches字段设置为2,N-SIDs字段设置为2。P3-m的N-Branches字段设置为1,N-SIDs字段设置为3。PE1-m和PE2-m是编码P2的子树的段列表中的SID序列。P4-m、PE3-m和PE4-m是编码P3的子树的段列表中的SID序列。P4-m的N-Branches字段设置为2,N-SIDs字段设置为2。图5示出了详细的段列表的示例,该段列表是从PE8到PE1、PE2、PE3和PE4的SR P2MP路径的P2MP组播树的编码。SID P1-m指示P1下面有两个分支和七个SID。SID P2-m指示P2下面有两个分支和两个SID。SID P3-m指示P3下面有一个分支和三个SID。SID PE1-m和PE2-m指示它们下面没有分支。SID P4-m指示P4下面有两个分支和两个SID。PE3-m和PE4-m指示它们下面没有分支。

SR P2MP路径的入口节点、中间节点和出口/叶节点上的过程和/或行为如以下所描述。这种过程/行为支持将从路径接收的数据包递送到数据包的目的地。

入口节点上的过程/行为可以描述如下。对于要通过SR P2MP路径传输的数据包,P2MP路径的入口为从入口分支的SR P2MP路径的每个子树复制数据包,通过执行封装算法将编码子树的段列表推送到数据包上,并沿着子树将数据包发送到下一跳节点。例如,从图1中的SR P2MP路径的入口PE8经过下一跳节点P1朝向出口/叶节点PE1、PE2、PE3和PE4有一个子树。

对于该子树,入口PE8复制数据包,将目的地地址(destination address,DA)设置为P1-m(节点P1的组播SID),通过执行封装算法,将编码子树的没有P1-m的段列表()推送到数据包的段路由报头(segment routingheader,SRH)中,并将数据包发送到DA(节点P1)。组播SID P1-m、P2-m、P3-m、PE1-m、PE2-m、P4-m、PE3-m、PE4-m的内容如图5所示。假设子树的复制数据包为Pkt0。封装算法的执行将IPv6报头(SRH)推送到Pkt0,并设置报头中的一些字段,以生成封装的数据包Pkt'。Pkt'表示如下:

Pkt'=(SA=PE8,DA=P1-m)(PE4-m,PE3-m,...,P3-m,P2-m;SL=7)Pkt0

其中,DA=P1-m指示目的地地址设置为P1-m,SA=PE8指示源地址(sourceaddress,SA)设置为PE8;SL=7指示剩余段(segments left,SL)的数量为7,剩余数据为P2MP路径的段列表。

中间节点的过程/行为可以描述如下。当SR P2MP路径的中间节点接收到该P2MP路径传输的数据包时,该数据包的DA为该节点的组播SID,该数据包包括该中间节点下面的子树的段列表。DA和段列表包括用于编码子树的信息。例如,当节点P1接收到图1中SR P2MP路径传输的数据包时,该数据包的DA为P1-m(为节点P1的组播SID),数据包中的段列表为。DA的N-Branches字段(值为n)指示中间节点下面有n个分支/子树。DA的N-SIDs字段指示中间节点下面这n个子树的SID的数量。这n个子树的下一跳节点的组播SID是数据包中段列表的前n个组播SID。例如,DA=P1-m的N-Branches字段(值为2)指示节点P1下面有两个分支/子树。DA=P1-m的N-SIDs字段(值为7)指示节点P1下面这两个子树有7个SID。段列表的第一组播SID(P2-m)是第一子树的下一跳节点(P2)的SID。段列表的第二组播SID(P3-m)是第二子树的下一跳节点(P3)的SID。

在下一跳节点的组播SID之后,这n个子树有n个SID块。下一跳节点的第一组播SID的N-SIDs字段(值为B1)指示第一子树的第一块中有B1个SID。下一跳节点的第二组播SID的N-SIDs字段(值为B2)指示在第一块之后的第二子树的第二块中有B2个SID,以此类推。例如,在下一跳节点P2和P3的组播SID P2-m和P3-m之后,节点P1下面的两个子树有两个SID块。P2-m(下一跳节点的第一组播SID)的N-SIDs字段值为2,指示第一子树的第一块中有两个SID,即,PE1-m和PE2-m。P3-m(下一跳节点的第二组播SID)的N-SIDs字段值为3,指示第一块之后的第二子树在第二块中有三个SID,即,P4-m、PE3-m和PE4-m。

中间节点为中间节点下面的每个子树复制没有顶部头的数据包,并通过执行封装算法在复制的数据包中添加具有根据子树的SID块构建的新段列表的新报头。中间节点将数据包的DA设置为沿着子树的下一跳节点的组播SID,并将数据包发送到DA。例如,节点P1为朝向PE1和PE2的第一子树复制数据包,并添加具有新段列表的新报头。中间节点设置DA=P2-m(下一跳P2的组播SID),并将数据包发送到DA(P2)。

假设子树的复制数据包为Pkt0。封装的执行将新IPv6报头(SRH)推送到Pkt0,并设置报头中的一些字段,以生成封装的数据包Pkt'。Pkt'表示如下:

Pkt'=(SA=P1,DA=P2-m)(PE2-m,PE1-m;SL=2)Pkt0,

其中,DA=P2-m指示目的地地址设置为P2-m,SA=P1指示源地址设置为P1,SL=2指示剩余段的数量为2,其余数据描述了以中间节点为根的第一子树的段列表。

节点P1还为通过P3朝向PE3和PE4的第二子树复制数据包,并添加具有新段列表的新报头。节点P1还设置DA=P3-m(下一跳P3的组播SID),并将数据包发送到DA(P3)。

出口节点的过程/行为如下。当SR P2MP路径的出口节点接收到通过P2MP路径传输的数据包时,该数据包的DA为出口节点的SID。出口节点相应地将数据包发送到目的地。如果SID是出口的组播SID,则N-Branches字段和N-SIDs字段都为零。

保护的描述如下。SR P2MP路径的保护分为全局保护和局部保护两种。全局保护的描述如下。对于从入口节点R1到多个出口节点Li(i=1……n)的主SR P2MP路径,可以建立从入口节点R1'到多个出口节点Li'(i=1……n)的备份SR P2MP路径,以为主SR P2MP路径提供全局保护。如果R1'与R1相同,则主SR P2MP路径的入口节点R1的故障不受保护。否则(R1'和R1不同,连接到同一个流量源),入口节点R1的故障将受到保护。如果Li'与Li(i=1……n)相同,则主SR P2MP路径的出口节点Li(i=1……n)的故障不受保护。否则(Li'和Li不同,连接到同一目的地),出口节点Li的故障受到保护。当主SR P2MP路径发生故障,并被流量源或其它实体检测到时,主SR P2MP路径要传输的流量切换到备用SR P2MP路径,备用SR P2MP路径将流量从入口节点R1'发送到出口节点Li'(i=1……n)。

局部保护的描述如下。SR P2P路径上的节点和邻接段可以应用局部保护,如快速重路由(fast reroute,FRR)。例如,这些机制可以以类似的方式应用于SR P2MP路径上的节点和邻接段的FRR。但是SR P2MP路径的FRR更复杂。

图9是在IPv6网络(例如网络100)的边缘,由入口节点(例如入口节点101和/或网络节点200)将数据包发送到SR P2MP路径(例如P2MP路径107)的示例性方法900的流程图。例如,入口节点可以生成段列表来描述P2MP路径,并用段列表封装来自流的数据包,以确保数据包沿着P2MP路径转发。在一个示例中,入口节点可以使用指示节点的组播SID,在这种情况下,入口节点可以使用包括组播SID 300和/或400的段列表,例如段列表500和/或501。在另一个示例中,入口节点可以使用指示链路的组播SID,在这种情况下,入口节点可以使用包括组播邻接SID 600和/或700的段列表,例如段列表800和/或801。需要说明的是,术语组播SID可以适用于指示节点的组播SID、指示链路的组播邻接SID,或其组合。

在方法900之前,通过入口节点并通过网络计算从源到多个目的地的P2MP路径。P2MP路径可以由控制器(例如路径计算单元)和/或由入口节点计算。然后,入口节点生成和/或存储描述P2MP路径的一个或多个段列表(例如,在转发表中),并将这些段列表与数据包流关联。在步骤901中,入口节点901接收与流关联的数据包。这种关联可以基于数据包源地址和/或数据包报头中的其它信息来确定。

入口节点确定沿着P2MP路径发送数据包。在步骤903中,当P2MP路径包括入口节点下游的两个或更多个分支时,入口节点可以复制数据包,以生成数据包的副本。例如,当数据包与转发表中存储的多个段列表和/或条目关联时,入口节点可以复制数据包。

在步骤905中,入口节点通过使用封装机制将段列表推送到数据包上。例如,当在步骤903复制数据包时,段列表是第一段列表,并被推送到接收到的数据包上,为了清楚讨论,该数据包也可以称为第一数据包。段列表描述通过网络的基于SR的P2MP路径或其一部分。例如,当P2MP路径的单个下游分支从入口节点前进时,段列表描述整个P2MP路径。当P2MP路径的多个下游分支从入口节点前进时(例如,在步骤903中,数据包已经被复制),段列表描述P2MP路径的子树,该子树从入口节点沿着对应分支前进。

具体地,段列表包括SR P2MP路径的对应树/子树中的每个节点或每个链路的组播SID,具体取决于示例。例如,每个组播SID可以包括组播块前缀、节点标识符和自变量。当组播SID引用节点时,组播SID块前缀、节点标识符和自变量可以根据组播SID 300和/或400实现为组播节点SID块、节点ID和自变量。在另一个示例中,每个组播SID可以包括组播邻接SID定位符、链路号和自变量。当组播SID引用链路时,组播邻接SID定位符、节点标识符和自变量可以根据组播邻接SID 600和/或700实现为组播邻接SID定位符、链路号和自变量。在任何一种情况下,每个组播SID的自变量都可以包括子树的与对应节点关联的分支的数量。这指示P2MP路径的下游分支的数量,这些下游分支直接从组播SID指定的节点的下游接口延伸。进一步,每个组播SID的自变量还可以包括对应节点下游的子树中包括的SID的数量。这指示P2MP路径中位于组播SID指定的节点的下游的组播节点的数量。通过相应于以上所描述的机制使用这些自变量,段列表以支持在网络上以无状态方式实现SR P2MP路径的方式描述SR P2MP路径。

在一些示例中,在步骤905中将段列表推送到数据包上可以包括从对应段列表中删除第一组播SID。段列表中的第一组播SID表示下一跳链路/节点,该下一跳链路/节点通过与P2MP路径的对应分支关联的下游接口直接连接到当前节点(例如,入口节点)。段列表中的指示沿着SR P2MP路径的树/子树的下一跳的第一组播SID被设置为数据包的目的地地址。

在步骤907中,当在步骤903中数据包被复制时,入口节点将第二段列表推送到数据包的副本上。当在步骤903中数据包被复制时,P2MP路径的两个或更多个分支直接从入口节点前进。因此,第二段列表描述了P2MP路径的第二子树,该第二子树从入口节点沿着对应分支(例如,第二分支)前进。因此,推送到数据包上的第一段列表和推送到数据包的副本上的第二段列表描述SR P2MP路径的不同子树。第二段列表可以包括与第一段列表基本相同的信息(例如,组播SID 300/400和/或组播邻接SID 600/700),但描述P2MP路径的不同子树。进一步,将第二段列表推送到数据包的副本中可以包括从第二段列表中删除第一组播SID。该组播SID表示下一跳链路/节点,该下一跳链路/节点通过与P2MP路径的对应分支关联的第二下游接口直接连接到当前节点(例如,入口节点)。第二段列表中的指示沿着SRP2MP路径的子树的下一跳的第一组播SID被设置为数据包的副本的目的地地址。

在步骤909中,入口节点例如通过与第一段列表关联的相关分支在沿着SR P2MP路径的第一下游接口上发送数据包。在步骤911中,入口节点例如通过与第二段列表关联的相关分支在沿着SR P2MP路径的第二下游接口上发送数据包的副本。由于第一接口和第二接口连接到P2MP路径的不同子树,所以数据包的副本通过与数据包不同的下游接口发送(例如,第一接口和第二接口是不同的接口)。

图10是IPv6网络(例如网络100)中的中间节点(例如中间节点103)和/或网络节点200沿着SR P2MP路径(例如P2MP路径107)转发数据包的示例方法1000的流程图。例如,中间节点可以接收包括上游段列表和指示中间节点的上游目的地地址的数据包。然后,中间节点可以可选地复制数据包,创建一个或多个下游段列表和/或下游目的地地址,并将这些下游段列表和/或下游目的地地址包括在对应数据包中,以用于沿着P2MP路径发送。在一个示例中,中间节点可以使用指示节点的组播SID,在这种情况下,中间节点可以使用包括组播SID 300和/或400的段列表,例如段列表500和/或501。在另一个示例中,中间节点可以使用指示链路的组播SID,在这种情况下,中间节点可以使用包括组播邻接SID 600和/或700的段列表,例如段列表800和/或801。需要说明的是,术语组播SID可以适用于指示节点的组播SID、指示链路的组播邻接SID,或其组合。

中间节点位于网络(如IPv6网络)中,并沿着基于SR的P2MP路径定位。但是,中间节点不存储SR P2MP路径的状态。因此,中间节点可能不知道SR P2MP路径。因此,中间节点根据数据包中包括的段列表和/或组播SID沿着P2MP路径转发数据包。因此,在步骤1001中,中间节点接收包括描述SR P2MP路径的一个或多个子树的上游段列表的数据包。该数据包还可以包括上游目的地地址,该上游目的地地址包括指示中间节点的组播SID。术语上游用于清楚讨论,并指示在来自上游方向的数据包中接收到这些信息。

在步骤1003中,中间节点根据上游段列表和/或上游目的地地址确定下游段列表。下游段列表描述了SR P2MP路径中包括的中间节点的下游接口的子树。根据上游段列表和/或上游目的地地址中的数据,中间节点还可以确定描述SR P2MP路径中包括的第二下游接口的第二子树的第二下游段列表。也可以如上游段列表和/或上游目的地地址所指示创建附加的下游段列表。例如,确定第二下游段列表可以包括:根据目的地地址中指示的分支的数量和每个下一跳节点的SID的数量,生成第二下游列表,以仅包括与第二下游接口的第二子树关联的组播SID。

例如,接收到的数据包包括标识中间节点的上游目的地地址。上游目的地地址包括自变量,自变量包括P2MP路径的分支的数量,这些分支通过连接直接从中间节点延伸到下游接口。上游目的地地址的分支的数量指示段列表中指示中间节点的下一跳节点的条目的数量。进一步,上游目的地地址包括中间节点下游的子树中包括的SID的数量。上游目的地地址中的SID的数量指示段列表中包括的组播SID的数量。此外,上游段列表包括与中间节点关联的子树中每个节点或每个链路的组播SID,具体取决于示例。如上所述,组播SID可以被格式化为通过使用组播SID 300和/或400和/或组播邻接SID 600和/或700等寻址节点或链路。组播SID中的每个都还可以包括对应节点下游的分支的数量和对应节点下游的任何子树中包括的SID的数量。

上述信息可以用于确定下游段列表。具体地,中间节点可以使用上游目的地地址中指示的分支的数量来确定下一跳节点的数量。应为每个下一跳节点创建段列表。例如,当分支的数量为3时,中间节点应为上游段列表中的前三个组播SID创建下游段列表。然后,中间节点可以使用每个下一跳节点的SID的数量来确定与每个下一跳节点关联的每个子树中的组播SID的数量。每个下一跳节点的对应组播SID可以包括在每个这种段列表中。例如,如果第一下一跳节点的组播SID包括设置为5的SID的数量,则与下一跳节点关联的最后一个条目之后的下五个条目被包括在第一下一跳节点的下游段列表中。然后,第二下一跳节点的组播SID中的SID的数量可以用于生成第二下一跳节点的下游段列表等,直到上游目的地地址中指示的所有组播SID都被标识为下一跳节点或包括在段列表中的一个段列表中。因此,中间节点可以生成下游段列表,该下游段列表仅包括与通过对应P2MP路径分支以中间节点为根的子树关联的组播SID,并包括直接连接到对应下游接口的下一跳节点。

在步骤1005中,中间节点可以复制数据包,以生成数据包的副本,以用于在中间节点的第二下游接口(以及第三下游接口、第四下游接口等)上发送。例如,中间节点可以使用上游目的地地址中指示的分支的数量来确定是否应该复制数据包以及复制数据包的次数。例如,中间节点应为由超过一个的上游目的地地址指示的每个分支复制一次数据包。

在步骤1007中,中间节点可以将接收到的数据包中包括的上游段列表替换为步骤1003中确定的对应(例如,第一)下游段列表。在步骤1005复制数据包的情况下,在步骤1009中,中间节点还可以将与数据包的副本关联的上游段列表替换为第二下游段列表。根据需要,可以在数据包的附加的副本中包括附加的段列表,以确保每个复制的数据包都收到对应段列表。需要说明的是,在步骤1005中复制数据包时,上游段列表可以被复制,也可以不被复制。例如,上游段列表替换为第二下游段列表替可以包括:复制包括上游段列表的数据包,然后将上游段列表替换为数据包的副本中的第二下游段列表。在其它示例中,将上游段列表替换为第二下游段列表包括:在复制之前从数据包中删除上游段列表,并使用封装算法将第二下游段列表推送到数据包的副本上。在任何一种情况下,将上游段列表替换为下游段列表(或第二下游段列表)可以包括:将沿着下游接口的对应子树的下一跳的组播SID设置为数据包的目的地地址,并从对应段列表中删除下一跳的组播SID。

在步骤1011中,中间节点向下游发送数据包。例如,数据包可以在沿着SR P2MP路径的下游接口上发送。进一步,数据包的副本可以在沿着SR P2MP路径的第二下游接口上发送。附加的数据包也可以沿着上游目的地地址中的分支的数量所指示的附加的下游接口发送,以确保数据包沿着穿过中间节点的P2MP路径的所有分支转发。

图11是用于在IPv6网络中维护SR P2MP路径的设备1100的实施例。例如,设备1100可以用于实现方法900和/或1000。进一步,设备1100可以用作节点,例如网络100中的网络节点200和/或入口节点101、中间节点103和/或出口节点105。在特定示例中,设备1100可以使用包括组播SID(例如组播SID 300和/或400)的段列表500和/或501。进一步,设备1100可以使用包括组播邻接SID(例如组播邻接SID 600和/或700)的段列表800和/或801。

在一个示例中,设备1100包括接收模块1101,用于接收数据包。设备1100还包括处理模块1103,用于将描述SR P2MP路径的段列表推送到数据包上。设备1100包括存储模块1105,用于存储数据包和/或段列表。设备1100还包括发送模块1107,用于在沿着SR P2MP路径的下游接口上发送数据包。

在另一个示例中,设备1100包括接收模块1101,用于接收包括描述SR P2MP路径的一个或多个子树的上游段列表的数据包。设备1100还包括处理模块1103,用于根据上游段列表确定描述SR P2MP路径中包括的中间节点的下游接口的子树的下游段列表。处理模块1103还用于将与数据包关联的上游段列表替换为下游段列表。设备1100包括存储模块1105,用于存储数据包和/或段列表。设备1100还包括发送模块1107,用于在沿着SR P2MP路径的下游接口上发送数据包。

当第一组件与第二组件之间除线、迹线或其它介质之外,没有中间组件时,第一组件与第二组件直接耦合。当第一组件与第二组件之间除了线、迹线或其它介质之外还有中间组件时,第一组件与第二组件间接耦合。术语“耦合”及其同义词包括直接耦合和间接耦合。除非另有说明,否则术语“大约”是指包括其后数量的±10%的范围。

还当该理解,本文中阐述的示例性方法的步骤不一定需要按所描述的顺序执行,并且这些方法的步骤的顺序应当理解为仅仅是示例性的。同理,在与本发明各种实施例相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或合并。

虽然本发明提供了若干个实施例,但应理解,在不偏离本发明的精神或范围的情况下,所公开的系统和方法可以通过其它多种具体形式体现。当前的这些示例被认为是说明性的而非限制性的,并且意图不限于本文给出的细节。例如,各种元件或组件可以组合或集成在另一个系统中,或者可以省略或不实现一些特征。

此外,在不脱离本发明的范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、组件、技术或方法组合或集成。其它变更、替换、更改示例能够由本领域技术人员确定,并且可以在不偏离本文公开的精神和范围的情况下进行。

相关技术
  • 建立多点到多点标签交换路径
  • 建立多点到多点标签交换路径
技术分类

06120115607424