本申请涉及网络通信技术领域,特别涉及一种报文转发方法和装置。
背景技术:
在对报文进行路由转发的过程中,针对转发路径存在等价路由、路由出口为聚合口的情况,在对等价路由和聚合口的各个成员口之间进行等价负载分担时,需要进行取模的运算;在对某条路径上的报文进行统计采样的时候,需要对满足条件的报文进行采样,此时也需要取商和取模的运算。
现有技术一般通过查找表项来实现取模和取商,即控制层在设备启动的时候下发由被除数和除数组成的表项;数据层设备转发报文时,若发现需要获取模值或商值,则将除数和被除数组成键值key,查找相应的表项,获取模值和商值。
上述通过查找表项获取模值和商值的方式,需要在设备启动时初始化表项,会占用cpu时间,影响设备启动速度,且数据层设备在转发报文时,需要执行查表操作,不但需要额外的查表时间,而且会占用ddr(dualdatarate,双倍速率同步动态随机存储器)的带宽。
技术实现要素:
本申请提供一种报文转发方法和装置,以实现对有取模取商运算的快速处理。
为达到上述目的,本申请的技术方案是这样实现的:
一方面,本申请提供了一种报文转发方法,应用于数据层设备,所述方法包括:
接收控制层设备发送的通知消息,通知消息携带报文到目的地址的通信链路上存在的等价路由的条目数和/或聚合口的成员数;
在数据层设备感知通信链路上存在等价路由或聚合口时,根据通知消息携带的所述条目数和/或所述成员数进行取模取商运算;
根据取模取商运算结果选择相应的等价路由和/或聚合口的成员口转发报文。
本申请还提供了一种报文转发方法,应用于控制层设备,所述方法包括:
向数据层设备发送通知消息,所述通知消息携带报文到目的地址的通信链路上存在的等价路由的条目数和/或聚合口的成员数;使数据层设备根据所述通知消息携带的所述条目数和/或所述成员数进行取模取商运算,根据取模取商运算结果选择相应的等价路由和/或聚合口的成员口转发所述报文。
另一方面,本申请提供了一种报文转发装置,应用于数据层设备,所述报文转发装置包括:
接收单元用于,接收控制层设备发送的通知消息,所述通知消息携带报文到目的地址的通信链路上存在的等价路由的条目数和/或聚合口的成员数;
计算单元用于,在所述数据层设备感知所述通信链路上存在等价路由和/或聚合口时,根据所述通知消息携带的所述条目数和/或所述成员数进行取模取商运算;
转发单元用于,根据取模取商运算结果选择相应的等价路由和/或聚合口的成员口转发报文。
本申请还提供了一种报文转发装置,应用于控制层设备,所述报文转发装置包括:
发送单元用于,向数据层设备发送通知消息,所述通知消息携带报文到目的地址的通信链路上存在的等价路由的条目数和/或聚合口的成员数;使数据层设备根据所述通知消息携带的所述条目数和/或所述成员数进行取模取商运算,根据取模取商运算结果选择相应的等价路由和/或聚合口的成员口转发所述报文。
另一方面,本申请提供了一种报文转发装置,包括处理器和机器可读存储介质,该机器可读存储介质存储有能够被处理器执行的机器可执行指令,该处理器被机器可执行指令促使:执行上述的报文转发方法。
另一方面,本申请提供了一种机器可读存储介质,存储有机器可执行指令,在被处理器调用和执行时,该机器可执行指令促使处理器:执行上述的报文转发方法。
本申请的有益效果是:通过控制层设备和数据层设备相互配合,由控制层设备统一下发携带等价路由的条目数和聚合出口的成员数的通知消息,数据层设备可以根据通知消息进行相应的取模取商运算,不需要采用查表的方式进行除法运算,减少设备启动的初始化负担,加快启动速度。
附图说明
图1为本申请实施例示出的应用于控制层设备的报文转发方法流程图;
图2为本申请实施例示出的应用于数据层设备的报文转发方法流程图;
图3为本申请实施例示出的控制层设备和数据层设备交互过程示意图;
图4为本申请实施例示出的取模取商运算过程示意图;
图5为本申请实施例示出的应用于控制层设备的报文转发装置结构框图;
图6为本申请实施例示出的应用于数据层设备的报文转发装置结构框图;
图7为本申请实施例示出的报文转发装置的硬件结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
图1为本申请实施例示出的应用于控制层设备的报文转发方法流程图,如图1所示,本实施例的方法包括:
s110,向数据层设备发送通知消息,该通知消息携带报文到目的地址的通信链路上存在的等价路由的条目数和/或聚合口的成员数;使数据层设备根据所述通知消息携带的所述条目数和/或所述成员数进行取模取商运算,根据取模取商运算结果选择相应的等价路由和/或聚合口的成员口转发报文。
本申请实施例的控制层设备可以主动向数据层设备发送上述通知消息,如在控制层设备启动时,按照设定的发送频率向控制层设备发送上述通知消息;控制层设备也可以根据报文到目的地址的通信链路上的等价路由、聚合口的变化情况向数据层设备发送上述通知消息,如在感知到报文到目的地址的通信链路上的等价路由的条目数和/或聚合口的成员数发生变化时发送上述通知消息;本申请实施例不限定控制层设备对通知消息的发送方法,可以根据应用场景设定。
其中,在对报文进行路由转发的过程中,若报文到目的地址的通信链路上只存在等价路由,通知消息携带所述等价路由的条目数;若报文到目的地址的通信链路上只存在路由出口为聚合口的情况,通知消息携带所述聚合口的成员数;若报文到目的地址的通信链路上即存在等价路由,又存在路由出口为聚合口的情况,通知消息携带等价路由的条目数和聚合口的成员数。
本实施例通过由控制层设备统一下发携带等价路由的条目数或聚合口的成员数的通知消息,使数据层设备可以根据通知消息进行相应的取模取商运算,不需要采用查表的方式进行除法运算,减少设备启动的初始化负担,加快启动速度。
由于在对报文进行转发时,如对报文在聚合口的各个成员口之间进行等价负载分担时,需要根据取模运算选择成员口转发报文,设备在进行取模运算时会引入误差;示例性地,假设设备的机器处理位数为32比特位,而用于取模运算的被除数或除数为小于32比特位的数值,如12比特位的数值,由于待处理的数字长度与设备的机器处理位数不等会引入计算误差,尤其是在被除数或除数的数值较小时,会极大地延长取模取商运算的计算时长。本实施例针对上述情况,设置通知消息还携带误差允许值,所述误差允许值用于控制取模取商运算的误差范围。
图2为本申请实施例示出的应用于数据层设备的报文转发方法流程图,如图2所示,本实施例的方法包括:
s210,接收控制层设备发送的通知消息,所述通知消息携带报文到目的地址的通信链路上存在的等价路由的条目数和/或聚合口的成员数。
本申请实施例控制层设备对通知消息的发送方式参见上文描述,在此不再赘述。
s220,在数据层设备感知通信链路上存在等价路由和/或聚合口时,根据通知消息携带的条目数和/或成员数进行取模取商运算。
本申请实施例在数据层设备感知通信链路上存在等价路由时,根据通知消息携带的等价路由的条目数进行取模取商运算;在数据层设备感知通信链路上存在路由出口为聚合口时,根据通知消息携带的聚合口的成员数进行取模取商运算;在数据层设备感知通信链路上即存在等价路由又存在路由出口为聚合口时,根据通知消息携带的等价路由的条目数和聚合口的成员数分别进行取模取商运算。
本申请实施例在数据层设备感知通信链路上存在等价路由和/或聚合口时,可以根据通知消息携带的条目数和/或成员数获取用于取模取商运算的除数和被除数,根据获取的除数和被除数进行取模取商运算。
本申请以数据层设备感知通信链路上只存在等价路由为例,可以根据等价路由的条目数获得所述条目数所占用的比特位数,根据所述条目数所占用的比特位数获取用于取模取商运算的除数和被除数。
s230,根据取模取商运算结果选择相应的等价路由和/或聚合口转发报文。
在数据层设备感知通信链路上只存在等价路由时,根据等价路由的条目数进行取模取商运算,根据运算结果选择相应的等价路由转发报文;在数据层设备感知通信链路上只存在聚合口时,根据聚合口的成员数进行取模取商运算,根据运算结果选择相应的成员口转发报文;在数据层设备感知通信链路上同时存在等价路由和聚合口时,利用根据等价路由的条目数进行的取模取商运算的运算结果选择相应的等价路由转发报文,利用根据聚合口的成员数进行的取模取商运算结果选择相应的成员口转发报文。
本实施例通过接收由控制层设备统一下发的携带等价路由的条目数或聚合出口的成员数的通知消息,根据通知消息进行相应的取模取商运算,不需要采用查表的方式进行除法运算,减少设备启动的初始化负担,加快设备启动速度。
本实施例中,可以根据报文的特征计算报文的hash值,并根据hash值、等价路由的条目数和/或聚合口的成员数获取用于取模取商运算的被除数;根据等价路由的条目数和/或聚合口的成员数获取用于取模取商运算的除数;根据设定的取模取商运算规则计算所述被除数和除数对应的模值和/或商值。
在对报文进行路由转发的过程中,转发路径上可能只存在等价路由的情况,此时可以利用等价路由对应的算法计算报文的hash值,根据计算得到的hash值、等价路由的条目数计算被除数,根据等价路由的条目数计算除数,根据计算得到的被除数与除数进行取模取商运算,并根据运算结果选择等价路由转发报文;在转发路径上只存在路由出口为聚合口时,同样地,可以利用聚合口对应的算法计算报文的hash值,根据计算得到的hash值、聚合口的成员数计算被除数,根据聚合口的成员数计算除数,根据计算得到的被除数与除数进行取模取商运算,并根据运算结果选择成员口转发报文。其中等价路由对应的算法与聚合口对应的算法不相同,所计算出的hash值也不同。
实际应用中,转发路径上还可能同时存在等价路由、路由出口为聚合口的情况,此时参照上述方法,分别计算利用等价路的条目数获得的除数与被除数,和利用聚合口的成员数获得的除数与被除数,分别计算两组被除数与除数对应的取模取商运算,分别根据两组运算结果选择相应的等价路由和聚合口的成员口转发报文。
本实施例中的通知消息还携带误差允许值,该误差允许值用于控制取模取商运算的误差范围。
本申请一个实施例中,通过下述方法利用通知消息携带的误差允许值控制取模取商运算的误差范围:
计算误差允许值占用的比特位数,以及计算等价路由的条目数和/或聚合口的成员数占用的比特位数;根据误差允许值占用的比特位数、等价路由的条目数和/或聚合口的成员数占用的比特位数,从hash值得到被除数;将等价路由的条目数和/或聚合口的成员数占用的比特位数作为除数。
本申请以报文到目的地址的通信链路上只存在等价路由为例说明计算除数和被除数的过程:
将等价路由的条目数占用的比特位数作为取模取商运算的除数,将根据报文的特征,如报文的长度特征计算得到的hash值用二进制数表示,取该hash二进制数的前m+n比特位的数值作为取模取商运算的被除数,m值为等价路由的条目数,n值为误差允许值占用的比特位数;即在获取等价路由的条目数所占用的比特位数m后,将该比特位数m加上n,作为取模取商运算的被除数所占用的比特位数,此时会引入1/2n的误差,因此通过合理的选择n的数值,可以控制取模取商运算的误差在允许的范围内。
本申请实施例中所述的“所占用的比特位数”可以做如下理解:将等价路由的条目数或聚合口的成员数换算为二进制数字,“所占用的比特位数”为该二进制数字所占用的比特位数。假设聚合口的成员数为十进制的29,转换为二进制数字为00011101,则聚合口的成员数所占用的比特位数为5;如果聚合口的成员数为十进制的12,转换为二进制数字为00001100,此时聚合口的成员数所占用的比特位数为4。
其中,对于报文到目的地址的通信链路上只存在路由出口为聚合口的情况,以及报文到目的地址的通信链路上同时存在等价路由和路由出口为聚合口的情况,取模取商运算的除数和被除数的计算过程均可参照报文到目的地址的通信链路上只存在等价路由的时除数和被除数的计算方案,本申请对此不再赘述。
在获得取模取商运算的被除数和除数后,按照下述取模取商运算规则计算被除数和除数对应的模值和商值,本实施例以a表示被除数,以b表示除数:
首先,根据误差允许值对除数b进行n比特位的左移运算,n值为误差允许值占用的比特位数;
然后,判断除数b是否右移了n比特位,若除数b没有右移n比特位,则循环执行下述过程,直至除数b右移n比特位:
将移位后的除数b与被除数a比较,若被除数a大于移位后的除数b,则用当前的被除数a与当前的除数b的差值更新被除数b,利用1左移n比特位后的值与中间商值的和更新中间商值,以及用n与1的差值更新n值,并将除数b右移一位,其中,中间商值的初始值为0;
在除数b右移n比特位时,当前的被除数a的数值为取模取商运算的模值,当前的中间商值为取模取商运算的商值。
为详细说明本申请的取模取商运算过程,下面通过一个具体实施例进行说明。
图3为本申请实施例示出的控制层设备和数据层设备交互过程示意图,本实施例基于网络中的交换机监测某个ip地址的数据流量的应用场景,交换机需要对对某条路径上的数据流量报文进行统计采样,此时需要取商和取模的运算,利用取商运算确定采样周期,利用取模运算获取周期内的报文id,为顺序采样和随机采样做准备。
在本应用场景下,本申请的控制层设备和数据层设备对应为交换机的控制设备和转发设备,参考如图3,控制层设备和数据层设备交互过程如下:
s310,控制层设备向数据层设备发送通知消息。
本实施例示例性地,在感知到报文到目的地址的通信链路上的等价路由的条目数和/或聚合口的成员数发生变化时,向数据层设备发送通知消息,本实施例为便于说明,以控制层设备在发现路由出口为聚合口为例。
s320,数据层设备接收通知消息。
基于上述假设,控制层设备在感知到通信链路上的聚合口的成员数发生变化时,向数据层设备发送通知消息,该通知消息携带变化后的聚合口的成员数和误差允许值。
相应的,数据层设备根据接收到通知消息,获取携带聚合口的成员数和误差允许值。
s330,数据层设备在感知通信链路上存在聚合出口时,获取用于取模取商运算的被除数a和除数b。
数据层设备将获取到的聚合口的成员数占用的比特位数作为取模取商运算的除数b,并利用聚合口对应的hash算法,根据报文的长度信息计算报文的hash值,将计算得到的hash值的前m+n比特位的数值作为取模取商运算的被除数。
s340,数据层设备根据设定的取模取商运算规则计算该被除数a和除数b对应的模值和商值。
数据层设备利用取商运算确定采样周期,利用取模运算获取周期内的报文id,为顺序采样和随机采样做准备。
图4为本申请实施例示出的取模取商运算过程示意图,该计算过程约为5n个时钟过程。如图4所示,该计算过程为:
s410,将除数b左移n比特位。
s420,判断n是否大于0,若n大于0,则执行步骤s430和s440,否则执行步骤s460。
本实施例通过判断n是否大于0来判断除数b是否右移了n比特位,在实际应用中,也可以通过其他方式来判断除数b是否右移了n比特位。
s430,将移位后的除数b与被除数a比较,若被除数a大于移位后的除数b,则执行步骤s431:用当前的被除数a与当前的除数b的差值更新被除数a(即数学表示式为a=a-b),若被除数a不大于移位后的除数b,则执行步骤s450。
s440,将移位后的除数b与被除数a比较,若被除数a大于移位后的除数b,则执行步骤s441:用1左移n比特位后与中间商值quotiet的和值更新中间商值quotiet(即数学表示式为quotiet=quotiet+(1<<n)),若被除数a不大于移位后的除数b,则执行步骤s450。
其中,中间商值quotiet的初始值为0,符号“<<”为左移运算符。
s450,用n与1的差值更新n值。
本步骤对应的数学表达式为n=n-1。
s460,将除数b右移一位,并返回步骤s420。
s470,当前的被除数a的数值为取模取商运算的模值,当前的中间商值quotiet为取模取商运算的商值。
本实施例的控制层设备和数据层设备相互配合,利用简单的移位运算和加减运算即可实现取模取商运算,无需通过查表的方式进行除法运算,能够加快设备的启动时间,节省启动时间接近分钟级,并且能够节省内存空间和ddr的带宽。
本实施例的方法尤其适用于不具有(或不支持)除法运算的处理芯片。
与上述报文转发方法相对应的,本申请该提供了报文转发装置实施例。
图5为本申请实施例示出的应用于控制层设备的报文转发装置结构框图,如图5所示,该报文转发装置50包括:发送单元51;
发送单元51用于向数据层设备发送通知消息,通知消息携带报文到目的地址的通信链路上存在的等价路由的条目数和/或聚合口的成员数;使数据层设备根据所述通知消息携带的等价路由的条目数和/或聚合口的成员数进行取模取商运算,根据取模取商运算结果选择相应的等价路由和/或聚合口的成员口转发所述报文。
其中,通知消息还可以携带误差允许值,所述误差允许值用于控制取模取商运算的误差范围。
本申请实施例由控制层设备统一下发携带等价路由的条目数或聚合出口的成员数的通知消息,使数据层设备可以根据该通知消息进行相应的取模取商运算,不需要采用查表的方式进行除法运算,减少设备启动的初始化负担,加快启动速度。
图6为本申请实施例示出的应用于数据层设备的报文转发装置结构框图,如图6所示,该报文转发装置60包括:接收单元61、计算单元62和转发单元63;
接收单元61用于接收控制层设备发送的通知消息,所述通知消息携带报文到目的地址的通信链路上存在的等价路由的条目数和/或聚合口的成员数;
计算单元62用于在数据层设备感知通信链路上存在等价路由和/或聚合口时,根据通知消息携带的所述条目数和/或所述成员数进行取模取商运算;
转发单元63用于根据取模取商运算结果选择相应的等价路由和/或聚合口的成员口转发报文。
本实施例中计算单元62包括:除数获取模块、被除数获取模块和取模取商运算模块;
被除数获取模块用于根据报文的特征计算所述报文的hash值,并根据所述hash值、等价路由的条目数和/或聚合口的成员数获取用于取模取商运算的被除数;
除数获取模块用于根据等价路由的条目数和/或聚合口的成员数获取用于取模取商运算的除数;
取模取商运算模块用于根据设定的取模取商运算规则计算被除数和除数对应的模值和/或商值。
其中,本实施例的通知消息还携带误差允许值,该误差允许值用于控制取模取商运算的误差范围;
相应的,被除数获取模块具体用于计算误差允许值占用的比特位数,以及计算等价路由的条目数和/或聚合口的成员数占用的比特位数;根据误差允许值占用的比特位数、条目数和/或成员数占用的比特位数,从hash值得到被除数;
除数获取模块具体用于将等价路由的条目数和/或聚合口的成员数占用的比特位数作为除数。
本实施例的一个实现方案中,取模取商运算模块具体用于,
根据误差允许值对所述除数进行n比特位的左移运算,n值为误差允许值占用的比特位数;
判断除数是否右移了n比特位,若除数没有右移n比特位,则循环执行下述过程,直至除数右移n比特位:
将移位后的除数与被除数比较,若被除数大于移位后的除数,则用当前的被除数与当前的除数的差值更新被除数,利用1左移n比特位后的值与中间商值的和更新中间商值,以及用n与1的差值更新n值,并将除数右移一位,其中,中间商值的初始值为0;
在除数右移n比特位时,当前的被除数的数值为取模取商运算的模值,当前的中间商值为取模取商运算的商值。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请提供的报文转发装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,参照图7所示,本申请提供的报文转发装置50、60均可包括处理器701、存储有机器可执行指令的机器可读存储介质702。处理器701与机器可读存储介质702可经由系统总线703通信。并且,通过读取并执行机器可读存储介质702中与报文转发逻辑对应的机器可执行指令,处理器701可执行上文描述的报文转发方法。
本申请中提到的机器可读存储介质702可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
根据本申请公开的示例,本申请还提供了一种包括机器可执行指令的机器可读存储介质,例如图7中的机器可读存储介质702,所述机器可执行指令可由报文转发装置50、60中的处理器701执行以实现以上描述的报文转发方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
综上,本申请实施例提供的报文转发方法和装置至少能够取得以下有益效果:
1、控制层设备和数据层设备配合进行取模取商运算,采用非查表方式实现取模取商运算,减少了设备启动的初始化负担,节省启动时间接近分钟级;
2、通过对被除数和除数的位数进行控制,替代硬件计算除数和被除数的位数,使得可以通过移位、加减操作进行取模取商运算,减少了硬件执行时间,有助于实现豹纹的快速处理;
3、引入可调节的误差,保证取模取商运算的计算时钟可控,不会因被除数较小时,硬件执行之间因除数和被除数的位数差很大,造成计算执行时间增加的问题,且通过对可接受误差范围的控制,优化被除数的位数,方便数据层转发设备获取数据的范围,降低计算的执行时间。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。