在网络设备中处理五元流组的方法

文档序号:7696971阅读:395来源:国知局
专利名称:在网络设备中处理五元流组的方法
技术领域
本发明涉及一种在网络设备中处理五元流组的方法。
背景技术
散列方法,也叫哈希方法或杂凑方法,是一种基本的数据索引方法。在散列方法中使用的转换函数就叫做散列函数。散列函数建立了从表项关键码(Key)集合到散列表地址集合的一个映射。有了散列函数,就可以根据关键码确定表项在散列表中的唯一存放地址。一般而言,散列函数是一个压缩映射函数,即通常Key值空间比散列表地址集合大得多,因此就会产生冲突。
散列函数的生成和冲突解决方案是散列表技术的两个主要方面。散列函数的种类很多,没有统一的模式,都需要根据具体的情况具体分析后确定。
最常见的一种散列表方法如图1和图2所示图1中给出了其Key值的组织方法和哈希方法,哈希方法就是简单地将五元组的各个域分段成16位后进行异或,从而得到哈希后的Key值。
建表时,使用哈希值在散列表中找到对应的地址,将所要存放的用户数据(即叶子)以指针形式挂接在该表项上;如果该地址已有其它叶子或叶子链占用,则先找到该最末端的叶子,并将在该叶子中填入当前叶子的指针。一个哈希表项上的叶子采用双向链表结构,以便于插入和删除等操作。
查找叶子时,首先对五元组作哈希运算,得到哈希表的地址,找到对应的叶子,之后要将该叶子中的Key与当前查找的Key作一次精确比较,以确定找到的叶子是否正确;如果该地址上有多片叶子,还需要遍历叶子链表并逐一比较Key值。插入和删除叶子的过程与此类似。
虽然采用线性链表的冲突解决方法好处是结构简单,维护也简单;但查找、增加、删除的速度较慢,尤其是在哈希表接近满载时。
另一种散列表的结构如图3和图4所示这一方法采用的是等长哈希函数,是从Key值空间到另一个同样大小的空间的一一映射;即,如果是104位的Key作哈希,那么结果也必然是一个104位的空间;而且,不同的Key值必然哈希成不同的结果。
等长哈希方法的好处,是查找到叶子后,不必再与原始Key进行比较,仅根据哈希值就可以确认查找是否成功。
从图3中可以看出,进行哈希后,越靠左边的位,越集中地反映了所有Key值的变化情况。最左边的若干位将直接用于查哈希表,这样冲突得最小。
该散列表采用二叉树结构,避免了线性链表方案的不足,查找速度也有大幅度的提高,但插入删除操作比线性链表要复杂一些。
由于哈希表大小有限,即使采用等长哈希,哈希表的冲突仍不可避免;而且,哈希函数的选择受到更大的限制,因为必须满足哈希值域空间一一映射的特性。所以,一般来说,在哈希表内的冲突比前一种方法更大。
每一类不同的Key值输入时,变化较大的域也各自不同,所以一个哈希函数不可能适应所有的情况。一种通用的散列方式,其实对各种情况都不可能最优,有时反而使得冲突更大。在报文流五元组状态表的实际应用中,就暴露出这一弱点。

发明内容
本发明的目的在于提供一种在网络设备中处理五元流组的方法,以减少哈希表的冲突。
本发明的方法包括步骤网络设备从五元组中提取出其源IP地址、目的IP地址、协议号、源端口号和目的端口号;对源IP地址、目的IP地址、协议号、源端口号和目的端口号进行散列并得到等长散列值;将所述五元组中各个变化较大的域提取出进行散列并得到冗余散列值;将所述冗余散列值组合到所述等长散列值中形成实际散列值;以及网络设备用所述的实际散列值维护等长的散列表。
其中所述的冗余散列值为复数位。
冗余散列值的散列方式根据设备所处的位置进行调整。
当设备位于INTERNET边缘时,将目的IP地址由低位到高位分成四段,将源IP地址低八位的高、低位交换位置,再将各段进行异或运算得到冗余散列值。
当设备位于INTERNET骨干网时,将目的IP地址和源IP地址由低位到高位各分成四段,每段八位,再把源IP地址各段的高、低位交换位置,即最高位变成最低位,次高位变成次低位,依次类推;最后将各段进行异或运算得到冗余散列值。
当设备位于数据中心、网络内容提供商的服务器前端时,将源IP地址由低位到高位分成四段,再把目的IP地址的低八位的高低位交换位置,最后将各段进行异或运算得到冗余散列值。
本发明有效地降低了流状态表中的冲突,提高了内存利用率和表项的查找速度。


图1A、图1B为现有技术一的散列表方法示意图;图2为现有技术一的散列表结构示意图;图3为现有技术二的等长散列表方法示意图;图4为等长散列表结构示意图;图5为边缘接入层的组网示意图;图6为数据中心和ICP的组网示意图;图7为Intertnet骨干网示意图;图8为本发明散列表方法示意图;图9为本发明的散列值结构示意图;图10为实现哈希方法的装置结构图。
具体实施例方式
等长哈希一一映射的方式极大地限制了哈希函数的灵活性,导致哈希后的索引部分不能很好地反映Key中的变化域,从而不能将Key均匀地散列开来。为此,本发明在五元组104位的基础上增加8位的冗余位,这8个冗余位和原有的等长哈希值一起组成实际的哈希值。如下所示|冗余哈希值|等长哈希值|这样,得到的哈希值仍满足一一映射的要求,又兼有任选8位的压缩哈希函数的灵活性。
哈希函数的主要功能,就是要把原有大Key值空间中的有限个实际可能出现的值,尽可能均匀地散列在哈希表的空间内。具体到报文流的五元组,就是要把五元组中各个变化较大的域,提取出来并组合到哈希值的最左边的N个位中来(哈希表的大小为EXP(2,N))。
当前网络中的报文流,流量绝大部分是TCP流量;而这其中,Web流量又占据了主要部分。因此,对于五元组的哈希函数,要针对这些特点进行考虑A、用户侧TCP端口号16位是较好的哈希值,它在五元组中,变化最大、分布最为随机,应该尽量调整到哈希值的前N位中去。
B、源目的IP地址的32位中,变化的部分视设备在网络中位置不同而不同(1)设备位于Internet边缘,这时源IP地址的32位中变化域的分布较为集中,比如说可能集中在低8位,而目的IP地址的变化域分布较为分散。
参阅图5,边缘路由器用于会聚用户的流量。流量主要从路由器内侧的用户发起,其特点是源IP地址范围较为集中,而目的IP地址较为分散。
(2)设备位于数据中心(IDC)、网络内容提供商(ICP)的服务器群前端,这时流量的目的IP地址的32位中变化域的分布较为集中,比如说可能集中在低8位,而源IP地址的变化域分布较为分散。
参阅图6,Internet上的用户从远端发起对数据中心的服务器的访问,即流量主要从路由器外侧的Internet发起,其特点是目的IP地址范围较为集中,而源IP地址较为分散。
(3)设备位于Internet骨干网,这时源目的IP地址各自的32位中,变化的域均较为分散。
参阅图7,Internet上各种用户发起的访问不同目的的流量均要穿越骨干网路由器,这些流量的特点是源IP地址和目的IP地址均很分散。
C、目的TCP端口一般而言,分布较为集中,网络中访问最多的端口就是Web、文件传输协议(FTP)等应用的TCP端口。
D、IP协议号的变化也很小,一般主要是传输控制协议号(TCP)或者用户数据报协议(UDP)号。
根据上述特点,构造出新的哈希方法参阅图8A,当设备位于INTERNET边缘时,将目的IP地址由低位到高位分成四段,其中两段循环移动4位;将源IP地址低八位的高、低位交换位置,再将各段进行异或运算得到冗余散列值。
参阅图8B,当设备位于INTERNET骨干网时,将目的IP地址和源IP地址由低位到高位各分成四段,每段八位,其中各有两段循环移动4位,再把源IP地址各段的高、低位交换位置,即最高位变成最低位,次高位变成次低位,依次类推;最后将各段进行异或运算得到冗余散列值。
参阅图8C,当设备位于数据中心、网络内容提供商的服务器前端时,将源IP地址由低位到高位分成四段,其中两段循环移动4位;再把目的IP地址的低八位的高低位交换位置,最后将各段进行异或运算得到冗余散列值。
从图中可以看到,不同网络位置的哈希方法目的都是将五元组中变化最大的位域集中反映到哈希值中。其中,Swap的意思是将该域的位高低位交换位置,也即最高位变成最低位,次高位变成次低位,依次类推。
最终哈希值的结构参阅图9所示。
参见图4,网络设备中处理五元组流的步骤如下(1)、创建空白的哈希表、空闲的中间节点链表、空闲的叶子链表(2)、收到一个报文的首包,即TCP的同步标志(SYN)请求包或者用户数据报协议(UDP)首包时,提取出其源IP地址、目的IP地址、协议号、源端口号、目的端口号,按前述的哈希方法进行哈希运算,然后根据哈希得到的Key值,索引到哈希表的一个表项,同时从空闲的叶子链中分配一片叶子,最后修改哈希表项的内容指向该叶子的地址,并把哈希值和该报文流的状态和路由等信息存放到叶子当中。
(3)、如果之后收到和首包相同五元组的后续包,则使用和首包同样的哈希方法,就可以从哈希表中查找到对应的叶子,从而得到该数据流的状态和路由等信息,从而进行快速转发;并且可能修改叶子中的状态信息(4)、之后如果收到其它报文流的首包,并且在向哈希表中插入叶子时,发现哈希表项下边已保存了其它的叶子,就称为发生了表项冲突。此时就要从空闲的中间节点链中分配一个节点。一个中间节点有两个表项,从而可以将冲突的两篇片叶子分别挂在这两个表项上,再将中间节点挂接到哈希表项上。
(5)、如果收到了数据流中的结束标志的报文,比如TCP RST报文,则可以将该数据流对应的叶子中的流状态标记为结束,再延迟一段时间后,即可以将该叶子删除。删除叶子时,如果该叶子是直接挂接在一个哈希表项上,则要将哈希表项中指向叶子的指针清除;如果该叶子是挂接在中间节点上,则要将该中间节点回收到空闲节点链上,并把该节点上挂接的另一片叶子重新挂接到上一个中间节点或哈希表项上;最后将叶子回收到空闲叶子链上(6)、对于UDP数据流,没有报文主动标识流的结束,因此需要通过一个定时器来定时老化掉哪些长时间没有报文使用的叶子,也即把这些叶子删除并回收到空闲链表中。
(7)、通过上述(2)-(6)的步骤,就可以对转发报文不断进行报文五元组流的插入、刷新和删除,同时利用所维护的这个五元组流状态表完成报文的快速转发和监控。
参阅图10,用简单的硬件逻辑实现上述的各种环境下的冗余哈希值的计算。其中计数器用于指示输入Key的当前位地址内存中存储有哈希方案的数据,数据Data1指定需要进行哈希的数据段位地址,可以有多段;数据Data2控制作哈希的各数据段是否要循环移位或翻转(SWAP),分别用第8位和第9位通过开关1和开关2实现。
改变内存中数据的内容,就可以控制实现不同网络位置的哈希。比如,对于图8A的情况下,内存的内容为地址80b0000 10000b0000 0000 /*不移位也不翻转*/地址160b0001 00000b0000 0001 /*移位,不翻转*/地址240b0001 10000b0000 0000 /*不移位也不翻转*/地址320b0010 00000b0000 0001 /*移位,不翻转*/地址400b0010 10000b0000 0010 /*翻转,不移位*/其它地址数据均为0,表示该备份部分数据不参与冗余哈希。
可见,只要修改内存的内容,就可以实现不同网络情况下的哈希方案,非常灵活。
本发明中,冗余哈希值的散列方式不是唯一的,在其它的网络位置或场合,还可以作一些调整,以适应不同的情况。冗余位也不限于8位,可以根据情况选择增加更多或更少的位。
权利要求
1.一种在网络设备中处理五元组流的方法,其特征在于包括步骤网络设备从五元组中提取出其源IP地址、目的IP地址、协议号、源端口号和目的端口号;对源IP地址、目的IP地址、协议号、源端口号和目的端口号进行散列并得到等长散列值;将所述五元组中各个变化较大的域提取出进行散列并得到冗余散列值;将所述冗余散列值组合到所述等长散列值中形成实际散列值;以及网络设备用所述的实际散列值维护等长的散列表。
2.如权利要求1所述的方法,其特征在于所述的五元组为传输控制协议(TCP)的同步标志(SYN)请求包或者用户数据报协议(UDP)的首包。
3.如权利要求1或2所述的方法,其特征在于冗余散列值的散列方式根据设备所处的位置进行调整。
4.如权利要求3所述的方法,其特征在于当设备位于INTERNET边缘时,将目的IP地址由低位到高位分成四段,其中两段循环移动4位;将源IP地址低八位的高、低位交换位置,再将各段进行异或运算得到冗余散列值。
5.如权利要求3所述的方法,其特征在于当设备位于INTERNET骨干网时,将目的IP地址和源IP地址由低位到高位各分成四段,每段八位,其中各有两段循环移动4位,再把源IP地址各段的高、低位交换位置,即最高位变成最低位,次高位变成次低位,依次类推;最后将各段进行异或运算得到冗余散列值。
6.如权利要求3所述的方法,其特征在于当设备位于数据中心、网络内容提供商的服务器前端时,将源IP地址由低位到高位分成四段,其中两段循环移动4位;再把目的IP地址的低八位的高低位交换位置,最后将各段进行异或运算得到冗余散列值。
7.如权利要求1所述的方法,其特征在于所述的维护包括查找、增加、修改和删除散列表中相关项逻辑关系的操作。
8.如权利要求1所述的方法,其特征在于所述的冗余散列值为多位。
全文摘要
本发明公开了一种在网络设备中处理五元流组的方法,该方法为网络设备从五元组中提取出其源IP地址、目的IP地址、协议号、源端口号和目的端口号;对源IP地址、目的IP地址、协议号、源端口号和目的端口号进行散列并得到等长散列值;将所述五元组中各个变化较大的域提取出进行散列并得到冗余散列值;将所述冗余散列值组合到所述等长散列值中形成实际散列值;以及网络设备用所述的实际散列值维护等长的散列表。本发明能有效地降低流状态表中的冲突,从而提高内存利用率,并大大提高表项的查找速度。
文档编号H04L12/26GK1571352SQ0314737
公开日2005年1月26日 申请日期2003年7月12日 优先权日2003年7月12日
发明者熊鹰, 龚华 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1