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

报文发送方法及装置

文献发布时间:2024-04-18 20:01:55


报文发送方法及装置

技术领域

本公开涉及通信技术领域,尤其涉及一种报文发送方法及装置。

背景技术

目前数据中心网络广泛应用的Fabric架构中会应用ECMP(Equal-Cost MultipathRouting,等价多路径路由)技术,其优点主要体现在可以提高网络冗余性和可靠性,同时提高网络资源利用率。在无损网络中,例如AI(Artificial Intelligence,人工智能)训练、HPC(High performance computing,高性能计算)应用等对网络速率要求越来越高。

RoCE(RDMA over Converged Ethernet,基于融合以太网的RDMA)是一种网络协议,允许应用通过以太网实现远程内存访问。目前RoCE有两个协议版本,v1和v2。其中RoCEv1是一种链路层协议,允许在同一个广播域下的任意两台主机直接访问。而RoCE v2是一种Internet层协议,即可以实现路由功能。

不同RoCE业务会话的QP(队列对)不同,但源IP地址、目的IP地址、协议号、源端口号和目的端口号可能一致。如果按照5元组(源IP地址、目的IP地址、协议号、源端口号和目的端口号)进行哈希路由计算,对于源IP、目的IP、协议号、源端口和目的端口相同的多条RoCE业务会话,会得到相同的下一跳。即多条RoCE业务会话会当做一条会话处理,通过相同的链路传输,由此会导致链路之间负载不均衡。

发明内容

有鉴于此,本公开提供了一种报文发送方法及装置,用以避免链路之间负载不均衡,提高网络的性能。

第一方面,本公开提供了一种报文发送方法,所述方法包括:接收报文,所述报文包括目的队列对标识;如果下一跳索引表中不存在与所述目的队列对标识对应的下一跳链路标识,则根据所述目的队列对标识,计算哈希因子;将所述哈希因子与下一跳链路总数进行取模运算,得到余数,所述余数与多个下一跳链路中的目标下一跳路径对应;将所述目标下一跳链路的下一跳路径标识记录在所述下一跳索引表中,并将所述报文通过所述目标下一跳链路发送至下一跳设备。

第二方面,本公开提供了一种报文发送装置,所述装置包括:接收模块,用于接收报文,所述报文包括目的队列对标识;计算模块,用于如果下一跳索引表中不存在与所述目的队列对标识对应的下一跳链路标识,则根据所述目的队列对标识,计算哈希因子;取模模块,用于将所述哈希因子与下一跳链路总数进行取模运算,得到余数,所述余数与多个下一跳链路中的目标下一跳路径对应;第一发送模块,用于将所述目标下一跳链路的下一跳路径标识记录在所述下一跳索引表中,并将所述报文通过所述目标下一跳链路发送至下一跳设备。

第三方面,本公开提供了一种网络设备,包括处理器和机器可读存储介质,机器可读存储介质存储有能够被处理器执行的机器可执行指令,处理器被机器可执行指令促使执行本公开第一方面所提供的方法。

因此,通过应用本公开提供的报文发送方法及装置,通过将目的队列对标识作为哈希因子参与计算下一跳路由,可以使链路负载更加均匀,进而提高网络的性能。

附图说明

图1是本说明书根据一示例性实施例示出的系统架构的示意图;

图2为本公开实施例提供的一种报文发送方法的流程图;

图3为本公开实施例提供的在下一跳链路故障的情况下修改下一跳索引表的示意图;

图4为本公开另一实施例提供的在下一跳链路故障的情况下修改下一跳索引表的示意图;

图5为本公开实施例提供的一种报文发送装置;

图6为本公开实施例提供的网络设备硬件结构体。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施例并不代表与本公开相一致的所有实施例。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相对应的列出项目的任何或所有可能组合。

应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

以下结合图1对本说明书实施例的可以应用报文发送方法和装置的系统架构进行说明。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。

图1是本说明书根据一示例性实施例示出的系统架构的示意图。

如图1所示,该系统架构例如可以包括Spine(核心)交换机和Leaf(分支)交换机。

示例性地,本实施例中,Spine交换机例如可以包括Spine1和Spine1,Leaf交换机例如可以包括Leaf1、Leaf2、Leaf3和Leaf4。无损网络中共有8条RoCE业务流。

RoCE中基于源IP、目的IP、源QP、目的QP唯一标识一个应用会话。RoCE v2报文基于UDP,UDP目的端口号固定为4791。另外,不同RoCE业务会话的QP不同,但源端口号可能一致。在这种情况下,如果按照5元组进行哈希路由计算,对于源IP、目的IP、协议号、源端口和目的端口相同的多条RoCE业务会话,会得到相同的下一跳,即多条RoCE业务会话会当做一条流处理,通过相同的链路传输,由此会导致链路之间负载不均衡。

例如,Spine1和Leaf1间的链路负载业务流1、2和3,Spine1和Leaf2间的链路负载业务流5、6和7,Spine1和Leaf3间的链路负载业务流1、2、3、5、6和7,Spine2和Leaf1间的链路负载业务流4,Spine2和Leaf2间的链路负载业务流8,Spine2和Leaf4间的链路负载业务流4和8。由此可见,实际经过Leaf交换机负载后,Leaf交换机和Spine交换机间不同链路负载不一致,负载多的链路先达到带宽瓶颈发生拥塞,导致无法发挥2条链路满带宽的性能。

根据本公开的实施例,在收到报文时,将报文中的目的队列对标识提取出来,将目的队列对标识作为哈希因子参与计算下一跳路由,可以使链路负载更加均匀,进而提高网络的性能。

下面对本公开实施例提供的报文发送方法进行详细地说明。参见图2,图2为本公开实施例提供的一种报文发送方法的流程图。该方法可以应用于交换机,也可以用于其他能够发送报文的通信设备。本公开实施例提供的报文发送方法可包括如下所示步骤。

步骤210、接收报文,报文包括目的队列对标识。

根据本公开的实施例,目的队列对标识可以为目的队列对的标识。其中,队列对(Queue Pair,QP)是指一对工作队列。工作队列(Work Queue,WQ)是一个储存工作请求的队列,是RDMA(Remote Direct Memory Access,远程直接数据存取)技术中的重要概念之一。

根据本公开的实施例,除了目的队列对标识之外,报文还可以包括源IP地址和目的IP地址等信息,本公开对此不作具体限定。

步骤220、确定下一跳索引表中是否存在与目的队列对标识对应的下一跳链路标识。如果不存在,则执行步骤230~250,如果存在,则执行步骤260。

步骤230、根据目的队列对标识,计算哈希因子。

根据本公开的实施例,例如可以将目的队列对标识通过散列算法变换成固定长度的输出,得到哈希因子。其中,固定长度可以根据实际需要设置。

步骤240、将哈希因子与下一跳链路总数进行取模运算,得到余数,余数与多个下一跳链路中的目标下一跳路径对应。

根据本公开的实施例,下一跳链路可以为交换机与报文传播的下一跳设备之间的链路。链路例如可以为等价多路径路由(Equal-Cost Multi-Path Routing,ECMP)链路。交换机与下一跳设备之间可以有多个链路,即下一跳链路可以有多个。下一跳链路总数为下一跳链路的总数量。

根据本公开的实施例,可以预先将所有下一跳链路从0开始依次编号,相邻两个编号间隔1。基于此,可以选择编号与余数一致的下一跳链路,作为目标下一跳链路。

步骤250、将目标下一跳链路的下一跳路径标识记录在下一跳索引表中,并将报文通过目标下一跳链路发送至下一跳设备。

根据本公开的实施例,可以将目的队列对和对应的下一跳路径标识记录在下一跳索引表中。

步骤260、将报文通过下一跳链路标识指示的目标下一跳链路发送至下一跳设备。

根据本公开的实施例,报文例如可以包括RoCE报文,更具体地,可以包括RoCE v2报文。

对于RoCE报文,如果按照5元组进行哈希路由计算,对于源IP、目的IP、协议号、源端口和目的端口相同的多条RoCE业务会话,会得到相同的下一跳,即多条RoCE业务会话会当做一条流处理,通过相同的链路传输,由此会导致链路之间负载不均衡。

根据本公开的实施例,通过将目的队列对标识作为哈希因子参与计算下一跳路由,可以使链路负载更加均匀,进而提高网络的性能。

根据本公开的实施例,可以采用多种路由策略计算哈希因子。示例性地,本实施例中,路由策略例如可以包括DQP(目的QP)类型和DQP+SIP(源IP)+DIP(目的IP)类型。对于DQP类型的策略,可以根据DQP计算得到哈希因子。对于DQP+SIP+DIP类型的策略,可以根据DQP、SIP和DIP计算得到哈希因子。本实施例中,可以根据不同路由策略,在下一跳索引表中维护哈希因子与下一跳链路之间的对应关系。

根据本公开的实施例,对于DQP类型的策略,例如可以将目的队列对标识的每一位与0进行异或运算,得到第一数值(exclusive OR,XOR)运算,得到第一数值。截取第一数值的低16位,得到第二数值。将第一数值的低23至20位数值与低19至16位数值进行异或运算,得到第三数值。将第三数值替换第二数值的低11至8位,得到第四数值。然后截取第四数值的低10位,得到哈希因子。

例如,目的队列对标识可以为0000 0000 0010 1110 1001 0100。将目的队列对与0进行异或运算,得到第二数值0000 0000 0010 1110 1001 0100。截取第二数值的低16位,得到第三数值0010 1110 1001 0100。将第一数值的23-20位“0000”和19-16位“0000”进行异或运算,得到0000。将0000替换第二数值中的11-8位,得到第四数值0000 0000 00101000 0001 0100。截取第四数值的低10位得到哈希因子00 0001 0100。

根据本公开的实施例,对于DQP+SIP+DIP类型的策略,可以将源IP地址与目的IP地址进行异或运算,得到第五数值。将第五数值与目的QP标识进行异或运算,得到第六数值。截取第六数值的低16位,得到第七数值。截取第六数值的低23至20位数值与低19至16位数值进行异或运算,得到第八数值。然后将第八数值替换第七数值的低11至8位,得到哈希因子。

例如,源IP地址可以为11000000 10101000 00111011 00011000,目的IP地址可以为11000000 10101000 00111011 00011011,目的队列对标识可以为00000000 0010 11101001 0100。将源IP地址与目的IP地址进行异或运算,得到第五数值00000000 0000000000000000 00000011。第五数值与目的队列对标识进行异或运算,得到第六数值0000000000000000 00101110 10010111。截取第六数值的低16位,得到第七数值0010111010010111;截取第六数值的23至20位数值0000与19至16位数值000 0进行异或运算,得到第八数值0000;将第八数值替换第七数值的11至8位,得到哈希因子00101000 00010111。

可选地,还可以对每个下一跳链路进行故障监测。如果检测到目标下一跳链路故障,则可以根据哈希因子,从未发生故障的下一跳链路中确定备用下一跳链路,并将下一跳索引表中目标下一跳链路的下一跳链路标识修改为备用下一跳链路的下一跳链路标识。由此,对于后续报文,可以通过备用下一跳链路进行传输,避免故障链路的影响,提高了网络性能。示例性地,对于故障的链路,可以将哈希因子与未发生故障的下一跳链路总数进行取模运算,得到余数,将未发生故障的下一跳链路中与该余数对应的下一跳链路作为备用下一跳链路。

例如,若路由策略为DQP类型,则可以在下一跳索引表中维护DQP与下一跳地址之间的对应关系。在计算哈希因子、将哈希因子与下一跳链路总数count进行取模运算时,无论是否出现链路故障,均按照count的初始值计算,保证非故障链路保持原路径转发。对于故障链路,可以修改下一跳索引表中对应的下一跳链路标识,以将使用该故障链路的各个业务均匀负载到其他正常链路。

图3为本公开实施例提供的在下一跳链路故障的情况下修改下一跳索引表的示意图。

如图3所示,下一跳索引表可以包括DQP(目的队列对)字段和nexthop(下一跳链路)字段。两个RoCE业务被负载到链路2上,这两个RoCE业务的DQP分别为QP2和QP6。当链路2发生故障时,将负载到链路2上RoCE业务流重新负载,分别根据QP2和QP6,从未发生故障的下一跳链路中确定备用下一跳链路,得到链路1和3。然后将这两个RoCE业务分别负载到链路1和3上。原本负载到正常链路上的RoCE业务流路径并未改变。

若路由策略为DQP+SIP(源IP)+DIP(目的IP),则在索引表中维护DQP+SIP+DIP与下一跳地址对应关系。在计算哈希因子、将哈希因子与下一跳链路总数count进行取模运算时,无论是否出现链路故障,均按照count的初始值计算,保证非故障链路保持原路径转发。对于故障链路,可以修改下一跳索引表中对应的下一跳链路标识,以将使用该故障链路的各个业务均匀负载到其他正常链路。

图4为本公开另一实施例提供的在下一跳链路故障的情况下修改下一跳索引表的示意图。

如图4所示,下一跳索引表可以包括HASH(哈希)因子字段和nexthop(下一跳链路)字段。HASH(哈希)因子字段包括SIP(源IP)字段、DIP(目的IP)字段和DQP(目的队列对)字段。RoCE业务2和6被负载到链路2上,其中,RoCE业务2的DQP为QP2,SIP为SIP2,DIP为DIP2。RoCE业务6的DQP为QP6,SIP为SIP6,DIP为DIP6。当链路2发生故障时,将负载到链路2上RoCE业务2和6重新负载。对于RoCE业务2,根据DQP2、SIP2和DIP2,计算哈希因子,将哈希因子与下一跳链路总数进行取模运算,得到余数。然后从未发生故障的下一跳链路中确定与余数对应的备用下一跳链路,得到链路1。接着修改下一跳索引表,将RoCE业务2负载到链路1上。对于RoCE业务6,根据DQP6、SIP6和DIP6,计算哈希因子,将哈希因子与下一跳链路总数进行取模运算,得到余数,然后从未发生故障的下一跳链路中确定与余数对应的备用下一跳链路,得到链路3。接着修改下一跳索引表,将RoCE业务6负载到链路3上。原本负载到正常链路上的RoCE业务流路径并未改变。

根据本公开的实施例,RoCE无损网络可以应用在高性能存储和计算场景,这些场景对丢包和时延很敏感,百分之一的丢包就会引起吞吐急剧下降。无损网络中交换机与下一跳设备之间可以有多条等价链路。

当等价链路的其中一条或者多条失效时,如果对所有流量进行重新路由计算,根据新的路由进行流量分发,则会导致所有RoCE业务会话都会重新进行路径选择,进而影响业务。

本实施例中,可以采用弹性路由算法,即可以仅将故障链路的流量重新路由到其他活跃链路,而非故障链路数据流则不需要修改下一跳,保持原路径转发。由此,可以故障降低对业务的影响。

另外,如果目标下一跳链路恢复正常且备用下一跳链路的负载超过接口带宽阈值,则可以将下一跳索引表中备用下一跳链路的下一跳链路标识修改为目标下一跳链路的下一跳链路标识。其中,接口带宽阈值可以根据实际需要设置。负载例如可以用链路的带宽占有率来表征。

示例性地,链路的带宽占用率可以通过以下公式计算:

T(R)=txRate/BW

其中,T(R)为带宽占用率,txRate为传输速率,BW为带宽。

根据本公开的实施例,通过设置阈值,可以降低切换链路时对业务的影响,提高业务的稳定性以及无损网络的性能。

基于同一发明构思,本公开实施例还提供了与报文发送方法对应的报文发送装置。参见图5,图5为本公开实施例提供的一种报文发送装置,装置例如可以应用于交换机,报文发送装置包括:

接收模块510,用于接收报文,报文包括目的队列对标识;

计算模块520,用于如果下一跳索引表中不存在与目的队列对标识对应的下一跳链路标识,则根据目的队列对标识,计算哈希因子;

取模模块530,用于将哈希因子与下一跳链路总数进行取模运算,得到余数,余数与多个下一跳链路中的目标下一跳路径对应;

第一发送模块540,用于将目标下一跳链路的下一跳路径标识记录在下一跳索引表中,并将报文通过目标下一跳链路发送至下一跳设备。

可选地,报文发送装置还可以包括:第二发送模块,用于如果下一跳索引表中存在与目的队列对标识对应的下一跳链路标识,则将报文通过下一跳链路标识指示的目标下一跳链路发送至下一跳设备。

可选地,报文发送装置还可以包括:

第一修改模块,用于如果检测到目标下一跳链路故障,则根据哈希因子,从未发生故障的下一跳链路中确定备用下一跳链路,并将下一跳索引表中目标下一跳链路的下一跳链路标识修改为备用下一跳链路的下一跳链路标识;

第二修改模块,用于如果目标下一跳链路恢复正常且备用下一跳链路的负载超过接口带宽阈值,则将下一跳索引表中备用下一跳链路的下一跳链路标识修改为目标下一跳链路的下一跳链路标识。

可选地,计算模块可以包括:

第一异或子模块,用于将目的队列对标识的每一位与0进行异或运算,得到第一数值;

第一截取子模块,用于截取第一数值的低16位,得到第二数值;

第二异或子模块,用于将第一数值的低23至20位数值与低19至16位数值进行异或运算,得到第三数值;

第一替换子模块,用于将第三数值替换第二数值的低11至8位,得到第四数值;

第二截取子模块,用于截取第四数值的低10位,得到哈希因子。

可选地,报文还可以包括源IP地址和目的IP地址;计算模块可以包括:

第三异或子模块,用于将源IP地址与目的IP地址进行异或运算,得到第五数值;

第四异或子模块,用于将第五数值与目的QP标识进行异或运算,得到第六数值;

第三截取子模块,用于截取第六数值的低16位,得到第七数值;

第四截取子模块,用于截取第六数值的低23至20位数值与低19至16位数值进行异或运算,得到第八数值;

第二替换子模块,用于将第八数值替换所述第七数值的低11至8位,得到哈希因子。

根据本公开的实施例,通过将目的队列对标识作为哈希因子参与计算下一跳路由,可以使链路负载更加均匀,进而提高网络的性能。

基于同一发明构思,本公开实施例还提供了一种网络设备,如图6所示,包括处理器610、收发器620和机器可读存储介质630,机器可读存储介质630存储有能够被处理器610执行的机器可执行指令,处理器610被机器可执行指令促使执行本公开实施例所提供的报文发送方法。前述图5所示的报文发送装置,可采用如图6所示的网络设备硬件结构实现。

上述计算机可读存储介质630可以包括随机存取存储器(英文:Random AccessMemory,简称:RAM),也可以包括非易失性存储器(英文:Non-volatile Memory,简称:NVM),例如至少一个磁盘存储器。可选的,计算机可读存储介质630还可以是至少一个位于远离前述处理器610的存储装置。

上述处理器610可以是通用处理器,包括中央处理器(英文:Central ProcessingUnit,简称:CPU)、网络处理器(英文:Network Processor,简称:NP)等;还可以是数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:ApplicationSpecific Integrated Circuit,简称:ASIC)、现场可编程门阵列(英文:Field-Programmable Gate Array,简称:FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

本公开实施例中,处理器610通过读取机器可读存储介质630中存储的机器可执行指令,被机器可执行指令促使能够实现处理器610自身以及调用收发器620执行前述本公开实施例描述的报文发送方法。

另外,本公开实施例提供了一种机器可读存储介质630,机器可读存储介质630存储有机器可执行指令,在被处理器610调用和执行时,机器可执行指令促使处理器610自身以及调用收发器620执行前述本公开实施例描述的报文发送方法。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本公开方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

对于报文发送装置以及机器可读存储介质实施例而言,由于其涉及的方法内容基本相似于前述的方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。

技术分类

06120116570960