路由信息传输方法、装置、系统及存储介质

文档序号:72680 发布日期:2021-10-01 浏览:4次 >En<

阅读说明:本技术 路由信息传输方法、装置、系统及存储介质 (Routing information transmission method, device, system and storage medium ) 是由 肖守和 任江兴 王临春 林云 亚利克斯·塔尔 于 2020-03-31 设计创作,主要内容包括:本申请提供一种路由信息传输方法、装置、系统及存储介质,系统包括多个叶子节点和至少一个脊节点。第一节点根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重,通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。第二节点根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数,并通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。从而降低链路拥塞的现象。(The application provides a routing information transmission method, a device, a system and a storage medium. The first node determines the load sharing weight from other nodes to the first node through the first interface of the first node according to the current state information of at least one interface of the first node, and sends the load sharing weight and hop count from other nodes to the first node through the first interface. The second node determines the load sharing weight of other nodes to the first node through the second interface of the second node according to the load sharing weight of the second node to the first node through at least one interface of the second node. And determining the hop count of other nodes to the first node through the second interface according to the hop count of the second node to the first node through at least one interface of the second node, and sending the load sharing weight and the hop count of other nodes to the first node through the second interface. Thereby reducing the phenomenon of link congestion.)

路由信息传输方法、装置、系统及存储介质

技术领域

本申请涉及通信

技术领域

,尤其涉及一种路由信息传输方法、装置、系统及存储介质。

背景技术

基于叶脊(Spine-Leaf)结构的Fabric网络在数据中心网络中得到了广泛地应用,基于(Spine-Leaf)结构的Fabric网络可以提供大多数计算和存储服务。典型的Fabric网络有Clos架构、Fat-Tree架构等网络。

在基于Spine-Leaf结构的Fabric网络中,通常去往任一叶子节点或者脊节点存在一条或者多条路径,即对于每个节点而言,其去往任一叶子节点或者脊节点的链路为一条或者多条,而各个链路的负载分担比例是固定的。例如:图1为本申请提供的一种负载分担示意图,如图1所示,L1到L2存在多条路径。上游L1去往S1、S2的负载分担比例为1:1,即便是在下游S1到L2的链路发生故障,该比例一直保持不变,从而导致S1到L2的链路发生拥塞现象。

综上,现有技术中,由于每个节点的各个链路的负载分担比例是固定不变的,当某些链路发生故障时,将会导致链路拥塞现象。

发明内容

本申请提供一种路由信息传输方法、装置、系统及存储介质,从而可以降低链路拥塞现象。

第一方面,本申请提供一种交换网络系统,包括:多个叶子节点和至少一个脊节点。第一节点是多个叶子节点中的一叶子节点。第二节点是至少一个脊节点中的一脊节点。第一节点用于:根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重,并通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数,第一接口是第一节点的至少一个接口中的一接口。第二节点用于:根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数,并通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数,第二接口是第二节点的至少一个接口中的一接口。

由于每个节点可以向其他节点发送负载分担权重和跳数,从而可快速将接口故障导致的下游带宽变化传递到上游,触发上游进行接口切换或者接口负载分担比例调整,从而降低链路拥塞的现象。

可选的,其他节点通过第一节点的第一接口到第一节点的负载分担权重和跳数携带在第一报文中。或者,其他节点通过第一节点的第一接口到第一节点的负载分担权重携带在第二报文中,其他节点通过第一节点的第一接口到第一节点的跳数携带在第三报文中。

可选的,第一报文还包括以下至少一项:第一报文的类型、第一报文的辅助标识、第一节点的标识、第一节点的数量。其中,第一报文的辅助报文用于标识第一报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。第二报文还包括以下至少一项:第二报文的类型、第二报文的辅助标识、第一节点的标识、第一节点的数量。其中,第二报文的辅助报文用于标识第二报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。第三报文还包括以下至少一项:第三报文的类型、第三报文的辅助标识、第一节点的标识、第一节点的数量。其中,第三报文的辅助报文用于标识第三报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。

可选的,第一节点具体用于:在第一节点的转发面上根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。而转发面是通过硬件逻辑电路、FPGA逻辑代码、可编程NP的微码、多核CPU软件代码实现,所以可以做到端到端毫秒级故障收敛。

可选的,第一节点具体用于:周期性地通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。或者,在第一接口发生故障时,通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。通过第二种方式发送负载分担权重和跳数,可以降低第一节点的开销。

可选的,第二节点还用于:接收第二节点通过第二节点的至少一个接口到第一节点的负载分担权重和跳数。

可选的,第二节点具体用于:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重。其中,若第二接口为上行接口且第二节点还存在其他上行接口,则水平分割组包括:第二接口和第二节点的其他上行接口。若第二接口为上行接口且第二节点不存在其他上行接口,则水平分割组包括:第二接口。若第二接口为水平接口且第二节点还存在其他水平接口,则水平分割组包括:第二接口和第二接口的其他水平接口。若第二接口为水平接口且第二节点不存在其他水平接口,则水平分割组包括:第二接口。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重。通过排除水平分割组的方式,可以防止报文传输出现的环路现象。

可选方式一:若第二接口为上行接口或者水平接口,则确定其他节点通过第二接口到第一节点的负载分担权重为第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重之和。若第二接口为下行接口,则确定其他节点通过第二接口到第一节点的负载分担权重为第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重之和。

可选方式二:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的数量、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。

可选方式三,第二节点具体用于:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的质量评估值、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的数量、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中最小非0跳数对应的接口的质量评估值、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。

通过上述三种方式均可以有效的计算其他节点通过第二节点的第二接口到第一节点的负载分担权重,从上述三种方式可知,由于每个节点可以向其他节点发送负载分担权重,从而可快速将接口故障导致的下游带宽变化传递到上游,触发上游进行接口切换或者接口负载分担比例调整。

可选的,第二节点具体用于:周期性地通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。或者,在第二接口发生故障时,通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。通过第二种方式发送负载分担权重和跳数,可以降低第二节点的开销。

可选的,其他节点通过第二节点的第二接口分别到第一节点的负载分担权重和跳数携带在第四报文中。或者,其他节点通过第二节点的第二接口分别到第一节点的负载分担权重携带在第五报文中,其他节点通过第二节点的第二接口分别到第一节点的跳数携带在第六报文中。

可选的,第四报文还包括以下至少一项:第四报文的类型、第四报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第四报文的辅助报文用于标识第四报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。第五报文还包括以下至少一项:第五报文的类型、第五报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第五报文的辅助报文用于标识第五报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。第六报文还包括以下至少一项:第六报文的类型、第六报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第六报文的辅助报文用于标识第六报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。

可选的,第二节点具体用于:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。通过该方式可以有效的得到其他节点通过第二接口到第一节点的跳数。

可选的,若第二接口为上行接口或者水平接口,则在第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的跳数中选择最小的非0跳数,并确定其他节点通过第二节点的第二接口到第一节点的跳数为非0跳数加1。若第二接口为下行接口,则在第二节点通过第二节点的至少一个接口到第一节点的跳数中选择最小的非0跳数,并确定其他节点通过第二节点的第二接口到第一节点的跳数为非0跳数加1。通过该方式可以有效的得到其他节点通过第二接口到第一节点的跳数。

可选的,第二节点具体用于:在第二节点的转发面上根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。而转发面是通过硬件逻辑电路、FPGA逻辑代码、可编程NP的微码、多核CPU软件代码实现,所以可以做到端到端毫秒级故障收敛。

可选的,若第二节点在预设时长内未接收到第二节点通过第二接口到第一节点的负载分担权重和/或跳数,则第二节点通过第二接口到第一节点的负载分担权重和跳数均为0。或者,若第二节点在预设时长内未接收到通过第二接口传输的检测报文,则第二节点通过第二接口到第一节点的负载分担权重和跳数均为0,检测报文用于检测第二接口是否存在异常。

下面将提供一种路由信息传输方法、设备、存储介质及计算机程序产品,其内容和效果可参考上述系统部分,对此不再赘述。

第二方面,本申请提供一种路由信息传输方法,方法应用于第一节点,其中,交换网络系统包括多个叶子节点和至少一个脊节点,第一节点是多个叶子节点中的一叶子节点。方法包括:根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数,第一接口是第一节点的至少一个接口中的一接口。

第三方面,本申请提供一种路由信息传输方法,方法应用于第二节点,其中,交换网络系统包括多个叶子节点和至少一个脊节点,第二节点是至少一个脊节点中的一脊节点。方法包括:根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数,第二接口是第二节点的至少一个接口中的一接口。

第四方面,本申请提供一种节点,包括:至少一个处理器。以及与至少一个处理器通信连接的存储器。其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行如第二方面或第三方面所述的方法。

第五方面,本申请提供一种存储有计算机指令的非瞬时计算机可读存储介质,计算机指令用于使计算机执行如第二方面或第三方面所述的方法。

第六方面,本申请提供一种计算机程序产品,其包括计算机指令,该指令用于使计算机执行如第二方面或第三方面所述的方法。

本申请提供一种路由信息传输方法、装置、系统及存储介质,首先,由于每个节点可以向其他节点发送负载分担权重和跳数,从而可快速将接口故障导致的下游带宽变化传递到上游,触发上游进行接口切换或者接口负载分担比例调整,从而降低链路拥塞的现象。其次,上述各个节点的功能均是在转发面实现的,而转发面是通过硬件逻辑电路、FPGA逻辑代码、可编程NP的微码、多核CPU软件代码实现,所以可以做到端到端毫秒级故障收敛。再次,如果节点的接口是上行接口,本申请通过排除水平分割组的方式可以防止环路情况。

附图说明

图1为本申请提供的一种负载分担示意图;

图2为本申请提供的Clos架构的示意图;

图3为本申请提供的Fat-Tree架构的示意图;

图4为本申请提供的混合多级Clos网络架构示意图;

图5为本申请提供变种Fat-Tree架构的示意图;

图6为本申请提供的一种基于Spine-Leaf结构的Fabric网络示意图;

图7为本申请一实施例提供的第二报文的格式示意图;

图8为本申请一实施例提供的第三报文的格式示意图;

图9为本申请一实施例提供的第一节点的示意图;

图10为本申请另一实施例提供的基于Spine-Leaf结构的Fabric网络示意图;

图11为本申请再一实施例提供的基于Spine-Leaf结构的Fabric网络示意图;

图12为本申请又一实施例提供的基于Spine-Leaf结构的Fabric网络示意图;

图13为本申请再一实施例提供的基于Spine-Leaf结构的Fabric网络示意图;

图14为本申请又一实施例提供的基于Spine-Leaf结构的Fabric网络示意图;

图15为本申请一实施例提供的第五报文的格式示意图;

图16为本申请一实施例提供的第六报文的格式示意图;

图17为本申请一实施例提供的第二节点的示意图;

图18为本申请再一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图;

图19为本申请又一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图;

图20为本申请再一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图;

图21为本申请又一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图;

图22为本申请再一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图;

图23为本申请又一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图;

图24为本申请再一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图;

图25为图6中的节点S3的链路类型表的示意图;

图26为图6的节点S3的链路水平分割掩码表的示意图;

图27为图6的节点S3的链路状态表的示意图;

图28为图6的节点S3的跳数表的示意图;

图29为图6的节点S3的权重表的示意图;

图30为图6的节点S3的跳数表的示意图;

图31为图6的节点L0的初始权重表的示意图;

图32为本申请一实施例提供的Fabric网络中节点的示意图;

图33为本申请又一实施例提供的基于Spine-Leaf结构的Fabric网络示意图;

图34为本申请一实施例提供的图33所示的Fabric网络的局部示意图;

图35为本申请另一实施例提供的图33所示的Fabric网络的局部示意图;

图36为本申请再一实施例提供的基于Spine-Leaf结构的Fabric网络示意图;

图37为本申请一实施例提供的图36所示的Fabric网络的局部示意图;

图38为本申请另一实施例提供的图36所示的Fabric网络的局部示意图;

图39为本申请一实施例提供的一种路由信息传输方法的流程图;

图40为本申请另一实施例提供的一种路由信息传输方法的流程图;

图41为本申请一实施例提供的一种节点800的示意图;

图42为本申请一实施例提供的第一节点的示意图;

图43为本申请一实施例提供的第二节点的示意图。

具体实施方式

如上所述,在基于Spine-Leaf结构的Fabric网络中,对于每个节点而言,其去往任一叶子节点或者脊节点的链路为一条或者多条,而各个链路的负载分担比例是固定的。而由于每个节点的各个链路的负载分担比例是固定不变的,当某些链路发生故障时,将会导致链路拥塞现象。

为了解决上述技术问题,本申请提供一种路由信息传输方法、装置、系统及存储介质。本申请的发明构思是:每个节点可以通过自己的每个接口发送其他节点通过该接口到任一叶子节点的负载分担权重和跳数,与上述每个节点直连的节点将根据上述其他节点通过该接口到任一叶子节点的负载分担权重确定其他节点通过自己的接口到任一叶子节点的负载分担权重,并根据上述其他节点通过该接口到任一叶子节点的跳数确定其他节点通过自己的接口到任一叶子节点的跳数。通过上述思路,可知任一接口上的负载分担权重发生变化时,将会使得全网中的节点都可以根据这一变化,调整自己的接口上的负载分担权重。从而可以缓解链路拥塞现象。

本申请适用于各种包括多个叶子节点和至少一个脊节点的Fabric网络,即适用于各种基于Spine-Leaf结构的Fabric网络。典型的Fabric网络有Clos架构和Fat-Tree架构,其中Fat-Tree架构其网络层次可以是2层、3层或更多层。例如:图2为本申请提供的Clos架构的示意图,如图2所示,该Clos架构是由一层叶子节点和一层脊节点构成,每个脊节点都与每个叶子节点直连。图3为本申请提供的Fat-Tree架构的示意图,其中包括两层脊节点和一层叶子节点,其中两个叶子节点以及它们直连的两个脊节点构成一个汇聚区域(Pointof Delivery,POD)。本申请还适用于如下多级混合结构,图4为本申请提供的混合多级Clos网络架构示意图,如图4所示,这种多级混合结构对应于部分叶子节点拉远场景。图5为本申请提供变种Fat-Tree架构的示意图,其中上面两层为脊节点层,最下面一层为叶子节点层。

上述基于Spine-Leaf结构的Fabric网络中的任一节点可以是路由器或者交换机的部分或者全部等,其中路由器的部分可以是路由器中的处理器或者芯片等。同样的,交换机的部分可以是交换机中的处理器或者芯片等同样。叶子节点一般用于连接服务器,以实现各个服务器通过基于Spine-Leaf结构的Fabric网络来进行报文传输。

下面将对本申请技术方案进行详细阐述:

本申请提供一种交换网络系统,该交换网络系统即为上述的基于Spine-Leaf结构的Fabric网络,其包括:多个叶子节点和至少一个脊节点。例如:该交换网络系统可以图2所示的Clos网络架构、图3所示的Fat-Tree网络架构、图4所示的混合多级Clos网络架构或者图5所示的变种Fat-Tree网络架构,当然,该交换网络系统还可以是其他类型的基于Spine-Leaf结构的Fabric网络。例如:图6为本申请提供的一种基于Spine-Leaf结构的Fabric网络示意图,如图6所示,该网络架构包括两层脊节点层和一层叶子节点层,其中图6中用S表示脊节点,L表示叶子节点。本申请下面将以图6所示的网络架构为例,对本申请技术方案进行解释说明:首先,需要说明的是,在本申请中第一节点是上述多个叶子节点中的一个叶子节点。第二节点是上述至少一个脊节点中的一个脊节点。第一节点用于根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重,并通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数,第一接口是第一节点的至少一个接口中的一接口。第二节点用于根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数,并通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数,第二接口是第二节点的至少一个接口中的一接口。

上述第一节点的至少一个接口可以是第一节点的全部接口,也可以是第一节点的可用接口,即可以使用的接口,也被称为使能接口。

可选的,第一节点的至少一个接口的当前状态信息包括以下至少一项:第一节点的至少一个接口分别对应的当前带宽信息、第一节点的至少一个接口中的可用接口比例、第一节点的至少一个接口分别对应的质量评估值、第一节点的至少一个接口分别对应的队列平均长度。其中每个接口的质量评估值可以根据该接口的历史故障次数和历史传输总次数的比例确定,但不限于此。其中该比例越高,则表示该接口的质量评估值越低。相反,该比例越低,则表示该接口的质量评估值越高。针对任一接口,只有该接口的物理线路忙时,才会将报文或者数据存入该接口对应的队列中。在将报文存入对应队列时,如果该队列的当前长度超过最大可用长度,则丢包。而上述接口对应的队列平均长度指的是在预设时间段内,该接口对应的队列的实际使用长度的平均值,该平均值用于衡量该队列对应的接口的拥塞程度,平均长度越大说明接口越拥塞。相反地,某个接口的队列平均长度越短,说明对应接口越不拥塞。

例如:以第一节点是图6中的L0为例,它包括四个接口,分别是接口0、1、2、3,它们分别对应的当前带宽信息是100M、50M、100M、50M,按照四个接口对应的当前带宽信息比例为:2:1:2:1,因此令接口0、1、2、3的负载分担权重分别为2、1、2、1。

例如:假设L0的四个接口0、1、2、3的可用接口比例为1/2,这种情况下,假设L0可以获取到可用接口比例与四个接口的负载分担权重的对应关系,例如通过查表的方式,确定当可用接口比例为1/2时,接口0、1、2、3的负载分担权重分别为2、1、2、1。

例如:假设L0的四个接口0、1、2、3,它们分别对应的质量评估值是10、5、10、5,按照四个接口对应的质量评估值比例为:2:1:2:1,因此令接口0、1、2、3的负载分担权重分别为2、1、2、1。

例如:假设L0的四个接口0、1、2、3,它们分别对应的队列平均长度是200、100、200、100,按照四个接口对应的队列平均长度为:2:1:2:1,因此令接口0、1、2、3的负载分担权重分别为1、2、1、2。

上面所举的例子分别是当第一节点的至少一个接口的当前状态信息是第一节点的至少一个接口分别对应的当前带宽信息、第一节点的至少一个接口中的可用接口比例、第一节点的至少一个接口分别对应的质量评估值、第一节点的至少一个接口分别对应的队列平均长度时,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。但不限于此,实际上,第一节点还可以对上述四种方式进行任意组合,以确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。例如:通过上述四种方式分别得到了接口0、1、2、3对应的四组负载分担权重,对这四组负载分担权重可以求平均值,以得到最终的负载分担权重。

其他节点通过第一节点的第一接口到第一节点的负载分担权重指的是:在其他节点向第一节点传输报文或者数据时,该第一接口与第一节点的其他接口相比较,第一接口所承载的报文比例或者数据比例。即负载分担权重可用做转发时的负载分担比例。例如:其他节点通过L0的接口0到L0的负载分担权重为2,表示其他节点向L0传输报文或者数据时,该接口0与L0的其他接口相比,接口0所承载的报文比例或者数据比例为2。

其他节点通过第一接口到第一节点的跳数指的是:当其他节点要通过第一接口向第一节点发送报文或者数据时需要的跳数,其中跳数0表示不可达,跳数非0表示可达。

值得一提的是:第一节点作为发送方,其只是通过自己的接口向外发送其他节点通过第一接口到第一节点的负载分担权重和跳数,而对于接收到上述其他节点通过第一接口到第一节点的负载分担权重和跳数的节点而言,其作为接收方,它所接收到的负载分担权重和权重,被认为是该接收方通过自己的接口到第一节点的负载分担权重和跳数。例如:在图6中,假设第一节点是L0,第二节点是S0,L0通过它自己的接口0向外发送其他节点通过L0的接口0到L0的负载分担权重为2,跳数为1;对于S0而言,它通过自己的接口0接收到的是L0通过L0的接口0发送的负载分担权重,因此,S0可以认为该负载分担权重为S0通过自己的接口0到L0的负载分担权重为2。S0通过自己的接口0接收到的是L0通过L0的接口0发送的跳数,因此,S0可以认为该跳数为S0通过自己的接口0到L0的跳数为1。类似的,L0通过它自己的接口2向外发送其他节点通过L0的接口2到L0的负载分担权重为2,跳数为1;对于S0而言,它通过自己的接口2接收到的是L0通过L0的接口2发送的负载分担权重,因此,S0可以认为该负载分担权重为S0通过自己的接口2到L0的负载分担权重为2。S0通过自己的接口2接收到的是L0通过L0的接口2发送的跳数,因此,S0可以认为该跳数为S0通过自己的接口2到L0的跳数为1。

可选的,第一节点周期性地通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。例如:第一节点每隔10秒,通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。需要说明的是,由于第一节点的至少一个接口的网络状态可能会发生变化,因此,第一节点多次通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数可能不同。当然,由于第一节点的至少一个接口的网络状态可能没有发生变化,因此,第一节点多次通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数也可能相同。此外,第一节点发送上述负载分担权重和跳数的周期可以相同,也可以不同。第一节点发送上述负载分担权重和跳数的周期可根据整网性指标要求和节点硬件架构确定,如果采用硬件电路实现,则可做到微妙级。下面针对第二节点所描述的周期性发送负载分担权重和跳数与第一节点的情况类似,下面对此不再赘述。

或者,

可选的,在第一接口发生故障时,第一节点通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。即只有其他节点通过第一接口到第一节点的负载分担权重和/或跳数发生变化时,第一节点才通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。通过这种方式可以节省第一节点的资源开销。

可选的,其他节点通过第一节点的第一接口到第一节点的负载分担权重和跳数携带在第一报文中。即其他节点通过第一节点的第一接口到第一节点的负载分担权重和跳数携带在同一报文中。其中,第一报文还包括以下至少一项:第一报文的类型、第一报文的辅助标识、第一节点的标识、第一节点的数量。其中,第一报文的辅助报文用于标识第一报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。

或者,

可选的,其他节点通过第一节点的第一接口到第一节点的负载分担权重携带在第二报文中,其他节点通过第一节点的第一接口到第一节点的跳数携带在第三报文中。即其他节点通过第一节点的第一接口到第一节点的负载分担权重和跳数分别携带在不同报文中。其中,第二报文还包括以下至少一项:第二报文的类型、第二报文的辅助标识、第一节点的标识、第一节点的数量。其中,第二报文的类型可以是负载分担权重类型。第二报文的辅助报文用于标识第二报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。第三报文还包括以下至少一项:第三报文的类型、第三报文的辅助标识、第一节点的标识、第一节点的数量。其中,第三报文的类型是跳数类型,也被称为可达性报文类型。第三报文的辅助报文用于标识第三报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。

示例性地,图7为本申请一实施例提供的第二报文的格式示意图,如图7所示,字节0位置填写的是第二报文的类型,字节1位置填写的是第二报文的辅助标识、字节2和3位置填写的是第一节点的标识,例如:第一节点是L0,那么字节2和3填写的就是L0的标识。字节4和5位置填写的是第一节点的数量1。字节6位置填写的是其他节点通过第一节点的第一接口到第一节点的负载分担权重。

示例性地,图8为本申请一实施例提供的第三报文的格式示意图,如图8所示,字节0位置填写的是第三报文的类型,字节1位置填写的是第三报文的辅助标识、字节2和3位置填写的是第一节点的标识,例如:第一节点是L0,那么字节2和3填写的就是L0的标识。字节4和5位置填写的是第一节点的数量1。字节6位置填写的是其他节点通过第一节点的第一接口到第一节点的跳数。

可选的,第一节点在自己的转发面上根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。其中,图9为本申请一实施例提供的第一节点的示意图,如图9所示,第一节点包括:控制面(也被称为控制平面)和转发面(也被称为转发平面),其中控制面的功能由第一节点中的中央处理器(CentralProcessing Unit,CPU)实现,转发面的功能由第一节点中的网络处理器(NetworkProcessor,NP)、现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)、专用集成电路(Application Specific Integrated Circuit,ASIC)或者多核CPU实现。

若第一节点在自己的转发面上根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。且转发面是由NP实现,则第一节点可以采用NP的编程语言在微码中新增功能来实现上述第一节点的执行动作。

若第一节点在自己的转发面上根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。且转发面是由ASIC实现,则需要在ASIC中新增硬件逻辑电路来实现上述第一节点的执行动作。

若第一节点在自己的转发面上根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。且转发面是由FPGA实现,则需要在FPGA的逻辑代码中新增模块来实现上述第一节点的执行动作。

若第一节点在自己的转发面上根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。且转发面是由多核CPU实现,则需要在其多核CPU的软件代码中新增模块来实现上述第一节点的执行动作。

总之,第一节点可以通过硬件电路、逻辑或者微码等实现上述第一节点的执行动作,从而到达毫秒级收敛时间。

可选的,对于第二节点而言,其可以存储有第二节点通过第二节点的至少一个接口到第一节点的负载分担权重和跳数。第二节点通过第二节点的至少一个接口到第一节点的负载分担权重和跳数可以分别以表格形式存储,也可以一起以表格形式存储,横向为接口列表,纵向为叶子节点列表,表项数量=LinkNum*LeafNum,LinkNum表示第二节点的接口数量,LeafNum表示上述交换网络系统中的叶子节点的数量,每个表项包含两个字段(跳数,权重)。初始时默认每个表项为(0,0)。例如:表1为图6中节点S0所维护的表格,由于S0通过自己的接口0接收到S0通过接口0到L0的负载分担权重为2,跳数为1,因此在表格中的第一行第一列填写的是(1,2),1表示跳数,2表示负载分担权重。由于S0通过自己的接口2接收到S0通过接口2到L0的负载分担权重为2,跳数为1,因此在表格中的第一行第三列填写的是(1,2),1表示跳数,2表示负载分担权重。由于S0通过自己的接口1接收到S0通过接口1到L0的负载分担权重为1,跳数为1,因此在表格中的第二行第二列填写的是(1,1),第一个1表示跳数,第二个1表示负载分担权重。由于S0通过自己的接口3接收到S0通过接口3到L0的负载分担权重为1,跳数为1,因此在表格中的第二行第四列填写的是(1,1),第一个1表示跳数,第二个1表示负载分担权重。

表1

接口0 接口1 接口2 接口3 接口4 接口5
L0 1 2 0 0 1 2 0 0 0 0 0 0
L1 0 0 1 1 0 0 1 1 0 0 0 0
L2 0 0 0 0 0 0 0 0 0 0 0 0
L3 0 0 0 0 0 0 0 0 0 0 0 0

如上所述,第二节点通过第二节点的至少一个接口到所有叶子节点的负载分担权重和跳数可以以表格形式存储,该表格可以被称为跳数权重表,当第二节点进行报文或者数据转发时,可以根据该跳数权重表更新转发表,用于指导报文或者数据的转发,或者,第二节点也可以将该跳数权重表作为转发表来指导报文的转发。

第二节点通过第二接口到第一节点的负载分担权重指的是:在第二节点通过第二接口向第一节点传输报文或者数据时,该第二接口与第二节点的其他接口相比较,第二接口所承载的报文比例或者数据比例。即该负载分担权重可用做第二节点在转发报文或者数据时的负载分担比例。例如:图6中的S0通过自己的L0的接口0到L0的负载分担权重为2,表示S0向L0传输报文或者数据时,该接口0与S0的其他接口相比,接口0所承载的报文比例或者数据比例为2。

第二节点通过第二接口到第一节点的跳数指的是:当第二节点要通过第二接口向第一节点发送报文或者数据时需要的跳数,其中跳数0表示不可达,跳数非0表示可达。

其他节点通过第二节点的第二接口到第一节点的负载分担权重指的是:在其他节点通过第二节点向第一节点传输报文或者数据时,该第二接口与第二节点的其他接口相比较,第二接口所承载的报文比例或者数据比例。即负载分担权重可用做转发时的负载分担比例。

其他节点通过第二接口到第一节点的跳数指的是:当其他节点要通过第二接口向第一节点发送报文或者数据时需要的跳数,其中跳数0表示不可达,跳数非0表示可达。

对于第二节点而言,当第二节点的第二接口正常时,第二节点可以通过第二接口接收到其通过第二接口到第一节点的负载分担权重和跳数,这种情况下,第二节点确定其通过第二接口到第一节点的负载分担权重和跳数是其实际接收到的其通过第二接口到第一节点的负载分担权重和跳数。例如:图6中的S0通过自己的接口0接收到其通过接口0到L0的负载分担权重为2,跳数是1,这种情况下,S0确定其通过接口0到L0的负载分担权重和跳数分别是2和1。相反地,若第二节点在预设时长内未接收到第二节点通过第二接口到第一节点的负载分担权重和/或跳数,则第二节点通过第二接口到第一节点的负载分担权重和跳数均为0。其中该预设时长可以根据实际情况设置,比如可以设置为10秒、20秒等,本申请对此不做限制。例如:若S0在10秒内未接收到S0通过其自己的接口0到L0的负载分担权重和/或跳数,则S0认为接口0存在故障,这时S0认为通过接口0到L0的负载分担权重和跳数均为0。或者,若第二节点在预设时长内未接收到通过第二接口传输的检测报文,则第二节点通过第二接口到第一节点的负载分担权重和跳数均为0,检测报文用于检测第二接口是否存在异常。例如:若S0在10秒内未接收到通过自己的接口0传输的检测报文,则S0认为接口0存在故障,这时S0也认为通过接口0到L0的负载分担权重和跳数均为0。该检测报文也可以是周期性的发送。其中检测报文的发送周期相对于负载分担权重和跳数的发送周期小,并且在检测到故障时再紧急触发负载分担权重和跳数的发送,即上述的在检测到接口故障时,才发送负载分担权重和跳数,从而可以降低节点开销。

需要说明的是,当第二节点不是叶子节点的直连节点时,其将通过第二接口接收到其通过第二接口到至少一个叶子节点的负载分担权重和/或跳数,这时若第二节点在预设时长内,第二接口通过第二接口未接收其到任何叶子节点的负载分担权重和/或跳数,则第二节点认为第二接口发生故障。如果针对一个叶子节点,即上面的第一节点,也被理解为在预设时长内,第二接口通过第二接口未接收其到任何叶子节点的负载分担权重和/或跳数。

在介绍第二节点确定其他节点通过第二接口到第一节点的负载分担权重和跳数之前,下面首先介绍水平分割组以及分组水平分割算法的定义。

分组水平分割算法用于在计算可达性时防止产生环路,将脊节点的所有上行接口划分为一个水平分割组。将连接同一脊节点的所有水平接口划分为一个水平分割组。在同一个水平分割组内的链路收到的负载分担权重和跳数,不在同一组内扩散发送。

其中,上述脊节点的上行接口也被称为该脊节点的上行链路,这里的“上行接口”指的是在基于Spine-Leaf结构的Fabric网络中该脊节点与其上层的节点之间的接口。例如:图10为本申请另一实施例提供的基于Spine-Leaf结构的Fabric网络示意图,如图10所示,S0的接口4和5就是它的上行接口。脊节点的水平接口也被称为背靠背链路,这里的“水平接口”指的是在基于Spine-Leaf结构的Fabric网络中该脊节点与其同层节点(也被称为同级节点)之间的接口,例如:如图10所示,S4的接口4和5都是水平接口。下面将要提到的脊节点的下行接口也被称为该脊节点的下行链路。这里的“下行接口”指的是在基于Spine-Leaf结构的Fabric网络中该脊节点与其下层节点之间的接口,例如:S4节点的接口0、1、2和3均是它的下行接口。

如图10所示,S3的接口4和5被划分为一个水平分割组,S4的接口4和5被划分为一个水平分割组。如上图10所示,S3在通过接口4发送其他节点通过该接口4到L0的负载分担权重和跳数时,由于S3的接口5与接口4属于同一个水平分割组,所以在S3计算其他节点通过S3的接口4和接口5到L0的负载分担权重时,排除掉S3通过接口4和接口5到L0的负载分担权重和跳数。相反的,如果在S3计算其他节点通过S3的接口4和接口5到L0的负载分担权重时,未排除掉S3通过接口4和接口5到L0的负载分担权重和跳数,那么如图10所示,按照上面的计算负载分担权重的方式一和计算跳数的方式,可知S3计算其他节点通过S3的接口4到L0的负载分担权重为8,跳数是3+1=4,在S4向L0进行报文转发时,将会通过S4的接口3(其与S3的接口4连接)

需要说明的是,当某脊节点只有一条上行接口,该上行接口会被单独划分为一个水平分割组。例如:假设图10所示的S3只有上行接口4,没有上行接口5,那么上行接口4也被划分为一个水平分割组。

第二节点具体用于:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重。其中,若第二接口为上行接口且第二节点还存在其他上行接口,则水平分割组包括:第二接口和第二节点的其他上行接口。若第二接口为上行接口且第二节点不存在其他上行接口,则水平分割组包括:第二接口。若第二接口为水平接口且第二节点还存在其他水平接口,则水平分割组包括:第二接口和第二接口的其他水平接口。若第二接口为水平接口且第二节点不存在其他水平接口,则水平分割组包括:第二接口。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重。

可选方式一:若第二接口为上行接口或者水平接口,则确定其他节点通过第二接口到第一节点的负载分担权重为第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重之和;若第二接口为下行接口,则确定其他节点通过第二接口到第一节点的负载分担权重为第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重之和。其中,本申请中所提到的“最小非0跳数对应的接口”指的是在第二节点通过第二节点的至少一个接口到第一节点的跳数中选择最小的非0跳数,该最小非0跳数对应的接口。下面对此不再说明。例如:图11为本申请再一实施例提供的基于Spine-Leaf结构的Fabric网络示意图,如图11所示,对于S0,其至少一个接口是0至5,假设S0的第二接口是接口0,由于接口0是S0的上行接口,该接口0所在的水平分割组包括S0的接口0-2,因此确定其他节点通过S0的接口0到L0的负载分担权重(即W0)为S0通过S0的接口3-5(最小非0跳数对应的接口)的负载分担权重之和,其中S0的接口3-5的负载分担权重均是1,因此,W0=1+1+1=3。确定其他节点通过S0的接口1到L0的负载分担权重(即W1)为S0通过S0的接口3-5的负载分担权重之和,其中S0的接口3-5的负载分担权重均是1。因此,W1=1+1+1=3。确定其他节点通过S0的接口2到L0的负载分担权重(即W2)为S0通过S0的接口3-5的负载分担权重之和,其中S0的接口3-5的负载分担权重均是1。因此,W2=1+1+1=3。同理可得,确定其他节点通过S1的接口0到L0的负载分担权重(即W3)为S1通过S1的接口3-5的负载分担权重之和,其中S1的接口3-5的负载分担权重均是1,因此,W3=1+1+1=3。确定其他节点通过S1的接口1到L0的负载分担权重(即W4)为S1通过S1的接口3-5的负载分担权重之和,其中S1的接口3-5的负载分担权重均是1。因此,W4=1+1+1=3。确定其他节点通过S1的接口3到L0的负载分担权重(即W5)为S1通过S1的接口3-5的负载分担权重之和,其中S1的接口3-5的负载分担权重均是1。因此,W5=1+1+1=3。对于S8,其至少一个接口是接口0至9,假设第二接口是接口6,由于它是上行接口,该接口6所在的水平分割组包括S8的接口6至9,则确定其他节点通过S8的接口6到L0的负载分担权重(即W6)为S8的接口0-5的负载分担权重之和,因此,W6=3+3+3+3+3+3=18。同理可得,W7=18,W8=18,W9=18。

图12为本申请又一实施例提供的基于Spine-Leaf结构的Fabric网络示意图,如图12所示,图12和图11的区别在于,S8的接口3发生了故障,即W3=0,基于此,计算得到的W6=W7=W8=W9=W0+W1+W2+W4+W5=12。

可选方式二:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的数量、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重;若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。假设第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重之和用TotalWeights表示,其中当第二节点的至少一个接口中除水平分割组之外的接口中存在故障接口,那么该故障接口所对应的负载分担权重为0;第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的数量用NextHopTotalNum表示,当第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口中存在故障接口,该NextHopTotalNum包括故障接口的数量;第二节点的接口数量用UpLinkGroupTotalNum表示,第二节点的正常接口数量用UpLinkGroupNormalNum表示,其他节点通过第二节点的第二接口到第一节点的负载分担权重用w表示,则w可以通过如下公式(1)计算得到:

需要说明的是,上述公式(1)不是计算w的唯一方法,还可以对上述公式进行变形,以得到w,本申请对此不做限制。

示例性地,图13为本申请再一实施例提供的基于Spine-Leaf结构的Fabric网络示意图,如图13所示,对于S0,其至少一个接口是0至5,假设S0的第二接口是接口0,由于接口0是S0的上行接口,该接口0所在的水平分割组包括S0的接口0-2,因此确定其他节点通过S0的接口0到L0的负载分担权重(即W0)通过公式(1)计算得到:

同理可得,W1=W2=W3=W4=W5=100。类似的方法得到,W6=W7=W8=W9=100。

图14为本申请又一实施例提供的基于Spine-Leaf结构的Fabric网络示意图,如图14所示,图14和图13的区别在于,S0的接口3、S8的接口3、S2的接口0发生了故障,基于此,通过公式(1)计算得到:

可选方式三:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的质量评估值、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的数量、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重;若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中最小非0跳数对应的接口的质量评估值、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。假设第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重分别为w1,w2……wn,第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口分别对应的质量评估值为q1,q2……qn,其中每个接口对应的质量评估值的取值范围在0至100,如果某接口的质量评估值为0,则表示该接口为故障接口或者表示该接口对应的队列已满,会发生丢包情况。如果某接口的质量评估值为100,则表示该接口是正常接口,可以正常实现的报文或者数据传输。如果某接口的质量评估值在0和100之间,则表示该接口对应的链路拥塞程度,数值越大,则表示链路拥塞程度越低,数值越小,则表示链路拥塞程度越高。第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重和质量评估值构成的加权平均结果用TotalWeights表示;第二节点的至少一个接口中除水平分割组之外的接口的数量用NextHopTotalNum表示,当第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口中存在故障接口,该NextHopTotalNum包括故障接口的数量;第二节点的接口数量用UpLinkGroupTotalNum表示,第二节点的正常接口数量用UpLinkGroupNormalNum表示,其他节点通过第二节点的第二接口到第一节点的负载分担权重用w表示,则w可以通过如下公式(2)计算得到:

需要说明的是,上述公式(2)不是计算w的唯一方法,还可以对上述公式进行变形,以得到w,本申请对此不做限制。

在计算他节点通过第二接口到第一节点的跳数时,第二节点具体用于:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。

可选的,若第二接口为上行接口或者水平接口,则第二节点在第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的跳数中选择最小的非0跳数,并确定其他节点通过第二节点的第二接口到第一节点的跳数为非0跳数加1。若第二接口为下行接口,则第二节点在第二节点通过第二节点的至少一个接口到第一节点的跳数中选择最小的非0跳数,并确定其他节点通过第二节点的第二接口到第一节点的跳数为非0跳数加1。例如:如表1所示,其是图6中节点S0所维护的表格,从表1可以看出,S0的接口4和5属于一个水平分割组,排除掉该水平分割组,S0通过接口0和2到L0的跳数为非0,分别是1和1,即最小的非0跳数为1,基于此,其他节点通过S0的第二接口到L0的跳数为2,例如:S4通过S0的接口4到L0的跳数为2。

可选的,第二节点周期性地通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。例如:第二节点每隔10秒,通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。需要说明的是,由于第二节点的至少一个接口的网络状态可能会发生变化,因此,第二节点多次通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数可能不同。当然,由于第二节点的至少一个接口的网络状态可能没有发生变化,因此,第二节点多次通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数也可能相同。

或者,

可选的,在第二接口发生故障时,第二节点通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。即只有其他节点通过第二接口到第一节点的负载分担权重和/或跳数发生变化时,第二节点才通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。通过这种方式可以节省第二节点的资源开销。

可选的,其他节点通过第二节点的第二接口分别到第一节点的负载分担权重和跳数携带在第四报文中。或者,其他节点通过第二节点的第二接口分别到第一节点的负载分担权重携带在第五报文中,其他节点通过第二节点的第二接口分别到第一节点的跳数携带在第六报文中。

可选的,第四报文还包括以下至少一项:第四报文的类型、第四报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第四报文的辅助报文用于标识第四报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。第五报文还包括以下至少一项:第五报文的类型、第五报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第五报文的类型是负载分担权重类型。第五报文的辅助报文用于标识第五报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。第六报文还包括以下至少一项:第六报文的类型、第六报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第六报文的类型是跳数类型,也被称为可达性报文类型。第六报文的辅助报文用于标识第六报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。

示例性地,图15为本申请一实施例提供的第五报文的格式示意图,如图15所示,字节0位置填写的是第五报文的类型,字节1位置填写的是第五报文的辅助标识、字节2和3位置填写的是上述多个叶子节点中的首个叶子节点的标识,例如:图6所示的多个叶子节点分别是L0、L1、L2和L3,它们中的首个叶子节点是L0,假设它的标识就是L0,那么字节2和3填写的就是L0的标识。字节4和5位置填写的是上述多个叶子节点的数量,以图6所示的网络架构为例,这种情况下多个叶子节点的数量为4。字节6位置填写的是其他节点通过第二节点的第二接口到第一节点的负载分担权重,其中存在多少个叶子节点,也就是存在多少个第一节点,这里的负载分担权重就存在多少个,例如:假设第二节点是图6中的S0,S0的的第二接口是它的接口0,那么其他节点通过S0的接口0到各个叶子节点的负载分担权重均在第五报文中携带,它们分别是2、0、0、0。

示例性地,图16为本申请一实施例提供的第六报文的格式示意图,如图16所示,字节0位置填写的是第六报文的类型,字节1位置填写的是第六报文的辅助标识、字节2和3位置填写的是上述多个叶子节点中的首个叶子节点的标识,例如:图6所示的多个叶子节点分别是L0、L1、L2和L3,它们中的首个叶子节点是L0,假设它的标识就是L0,那么字节2和3填写的就是L0的标识。字节4和5位置填写的是上述多个叶子的数量4。字节6位置填写的是其他节点通过第二节点的第二接口到第一节点的跳数,其中存在多少个叶子节点,也就是存在多少个第一节点,这里的跳数就存在多少个,例如:假设第二节点是图6中的S0,S0的的第二接口是它的接口0,那么其他节点通过S0的接口0到各个叶子节点的跳数均在第六报文中携带,它们分别是1、0、0、0。

可选的,第二节点具体用于:在第二节点的转发面上根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。其中,图17为本申请一实施例提供的第二节点的示意图,如图17所示,第二节点包括:控制面(也被称为控制平面)和转发面(也被称为转发平面),其中控制面的功能由第二节点中的CPU实现,转发面的功能由第二节点中的NP、FPGA、ASIC或者多核CPU实现。

若上述第二节点的功能在第二节点的转发面实现,且转发面是由NP实现,则第二节点可以采用NP的编程语言在微码中新增功能来实现上述第二节点的执行动作。

若上述第二节点的功能在第二节点的转发面实现,且转发面是由ASIC实现,则需要在ASIC中新增硬件逻辑电路来实现上述第二节点的执行动作。

若上述第二节点的功能在第二节点的转发面实现,且转发面是由FPGA实现,则需要在FPGA的逻辑代码中新增模块来实现上述第二节点的执行动作。

若上述第二节点的功能在第二节点的转发面实现,且转发面是由多核CPU实现,则需要在其多核CPU的软件代码中新增模块来实现上述第二节点的执行动作。

总之,第一节点可以通过硬件电路、逻辑或者微码等实现上述第二节点的执行动作,从而到达毫秒级收敛时间。

下面将结合图6所示的网络架构对本申请技术方案进行示例性说明:

图6所示的第一节点(即每个叶子节点)用于根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重,并通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数,第一接口是第一节点的至少一个接口中的一接口。如上所述,第一节点的至少一个接口的当前状态信息包括以下至少一项:第一节点的至少一个接口分别对应的当前带宽信息、第一节点的至少一个接口中的可用接口比例、第一节点的至少一个接口分别对应的质量评估值、第一节点的至少一个接口分别对应的队列平均长度。

例如:图6中L0和L1中圆圈中的数字1表示L0、L1通过自己的接口发送第一报文。其中,L0通过自己的接口0发送其他节点通过接口0到L0的负载分担权重和跳数,其中权重为2,跳数为1,如果二者携带在同一个第一报文中,该第一报文中的字段StartLeafID=0,ItemNum=1,HopNum=1,Weight=2,其中,StartLeafID表示该L0的标识,ItemNum表示该L0的数量,HopNum表示其他节点通过接口0到L0的跳数,Weight表示其他节点通过接口0到L0的跳数。

同样L0通过自己的接口2发送其他节点通过接口2到L0的负载分担权重和跳数,其中权重为2,跳数为1,如果二者携带在同一个第一报文中,该第一报文中的字段StartLeafID=0,ItemNum=1,HopNum=1,Weight=2。

L0通过自己的接口1发送其他节点通过接口1到L0的负载分担权重和跳数,该权重为1,跳数也为1,即第一报文中的字段StartLeafID=0,ItemNum=1,HopNum=1,Weight=1。

L0通过自己的接口3发送其他节点通过接口3到L0的负载分担权重和跳数,该权重为1,跳数也为1,即第一报文中的字段StartLeafID=0,ItemNum=1,HopNum=1,Weight=1。

L1通过自己的接口0发送其他节点通过接口0到L1的负载分担权重和跳数,其中权重为1,跳数为1,如果二者携带在同一个第一报文中,该第一报文中的字段StartLeafID=0,ItemNum=1,HopNum=1,Weight=1。

L1通过自己的接口1发送其他节点通过接口1到L1的负载分担权重和跳数,其中权重为1,跳数为1,如果二者携带在同一个第一报文中,该第一报文中的字段StartLeafID=0,ItemNum=1,HopNum=1,Weight=1。

L1通过自己的接口2发送其他节点通过接口2到L1的负载分担权重和跳数,该权重为1,跳数也为1,即第一报文中的字段StartLeafID=0,ItemNum=1,HopNum=1,Weight=1。

L1通过自己的接口3发送其他节点通过接口3到L1的负载分担权重和跳数,该权重为1,跳数也为1,即第一报文中的字段StartLeafID=0,ItemNum=1,HopNum=1,Weight=1。

图18为本申请再一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图,如图18所示,S0作为第二节点,S0中用圆圈中的数字2表示S0修改自己的权重跳数表这一步骤。具体地,其通过自己的接口0接收到S0通过接口0到L0的负载分担权重为2,跳数为1,S0通过自己的接口2接收到S0通过接口2到L0的负载分担权重为2,跳数为1,S0通过自己的接口1接收到S0通过接口1到L1的负载分担权重为1,跳数为1,S0通过自己的接口3接收到S0通过接口3到L1的负载分担权重为1,跳数为1。如上所述,S0预先存储有其通过自己的各个接口到各个叶子节点的负载分担权重和跳数,这些值默认为0,因此,因此当S0通过自己的一些接口接收到实际的负载分担权重和跳数,则更新自己存储的跳数权重表项。图18所示的S0对应的跳数权重表是S0接收到L0和L1发送的负载分担权重和跳数之后,进行表项更新后的结果。即S0通过自己的接口0收到的上述第一报文后,得知StartLeafID=0,ItemNum=1,HopNum=1,Weight=2,则将跳数权重表中第1行第1列更新为(1,2)。S0通过自己的接口1收到第一报文中StartLeafID=1,ItemNum=1,HopNum=1,Weight=1,则S0将跳数权重表中第2行第2列更新为(1,1)。S0通过自己的接口2收到的第一报文中StartLeafID=0,ItemNum=1,HopNum=1,Weight=2,则S0将跳数权重表中第1行第3列更新为(1,2)。S0通过自己的接口3收到的第一报文中StartLeafID=1,ItemNum=1,HopNum=1,Weight=1,则S0更新跳数权重表中第2行第4列更新为(1,1)。

进一步地,如上所述,第二节点用于根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数,并通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数,第二接口是第二节点的至少一个接口中的一接口。例如:S0通过如下方式确定其他节点通过S0的自己的接口4到L0的负载分担权重和跳数,查询S0的跳数权重表,可得到S0通过自己的各个接口到L0行的跳数和负载分担权重(1,2),(0,0),(1,2),(0,0),(0,0),(0,0),由于S0的接口4和接口5属于同一水平分割组,因此,在计算其他节点通过S0的接口4到L0的负载分担权重和跳数时,现将S0的跳数权重表中接口4和接口5对应的列排除,即视为(0,0),在S0排除后的列中选择最小的非0跳数所对应的列,即为S0通过自己的接口0和接口1到L0行的跳数和负载分担权重(1,2),(1,2),因此,计算其他节点通过S0的自己的接口4到L0的跳数为1+1=2,按照负载分担权重的计算方式一,可以得到其他节点通过S0的自己的接口4到L0的负载分担权重为2+2=4。同理可到如下结果:

图19为本申请又一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图,如图19所示,S0和S1中的带有圆圈的数字3表示S0、S1发送第三报文,其中,S0通过自己的接口4发送的第三报文中StartLeafID=0,ItemNum=4,其中StartLeafID为图19中基于Spine-Leaf结构的Fabric网络中所有叶子节点的首节点L0,ItemNum为图19中基于Spine-Leaf结构的Fabric网络中所有叶子节点的数量。假定采用负载分担权重的计算方式一,则S0通过自己的接口4发送的第三报文中包括的其他节点通过S0的接口4到L0、L1、L2和L3的跳数和负载分担权重分别是:

(2,4):表示到L0可达,跳数2,负载分担权重4。

(2,2):表示到L1可达,跳数2,负载分担权重2。

(0,0):表示到L2不可达。

(0,0):表示到L3不可达。

S0通过自己的接口5发送的第三报文中StartLeafID=0,ItemNum=4。假定采用负载分担权重的计算方式一,则S0通过自己的接口5发送的第三报文中包括的其他节点通过S0的接口5到L0、L1、L2和L3的跳数和负载分担权重分别是:

(2,4):表示到L0可达,跳数2,负载分担权重4。

(2,2):表示到L1可达,跳数2,负载分担权重2。

(0,0):表示到L2不可达。

(0,0):表示到L3不可达。

S1通过自己的接口4发送的第三报文中StartLeafID=0,ItemNum=4。假定采用负载分担权重的计算方式一,则S1通过自己的接口4发送的第三报文中包括的其他节点通过S1的接口4到L0、L1、L2和L3的跳数和负载分担权重分别是:

(2,2):表示到L0可达,跳数2,负载分担权重2。

(2,2):表示到L1可达,跳数2,负载分担权重2。

(0,0):表示到L2不可达。

(0,0):表示到L3不可达。

S1通过自己的接口5发送的第三报文中StartLeafID=0,ItemNum=4。假定采用负载分担权重的计算方式一,则S1通过自己的接口5发送的第三报文中包括的其他节点通过S1的接口5到L0、L1、L2和L3的跳数和负载分担权重分别是:

(2,2):表示到L0可达,跳数2,负载分担权重2。

(2,2):表示到L1可达,跳数2,负载分担权重2。

(0,0):表示到L2不可达。

(0,0):表示到L3不可达。

进一步地,上级脊节点通过自己的各个接口接收到自己通过其接口到达各个叶子节点的负载分担权重和跳数,以修改自己的跳数权重表。

例如:图20为本申请再一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图,如图20所示,S4和S5中的圆圈中的4表示S4和S5接收到对应的第三报文,并更新各自的跳数权重表。S4通过自己的接口0收到的第三报文中StartLeafID=0,ItemNum=4,以及,S4通过自己的接口0到L0、L1、L2和L3的跳数和负载分担权重分别为(2,4),(2,2)、(0,0),(0,0),表示S4通过自己的接口0到达L0的跳数为2,负载分担权重为4,从接口0到达L1的跳数为2,负载分担权重为1;从接口0到达L1的跳数为2,负载分担权重为2;从接口0到L2、L3不可达。同时将上述数据写入S4的跳数权重表的接口0所在的第1列。

同理,S4通过自己的接口1收到的第三报文中StartLeafID=0,ItemNum=4,以及,S4通过自己的接口1到L0、L1、L2和L3的跳数和负载分担权重分别为(2,2),(2,2)、(0,0),(0,0),表示从接口1到达L0的跳数为2,负载分担权重为2,从接口1到达L1的跳数为2,负载分担权重为2;从接口1到L2、L3不可达。同时将上述数据写入S4的跳数权重表的接口1所在的第2列。

S5通过自己的接口0收到的第三报文中StartLeafID=0,ItemNum=4,以及,S5通过自己的接口0到L0、L1、L2和L3的跳数和负载分担权重分别为(2,4),(2,2),(0,0),(0,0),表示从S5的接口0到达L0的跳数为2,负载分担权重为4,从接口0到达L1的跳数为2,负载分担权重为2;从接口0到L2、L3不可达。同时将上述数据写入S5的跳数权重表的接口0所在的第1列。

S5通过自己的接口1收到的第三报文中StartLeafID=0,ItemNum=4,以及,S5通过自己的接口1到L0、L1、L2和L3的跳数和负载分担权重分别为(2,2),(2,2),(0,0),(0,0),表示从S5的接口1到达L0的跳数为2,负载分担权重为2,从接口1到达L1的跳数为2,负载分担权重为1;从接口1到达L1的跳数为2,负载分担权重为2;从接口1到L2、L3不可达。同时将上述数据写入S5的跳数权重表的接口1所在的第2列。

多次重复上述过程,使得所有上层的脊节点收集到其到其直接下游的叶子节点的负载分担权重和跳数。例如:图21为本申请又一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图,如图21所示,最顶层的S4会学习到通过自己的各个接口到每个叶子节点的负载分担权重和跳数,同样,S5也会学习到其到每个叶子节点的负载分担权重和跳数。中间层的节点S0会学习到其到叶子节点L0、L1的负载分担权重和跳数,但是没有学习到其到L2、L3的负载分担权重和跳数。节点S1会学习到其到叶子节点L0、L1的负载分担权重和跳数,但是没有学习到其到L2、L3的负载分担权重和跳数。节点S2会学习到其到叶子节点L2、L3的负载分担权重和跳数,但是没有学习到其到L0、L1的负载分担权重和跳数。节点S3会学习到其到叶子节点L2、L3的负载分担权重和跳数,但是没有学习到其到L0、L1的负载分担权重和跳数。需要说明的是,为了简洁清楚起见,图21仅示出了S4、S5、S0和S3的跳数权重表。

为了使得每个节点都能获取到其到所有叶子节点的负载分担权重和跳数,进一步地,最顶层的脊节点需要交叉扩散到达所有叶子节点的负载分担权重和跳数。例如:图22为本申请再一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图,如图22所示,图中S4和S5中圆圈中的数字6表示,S4和S5向下层发送第三报文。其中S4可以通过自己的接口0向S0发送第三报文,该第三报文包括其他节点通过S4的接口0到各个叶子节点的负载分担权重和跳数,其中,根据S4的跳数权重表以及上述跳数计算方法和负载分担权重的计算方式一,可以得到S4可以其他节点通过S4的接口0到L0的跳数和负载分担权重分别是3和6,即对于S0而言,S0通过S0的接口4到L0的跳数和负载分担权重分别是3和6。同理可得,S0通过S0的接口5到L0的跳数和负载分担权重分别是3和6。S0通过S0的接口4到L1的跳数和负载分担权重分别是3和4。S0通过S0的接口5到L1的跳数和负载分担权重分别是3和4。S0通过S0的接口4到L2的跳数和负载分担权重分别是3和4。S0通过S0的接口5到L2的跳数和负载分担权重分别是3和4。S0通过S0的接口4到L3的跳数和负载分担权重分别是3和4。S0通过S0的接口5到L3的跳数和负载分担权重分别是3和4。S3通过S3的接口4到L0的跳数和负载分担权重分别是3和6。S3通过S3的接口5到L0的跳数和负载分担权重分别是3和6。S3通过S3的接口4到L1的跳数和负载分担权重分别是3和4。S3通过S3的接口5到L1的跳数和负载分担权重分别是3和4。S3通过S3的接口4到L2的跳数和负载分担权重分别是3和4。S3通过S3的接口5到L2的跳数和负载分担权重分别是3和4。S3通过S3的接口4到L3的跳数和负载分担权重分别是3和4。S3通过S3的接口5到L3的跳数和负载分担权重分别是3和4。需要说明的是,为了简洁清楚起见,图21仅示出了S4、S5、S0和S3的跳数权重表。

更进一步地,中间层的脊节点继续下其直连的叶子节点发送其他节点通过该中间层的脊节点到各个叶子节点的负载分担权重和跳数。以使得所有的叶子节点可以学习到其通过自己的接口到其他叶子节点的负载分担权重和跳数。例如:图23为本申请又一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图,如图23所示,图中S0、S1、S2和S3中圆圈中的数字7表示,S0、S1、S2和S3向下层发送第三报文。以L0为例,L0通过自己的接口0接收到第三报文,该第三报文包括:L0通过自己的接口0到L0的跳数和负载分担权重为2,4,即该跳数是对S0的跳数权重表中的第一行最小跳数加1,该负载分担权重是S0的第一行中选择下载最小跳数对应的负载分担权重,并求和,求和结果为4。同理可得,可以得到L0通过自己的接口0到L1的跳数和负载分担权重为2,2。L0通过自己的接口0到L2的跳数和负载分担权重为4,8。L0通过自己的接口0到L3的跳数和负载分担权重为4,8。L0通过自己的接口1到L0的跳数和负载分担权重为2,2。L0通过自己的接口1到L1的跳数和负载分担权重为2,2。L0通过自己的接口1到L2的跳数和负载分担权重为4,8。L0通过自己的接口1到L3的跳数和负载分担权重为4,8。L0通过自己的接口2到L0的跳数和负载分担权重为2,4。L0通过自己的接口2到L1的跳数和负载分担权重为2,2。L0通过自己的接口2到L2的跳数和负载分担权重为4,8。L0通过自己的接口2到L3的跳数和负载分担权重为4,8。L0通过自己的接口3到L0的跳数和负载分担权重为2,2。L0通过自己的接口3到L1的跳数和负载分担权重为2,2。L0通过自己的接口3到L2的跳数和负载分担权重为4,8。L0通过自己的接口3到L3的跳数和负载分担权重为4,8。再以L3为例,L3通过自己的接口0到L0的跳数和负载分担权重为4,12。L3通过自己的接口0到L1的跳数和负载分担权重为4,8。L3通过自己的接口0到L2的跳数和负载分担权重为2,2。L3通过自己的接口0到L3的跳数和负载分担权重为2,2。L3通过自己的接口1到L0的跳数和负载分担权重为4,12。L3通过自己的接口1到L1的跳数和负载分担权重为4,8。L3通过自己的接口1到L2的跳数和负载分担权重为2,2。L3通过自己的接口1到L3的跳数和负载分担权重为2,2。L3通过自己的接口2到L0的跳数和负载分担权重为4,12。L3通过自己的接口2到L1的跳数和负载分担权重为4,8。L3通过自己的接口2到L2的跳数和负载分担权重为2,2。L3通过自己的接口2到L3的跳数和负载分担权重为2,2。L3通过自己的接口3到L0的跳数和负载分担权重为4,12。L3通过自己的接口3到L1的跳数和负载分担权重为4,8。L3通过自己的接口3到L2的跳数和负载分担权重为2,2。L3通过自己的接口3到L3的跳数和负载分担权重为2,2。

最后,上述Fabric网络中的每个节点可以根据各自的跳数权重表更新转发表,用于指导报文或者数据的转发,或者,每个节点也可以将各自的跳数权重表作为转发表来指导报文的转发。当任何一个节点到叶子节点的负载分担权重发生变化时,都需要触发其修改其跳数权重表中对应的负载分担权重。

如图23所示的网络中,通过查询S4的跳数权重表,S4到L0的出接口为接口0、接口1,对应的负载分担权重为4,2,则在S4向L0发送报文时,按4:2的比例在接口0、接口1上发送。

如果某个接口在预设时长内没有收到检测报文,或者,没有收到负载分担权重和/或跳数,则认为该接口处于故障状态,同时清除跳数权重表中故障接口所在的列,这个过程通常称之为老化流程。上述步骤周期性反复运行后,故障信息很快就会扩散到全网,下游故障后,很快上游就会得到反馈进行负载分担比例调整。例如:图24为本申请再一实施例提供的一种基于Spine-Leaf结构的Fabric网络示意图,与图23相比较,当L0与S0之间的链路故障,即L0的接口0发生故障,和/或S0的接口0发生故障时,很快S4到L0的出接口0、1的负载分担权重由4:2变化为2:2,负载分担比例也按此调整。

需要说明的是,针对任意脊节点,它可以每次都发送达到每个叶子节点的跳数和负载分担权重,也可以只发送负载分担权重和/或跳数发生变化的数据,从而可以节省节点开销。

此外,对于任一节点,为避免产生可达性环路,可以限制跳数,在其收到该节点通过自己的接口达到某叶子节点的跳数超过某个设定值时,则认为该跳数不可用,从而不记录到跳数权重表中。

综上,本申请提供一种交换网络系统,即基于Spine-Leaf结构的Fabric网络,首先,由于每个节点可以向其他节点发送负载分担权重和跳数,从而可快速将接口故障导致的下游带宽变化传递到上游,触发上游进行接口切换或者接口负载分担比例调整,从而降低链路拥塞的现象。其次,上述各个节点的功能均是在转发面实现的,而转发面是通过硬件逻辑电路、FPGA逻辑代码、可编程NP的微码、多核CPU软件代码实现,所以可以做到端到端毫秒级故障收敛。

下面将对上述Fabric网络中涉及的数据形式进行说明:

1、链路类型表(即接口类型表):LinkType Table

该链路类型表是一静态表,其中,接口类型可以是上行接口、下行接口或者背靠背接口。

该链路类型表的大小:LinkNum*8Bits,其中本申请中的LinkNum表示节点的接口数量,下面对此不再赘述。

描述:通过接口配置生成。

例如:图25为图6中的节点S3的链路类型表的示意图,由图6可知,节点S3包括6个接口,分别是:接口0-5,其中接口0-3是下行接口,接口4-5是上行接口,在图25中,表格上方的数字表示接口编号,表格内的数字表示接口类型,其中表格内的数字1表示上行接口,数字2表示下行接口,这里没有涉及水平接口,需要说明的是数字3表示水平接口。

2、链路水平分割掩码表:LinkMask Table

链路水平分割掩码表是静态表,描述接口的水平分割组信息。

大小:LinkNum*LinkNum*1Bits。

描述:所有上行接口归为一组;连接相同设备的背靠背接口接口归为一组,每个下行接口单独归为一组。表项初值全部为1,再根据接口分组情况置0:设同一组的接口ID为{ID0,ID1,…,IDn-1},则LinkMask[IDi][IDj]=0,i=0~n-1,j=0~n-1。

例如:图26为图6的节点S3的链路水平分割掩码表的示意图,结合图6,图6所示表格上方和左侧均为接口编号,由于S3的接口4和5属于同一水平分割组,因此接口4和接口5所在的交点处均为0。

3、链路状态表:LinkStatus Table

链路状态表是动态表,描述一个节点的接口状态信息(0表示不可用状态,1表示可用状态)。

大小:LinkNum*1Bits。

描述:从接口收到负载分担权重和/或跳数,则该接口的状态置可用,即1;3个检测周期内没有收到负载分担权重和/或跳数,则置该接口状态为不可用,即0。

例如:图27为图6的节点S3的链路状态表的示意图,如图27所示,表格上方的数字为S3的接口编号,表格内的数字分别表示各个接口的状态,从图27可以看出,S3的6个接口均为可用状态。

4、跳数表:HopNum Table

跳数表是动态表,描述路由跳数信息。

大小:LinkNum*(LeafNum+1)*4Bits,其中LeafNum表示叶子节点的个数。

描述:运行时动态变化,由接收到的跳数触发修改维护,或者,由定时器消息触发修改维护。非零表示路由可达的跳数,0表示不可达。最后一行表示老化状态,1表示需要老化,0表示不需要老化。

例如:图28为图6的节点S3的跳数表的示意图,如图28所示,表格上方的数字为S3的接口编号,表格内的数字分别表示各个接口对应的跳数,表格左侧的数字为各个叶子节点的标识,最后一行表示老化状态,从图28可以看出,S3通过接口4到L0的跳数为3,通过接口5到L0的跳数是3,通过接口4、接口5到L1的跳数也均为3,通过接口0到L2的跳数为1,通过接口2到L2的跳数为1,通过接口4和5到L2的跳数均为3,通过接口1、接口3到L3的跳数均为1,通过接口4和5到L3的跳数均为3。并且通过最后一行可以看出S3针对各个接口不需要进行老化处理。

5、权重表:Weights table

权重表是动态表,其描述节点的接口的负载权重信息。

大小:LinkNum*LeafNum*8~32Bits,不同的负载分担权重算法所占用的空间不一样。

描述:由下游根据不同的算法上报的链路权重信息,最终用于转发时作为负载分担比例。

例如:图29为图6的节点S3的权重表的示意图,如图29所示,表格上方的数字为S3的接口编号,表格内的数字分别表示各个接口对应的负载分担权重,表格左侧的数字为各个叶子节点的标识,从图29可以看出,S3通过接口4到L0的负载分担权重为6,通过接口5到L0的负载分担权重为6,通过接口4、接口5到L1的负载分担权重为4,通过接口0到L2的负载分担权重为1,通过接口2到L2的负载分担权重为1,通过接口4和5到L2的负载分担权重均为4,通过接口1、接口3到L3的负载分担权重均为1,通过接口4和5到L3的负载分担权重均为4。

6、下一跳出接口列表:NextHop Table

下一跳出接口列表是一个动态表,其描述到某个叶子节点的最佳出接口列表信息。

大小:LinkNum*4Bits。

描述:发送跳数时计算出的中间结果,表示到某个叶子节点的下一跳出接口列表。

例如:图30为图6的节点S3的跳数表的示意图,如图30所示,表格上方的数字为S3的接口编号,表格内的数字分别表示通过各个接口到L0的跳数,表格左侧的数字为L0的标识。从图30可以看出,S3通过接口4和5可以到达L0,对应的跳数均为3。

7、初始权重表:InitWeights table

初始权重表是静态表,描述接口的初始负载分担权重。只有叶子节点上才有初始负载分担权重,而脊节点是没有这项信息的。

大小:LinkNum*8~32Bits,不同的负载分担权重算法占用的空间不一样。

描述:具体数值与配置和算法相关,比如和叶子节点的至少一个接口对应的当前带宽信息、叶子节点的至少一个接口中的可用接口比例、叶子节点的至少一个接口分别对应的质量评估值、叶子节点的至少一个接口分别对应的队列平均长度。

例如:图31为图6的节点L0的初始权重表的示意图,如图31所示,表格上方的数字为L0的接口编号,表格内的数字分别表示每个接口对应的初始负载分担权重。从图31可以看出,L0的接口0-3分别对应的初始负载分担权重为2、1、2、1。

图32为本申请一实施例提供的Fabric网络中节点的示意图,如图32所示,每个节点包括6个模块,其中,模块1用于定时遍历自己所有的接口,查自己的跳数表或者跳数权重表,以计算其他节点通过该节点的各个接口到达各个叶子节点的跳数,构造并发送报文(该报文也被称为可达性报文)。模块2用于处理收到的携带跳数的报文,解析得到跳数,并根据解析出的跳数修改自己的跳数表或者跳数权重表中与接收接口关联的列。模块3用于定时遍历所有的接口,查表计算其他节点通过该节点的各个接口达到各个叶子节点的负载分担权重,构造并发送报文(该报文也被称为权重报文)。模块4用于处理收到的携带负载分担权重的报文,解析出负载分担权重后,修改权重表或者跳数权重表中与接收接口关联的列。模块5用于定时遍历所有的接口,检查是否在指定的老化周期内收到携带跳数和/或负载分担权重的报文,如果某个接口没有收到,则将跳数表和权重表中与该接口关联的列全部清零,或者将跳数权重表中与该接口关联的列全部清零。模块6用于保存维护跳数表和权重表以及其他的辅助表项,或者维护跳数权重表以及其他的辅助表项,当存在跳数和/或负载分担权重变化时,则触发修改外部的转发表。

结合上面的数据形式,下面对节点的各模块具体实现进行说明:

模块1实现:周期性发送携带跳数的报文。

其中,在脊节点和叶子节点上,实现的算法不一样,具体算法实现的伪代码如下:

脊节点上:

其中01行表示循环遍历所有的状态为正常的接口。02行表示遍历每个叶子节点,并计算到达该叶子节点的跳数。03行使用链路水平分割掩码表计算排除部分出接口并保存结果到下一跳出接口列表中,以供后续计算。04行计算下一跳出接口列表的非零最小跳数值。05行对下一跳出接口列表做是否等于最小下一跳的归一处理。07行计算最终出接口的数量。08~12行构造携带跳数的报文,出接口数量大于0,则表示可达,跳数填写为最小跳数加1,否则不可达,跳数填写为0。15~16行遍历完毕所有的接口和叶子节点后填写报文头信息并发送携带跳数的报文。

叶子节点上:

在叶子节点上,只需向所有状态为正常的接口发送自己的跳数信息即可,该跳数为1。

模块2实现:节点收到携带跳数的报文所做的处理。

假设在编号为linkid的接口上收到了携带跳数的报文,报文处理的伪代码如下:

其中01行表示更新跳数表中接口linkid列的老化标记,设置为已更新状态0。02行设置接口状态为正常状态1。03行解析出报文中的StartLeafID字段。04行解析出报文中的ItemNum字段。05行根据ItemNum遍历每一个数据项,06行解析出报文中的每一个跳数信息。07行将跳数信息写入跳数表。

模块3实现:周期性发送携带负载分担权重的报文。

在脊节点和叶子节点上,实现的算法不一样,具体算法实现的伪代码如下:

脊节点上:

其中01行表示循环遍历所有的状态为正常的接口。02行表示遍历每个叶子节点,并计算到达每个叶子节点的跳数。03行使用链路水平分割掩码表计算排除部分出接口并保存结果到下一跳出接口列表中,以供后续计算。04行计算下一跳出接口列表的非零最小跳数值。05行对下一跳出接口列表做是否等于最小下一跳的归一处理。06行计算最终出接口列表的加权总权重(此处采用权重算法1计算,其他算法采用类似处理,核心流程都是对出接口的权重进行加权累加,不同的是加权的参数选择)。07行构造携带负载分担权重的报文。09~10行遍历完毕所有的接口和叶子节点后填写报文头信息,并向接口发送携带负载分担权重的报文叶子节点上:

在叶子节点上,只需向所有状态为正常的接口发送自己的负载分担权重,权重直接从配置的初始化权重表中获取。

模块4实现:节点收到携带负载分担权重的报文,并对该报文进行处理。

假设在编号为linkid的接口上收到了携带负载分担权重的报文,报文处理的伪代码如下:

其中01行表示更新跳数表中接口linkid列的老化标记,设置为已更新状态0。02行设置链路状态为正常状态1。03行解析出报文中的StartLeafID字段。04行解析出报文中的ItemNum字段。05行根据ItemNum遍历每一个数据项,06行解析出报文中的每一个负载分担权重。07行将负载分担权重写入权重表。

模块5实现:定时老化处理。

节点定时对表项进行老化处理,老化处理的伪代码如下:

其中01行表示遍历每一个接口linkid进行后续处理。02行判断如果接口linkid的老化标记为1,表示需要老化该接口的数据。03~04行直接将跳数表和权重表中需要老化的接口所在列的数据清零。05行标记需要老化的接口状态为故障状态0。07行表示重新将所有接口的老换标记设为需老化,等待接口收到写到跳数的报文或携带负载分担权重报文后将老化标记去掉。

模块6实现:将负载分担权重信息下发到转发表。

此模块需要外部模块提供的接口支撑实现,网元设备不同的软硬件架构实现的方式不一样。

下面对本申请的端到端的性能效果进行说明:

如果在ASIC芯片中采用硬件电路实现节点的上述功能,芯片运行频率按1Ghz计算,1拍=1纳秒。设LinkN表示每个节点的最大连路数,Leaf表示整网支持的最大叶子节点的数量。

发送携带跳数的报文的算法的性能评估,经实验,不考虑分段并行处理,发送携带跳数的报文的总开销为:LinkN*(LeafN+2*log2 LinkN+26)拍。按照LinkN=128,LeafN=2048规格计算,每个周期发送LinkN个携带跳数的报文总时间开销=128*(2048+2*log2128+26)拍=267264纳秒=0.267毫秒。如果不考虑并行处理,接收单个携带跳数的报文总开销:LeafN*3拍。按照LinkN=128,LeafN=2048规格计算,单个携带跳数的报文处理时间=2048*3拍=6144纳秒。

故障收敛总时间=故障检测时间+跳数*(发送携带跳数的报文的时间+接收携带跳数的报文总时间)

其中:

接收携带跳数的报文总时间=单个携带跳数的报文处理时间*相邻两节点间链路数

故障检测时间=3*检测周期或者0(硬件直接上报故障,如拔掉线缆)

由此得到故障收敛总时间

=3*T+MaxHop*[LinkN*(LeafN+2*log2 LinkN+26)+LinkNumPerHop*LeafN*3)]

按照LinkN=128,LeafN=2048规格,两跳之间平均10条链路(LinkNumPerHop=10),三级交换网络结构最多只需3跳(MaxHop=3),不考虑故障检测时间:

故障收敛总时间=3*(128*(2048+2*log2128+26)+10*2048*3)拍=986112纳秒=0.986毫秒。

所以在此算法的应用于芯片的情况下,整网可达到1毫秒的端到端故障收敛时间,从而可以实现毫秒级快速故障感知的效果。

下面对本申请的故障传递效果进行如下说明:

本申请将下游链路故障以跳数与负载分担权重结合的方式快速传递到上游,从而使得下游链路故障后的剩余带宽传递到上游。

下面结合具体的组网来说明本申请的故障传递效果,图33为本申请又一实施例提供的基于Spine-Leaf结构的Fabric网络示意图,图34为本申请一实施例提供的图33所示的Fabric网络的局部示意图,结合图33和图34,当S0和S8之间的单链路发生故障时,即S0和/或S8的连接接口发生故障时,按照本申请提供的技术方案,各节点快速将该故障上传到上游,以使在L6、L7上到L0和L1的路由的两个出接口的负载分担权重分别调整为1,2,S6上到L0、L1的路由的两个出接口的负载分担权重都调整为0,1,S7到L0、L1的负载分担权重保持不变。

图35为本申请另一实施例提供的图33所示的Fabric网络的局部示意图,结合图33和图35,发生如图35的多条链路故障后,快速传递到上游,L6上到L0的路由的两个出接口的负载分担权重都调整为0,2,L6上到L1的路由的两个出接口的负载分担权重都调整为1,2。L7上到L0的路由的两个出接口的负载分担权重都调整为0,1,L7上到L1的路由的两个出接口的负载分担权重都调整为1,2。

图36为本申请再一实施例提供的基于Spine-Leaf结构的Fabric网络示意图,图37为本申请一实施例提供的图36所示的Fabric网络的局部示意图,结合图36和图37,当发生如图37的单条链路故障后,L9上到L0的出接口的负载分担权重变化为1,2,2,2。图38为本申请另一实施例提供的图36所示的Fabric网络的局部示意图,结合图36和图38,当发生如图38所示的多条链路故障后,上述负载分担权重的计算方式一和二计算的负载分担比例有差别,方式二的效果比较准确一些。

图39为本申请一实施例提供的一种路由信息传输方法的流程图,方法应用于第一节点,其中,交换网络系统包括多个叶子节点和至少一个脊节点,第一节点是多个叶子节点中的一叶子节点。本申请中的路由信息包括下面描述的负载分担权重和/或跳数,下面对此不再赘述。如图39所示,该方法包括如下步骤:

步骤S101:根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。

步骤S102:通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数,第一接口是第一节点的至少一个接口中的一接口。

可选的,其他节点通过第一节点的第一接口到第一节点的负载分担权重和跳数携带在第一报文中。或者,其他节点通过第一节点的第一接口到第一节点的负载分担权重携带在第二报文中,其他节点通过第一节点的第一接口到第一节点的跳数携带在第三报文中。

可选的,第一报文还包括以下至少一项:第一报文的类型、第一报文的辅助标识、第一节点的标识、第一节点的数量。其中,第一报文的辅助报文用于标识第一报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。

第二报文还包括以下至少一项:第二报文的类型、第二报文的辅助标识、第一节点的标识、第一节点的数量。其中,第二报文的辅助报文用于标识第二报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。

第三报文还包括以下至少一项:第三报文的类型、第三报文的辅助标识、第一节点的标识、第一节点的数量。其中,第三报文的辅助报文用于标识第三报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。

可选的,根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数,包括:在第一节点的转发面上根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。

可选的,第一节点的至少一个接口的当前状态信息包括以下至少一项:第一节点的至少一个接口分别对应的当前带宽信息、第一节点的至少一个接口中的可用接口比例、第一节点的至少一个接口分别对应的质量评估值、第一节点的至少一个接口分别对应的队列平均长度。

可选的,通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数,包括:周期性地通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。或者,在第一接口发生故障时,通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。

本申请提供的路由信息传输方法,其由第一节点执行,该第一节点是上述交换网络系统中的节点,其内容和效果可参考系统部分实施例,对此不再赘述。

图40为本申请另一实施例提供的一种路由信息传输方法的流程图,该方法应用于第二节点,其中,交换网络系统包括多个叶子节点和至少一个脊节点,第二节点是至少一个脊节点中的一脊节点。如图40所示,该方法包括步骤:

步骤S201:根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。

步骤S202:根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。

步骤S203:通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数,第二接口是第二节点的至少一个接口中的一接口。

可选的,在步骤S201之前,该方法还包括:接收第二节点通过第二节点的至少一个接口到第一节点的负载分担权重和跳数。

可选的,根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重,包括:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重。其中,若第二接口为上行接口且第二节点还存在其他上行接口,则水平分割组包括:第二接口和第二节点的其他上行接口。若第二接口为上行接口且第二节点不存在其他上行接口,则水平分割组包括:第二接口。若第二接口为水平接口且第二节点还存在其他水平接口,则水平分割组包括:第二接口和第二接口的其他水平接口。若第二接口为水平接口且第二节点不存在其他水平接口,则水平分割组包括:第二接口。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重。

可选方式一,若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重,包括:若第二接口为上行接口或者水平接口,则确定其他节点通过第二接口到第一节点的负载分担权重为第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重之和。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重,包括:若第二接口为下行接口,则确定其他节点通过第二接口到第一节点的负载分担权重为第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重之和。

可选方式二,若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重,包括:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的数量、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重,包括:若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。

可选方式三,若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重,包括:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的质量评估值、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的数量、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重,包括:若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中最小非0跳数对应的接口的质量评估值、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。

可选的,通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数,包括:周期性地通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。或者,在第二接口发生故障时,通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。

可选的,其他节点通过第二节点的第二接口分别到第一节点的负载分担权重和跳数携带在第四报文中。或者,其他节点通过第二节点的第二接口分别到第一节点的负载分担权重携带在第五报文中,其他节点通过第二节点的第二接口分别到第一节点的跳数携带在第六报文中。

可选的,第四报文还包括以下至少一项:第四报文的类型、第四报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第四报文的辅助报文用于标识第四报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。第五报文还包括以下至少一项:第五报文的类型、第五报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第五报文的辅助报文用于标识第五报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。第六报文还包括以下至少一项:第六报文的类型、第六报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第六报文的辅助报文用于标识第六报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。

可选的,根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数,包括:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。

可选的,若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数,包括:若第二接口为上行接口或者水平接口,则在第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的跳数中选择最小的非0跳数,并确定其他节点通过第二节点的第二接口到第一节点的跳数为非0跳数加1。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数,包括:若第二接口为下行接口,则在第二节点通过第二节点的至少一个接口到第一节点的跳数中选择最小的非0跳数,并确定其他节点通过第二接口到第一节点的跳数为非0跳数加1。

可选的,根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的至少一个接口分别到第一节点的负载分担权重。根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二节点的至少一个接口分别到第一节点的跳数。通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数,第二接口是第二节点的至少一个接口中的任一接口,包括:在第二节点的转发面上根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。

可选的,若第二节点在预设时长内未接收到第二节点通过第二接口到第一节点的负载分担权重和/或跳数,则第二节点通过第二接口到第一节点的负载分担权重和跳数均为0。或者,若第二节点在预设时长内未接收到通过第二接口传输的检测报文,则第二节点通过第二接口到第一节点的负载分担权重和跳数均为0,检测报文用于检测第二接口是否存在异常。

本申请提供的路由信息传输方法,其由第二节点执行,该第二节点是上述交换网络系统中的节点,其内容和效果可参考系统部分实施例,对此不再赘述。

图41为本申请一实施例提供的一种节点800的示意图,如图41所示,下面结合图41对该节点的各个构成部件进行具体的介绍:该节点800包括处理器801,该处理器801可以是NP/FPGA/ASIC/多核CPU,图中以包括多核CPU为例等,用于执行上述的路由信息传输方法。节点800还可以包括存储器802,存储器802可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random accessmemory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(Compact Disc Read-Only Memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器802可以是独立存在,通过通信总线804与处理器801相连接。存储器802也可以和处理器801集成在一起。

其中,所述存储器802用于存储执行本申请方案的软件程序,并由处理器801来控制执行,以实现下述方法实施例提供的方法。

收发器803,用于与其他节点之间进行通信。当然,收发器803还可以用于与通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(WirelessLocal Area Networks,WLAN)等。收发器803可以包括接收单元实现接收功能,以及发送单元实现发送功能。

通信总线804,可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部节点互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图41中仅用一个粗线表示,但并不表示仅有一根总线或一种类型的总线。

图41中示出的节点结构并不构成对节点的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本申请提供的节点可以用于执行上述的方法,其对应内容和效果可参考方法实施例部分,对此不再赘述。

图42为本申请一实施例提供的第一节点的示意图,其中,交换网络系统包括多个叶子节点和至少一个脊节点,第一节点是多个叶子节点中的一叶子节点。如图42所示,该第一节点包括:

确定模块201,用于根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。

发送模块202,用于通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数,第一接口是第一节点的至少一个接口中的一接口。

可选的,其他节点通过第一节点的第一接口到第一节点的负载分担权重和跳数携带在第一报文中。

或者,

其他节点通过第一节点的第一接口到第一节点的负载分担权重携带在第二报文中,其他节点通过第一节点的第一接口到第一节点的跳数携带在第三报文中。

可选的,第一报文还包括以下至少一项:第一报文的类型、第一报文的辅助标识、第一节点的标识、第一节点的数量。其中,第一报文的辅助报文用于标识第一报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。

第二报文还包括以下至少一项:第二报文的类型、第二报文的辅助标识、第一节点的标识、第一节点的数量。其中,第二报文的辅助报文用于标识第二报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。

第三报文还包括以下至少一项:第三报文的类型、第三报文的辅助标识、第一节点的标识、第一节点的数量。其中,第三报文的辅助报文用于标识第三报文是周期性发送的报文或者是在第一接口发生故障时发送的报文。第一节点的数量为1。

可选的,确定模块201具体用于在第一节点的转发面上根据第一节点的至少一个接口的当前状态信息,确定其他节点通过第一节点的第一接口到第一节点的负载分担权重。发送模块202具体用于在第一节点的转发面上通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。

可选的,第一节点的至少一个接口的当前状态信息包括以下至少一项:第一节点的至少一个接口分别对应的当前带宽信息、第一节点的至少一个接口中的可用接口比例、第一节点的至少一个接口分别对应的质量评估值、第一节点的至少一个接口分别对应的队列平均长度。

可选的,发送模块202具体用于:周期性地通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。或者,在第一接口发生故障时,通过第一接口发送其他节点通过第一接口到第一节点的负载分担权重和跳数。

本申请提供的第一节点用于执行上述的路由信息传输方法,其内容和效果可参考方法实施例部分,对此不再赘述。

图43为本申请一实施例提供的第二节点的示意图,其中,交换网络系统包括多个叶子节点和至少一个脊节点,第二节点是至少一个脊节点中的一脊节点。如图43所示,该第二节点包括:

第一确定模块301,用于根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。

第二确定模块302,用于根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。

发送模块303,用于通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数,第二接口是第二节点的至少一个接口中的一接口。

可选的,还包括:接收模块304,用于接收第二节点通过第二节点的至少一个接口到第一节点的负载分担权重和跳数。

可选的,第一确定模块301具体用于:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重。其中,若第二接口为上行接口且第二节点还存在其他上行接口,则水平分割组包括:第二接口和第二节点的其他上行接口。若第二接口为上行接口且第二节点不存在其他上行接口,则水平分割组包括:第二接口。若第二接口为水平接口且第二节点还存在其他水平接口,则水平分割组包括:第二接口和第二接口的其他水平接口。若第二接口为水平接口且第二节点不存在其他水平接口,则水平分割组包括:第二接口。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重,确定其他节点通过第二接口到第一节点的负载分担权重。

可选的,第一确定模块301具体用于:若第二接口为上行接口或者水平接口,则确定其他节点通过第二接口到第一节点的负载分担权重为第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重之和。若第二接口为下行接口,则确定其他节点通过第二接口到第一节点的负载分担权重为第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重之和。

可选的,第一确定模块301具体用于:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的数量、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。

可选的,第一确定模块301具体用于:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的质量评估值、第二节点的至少一个接口中除水平分割组之外的最小非0跳数对应的接口的数量、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口中最小非0跳数对应的接口到第一节点的负载分担权重、第二节点的至少一个接口中最小非0跳数对应的接口的质量评估值、第二节点的接口数量、第二节点的正常接口数量,确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。

可选的,发送模块303具体用于:周期性地通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。或者,在第二接口发生故障时,通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。

可选的,其他节点通过第二节点的第二接口分别到第一节点的负载分担权重和跳数携带在第四报文中。或者,其他节点通过第二节点的第二接口分别到第一节点的负载分担权重携带在第五报文中,其他节点通过第二节点的第二接口分别到第一节点的跳数携带在第六报文中。

可选的,第四报文还包括以下至少一项:第四报文的类型、第四报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第四报文的辅助报文用于标识第四报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。

第五报文还包括以下至少一项:第五报文的类型、第五报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第五报文的辅助报文用于标识第五报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。

第六报文还包括以下至少一项:第六报文的类型、第六报文的辅助标识、多个叶子节点中首个叶子节点的标识、多个叶子节点的数量。其中,第六报文的辅助报文用于标识第六报文是周期性发送的报文或者是在第二接口发生故障时发送的报文。

可选的,第二确定模块302具体用于:若第二接口为上行接口或者水平接口,则根据第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。

若第二接口为下行接口,则根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。

可选的,第二确定模块302具体用于:若第二接口为上行接口或者水平接口,则在第二节点通过第二节点的至少一个接口中除水平分割组之外的接口到第一节点的跳数中选择最小的非0跳数,并确定其他节点通过第二节点的第二接口到第一节点的跳数为非0跳数加1。若第二接口为下行接口,则在第二节点通过第二节点的至少一个接口到第一节点的跳数中选择最小的非0跳数,并确定其他节点通过第二接口到第一节点的跳数为非0跳数加1。

可选的,第一确定模块301具体用于:在第二节点的转发面上根据第二节点通过第二节点的至少一个接口到第一节点的负载分担权重确定其他节点通过第二节点的第二接口到第一节点的负载分担权重。第二确定模块302具体用于:在第二节点的转发面上根据第二节点通过第二节点的至少一个接口到第一节点的跳数确定其他节点通过第二接口到第一节点的跳数。发送模块303具体用于:在第二节点的转发面上通过第二接口发送其他节点通过第二接口到第一节点的负载分担权重和跳数。

可选的,若第二节点在预设时长内未接收到第二节点通过第二接口到第一节点的负载分担权重和/或跳数,则第二节点通过第二接口到第一节点的负载分担权重和跳数均为0。或者,若第二节点在预设时长内未接收到通过第二接口传输的检测报文,则第二节点通过第二接口到第一节点的负载分担权重和跳数均为0,检测报文用于检测第二接口是否存在异常。

本申请提供的第二节点用于执行上述的路由信息传输方法,其内容和效果可参考方法实施例部分,对此不再赘述。

本申请还提供一种存储有计算机指令的非瞬时计算机可读存储介质,计算机指令用于使计算机执行上述的方法,其对应内容和效果可参考方法实施例部分,对此不再赘述。

本申请还提供一种计算机程序产品,该计算机程序产品包括计算机质量,该计算机指令用于使计算机执行上述的方法,其对应内容和效果可参考方法实施例部分,对此不再赘述。

64页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种网络接入控制方法、SDF、CP、UP以及网络系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!