专利名称:高速网络环境中提高tcp并发连接速度的方法
技术领域:
本发明涉及网络数据处理领域,具体涉及一种高速网络环境中提高TCP并发连接速度的方法。
背景技术:
TCP连接管理是TCP/IP协议栈处理的重要内容,其使用一个TCP连接表保存当前所有的TCP连接状态及信息。当新的TCP连接建立时,需要在TCP连接表中新建表项,当 TCP连接关闭后,需要把该连接从表中删除。同时在处理同一个连接的每一个包的时候,需根据其四元组(源IP地址,目的IP地址,源端口地址,目的端口地址)查找连接表。网络上的服务器、防火墙、网关等设备花费了大量的时间进行协议处理,然而随着网络流量的快速增长,现在主干网络的速度已达到10(ibpS,而且同时的并发连接数也已达到了百万级别。能够处理百万级别的连接数已经成为主干网络设备的一项重要的能力,如防火墙,四层网关,等等。然而,随着连接数目的增多,现有的软件方法在维护如此多的连接时存在着巨大的开销,硬件方法也由于其高昂的造价难以实施。在当前的软件协议栈实现中,普遍采用了哈希表的方法以管理连接数。然而, TCB (transmit control block,传输控制模块)是一个280_1300bytes大小的每个连接的结构体,TCP/IP协议栈用其来存储TCP连接的状态并在每次包处理的关键路径中都会访问。TCB用于记录tcp协议运行过程中的变量。对于有多个连接的tcp,每个连接都有一个 tcb。tcb结构的定义包括这个连接使用的源端口、目的端口、目的ip、序号、应答序号、对方窗口大小、已方窗口大小、tcp状态、top输入/输出队列、应用层输出队列、tcp的重传有关变量。当网络中存在大量连接数时,存储TCB所需的空间开销将会变得十分巨大 (280M-1. 3G,若有1百万并发连接),导致其查找和管理的速度变得十分缓慢。从而会引入许多复杂问题并提出了新的挑战由于TCB是在关键路径中被访问,若TCB访问延迟过大会阻碍协议栈的处理速度,因此TCP/IP协议栈处理的速度在很大程度上取决于TCB访问的速度。而由于在一个IOGbps的网络中,一个64byte的包的处理时间应该被限制在67ns。 而一次访存的时间就在50ns左右,因此在10(ibpS高速网络环境中管理如此多的连接就变成了十分困难甚至不可能的事情。如果TCB按照哈希表的方式组织,那么在查找的遍历冲突链表过程中,在找到真正要找的TCB之前的每一步都会访问一个TCB,也即会造成一次访存。由于当连接数增多后,冲突的链也会相应变长,因此这也是TCP阶段开销变大的根本原因。为了能够在大规模并发连接下依然达到线速,优化TCB的组织方式以减少访存次数就显得十分重要。本发明因此而来。
发明内容
本发明目的在于提供一种高速网络环境中提高TCP并发连接速度的方法,解决了在高速网络环境中大量TCP连接的速度瓶颈问题。为了解决现有技术中的这些问题,本发明提供的技术方案是一种高速网络环境中提高TCP并发连接速度的方法,其特征在于所述方法包括以下步骤(1)在内存或高速缓存cache中构建查找表,所述查找表存储根据已有TCP连接的源IP地址、目的IP地址、源端口地址、目的端口地址计算得到的签名值,并实现TCB与查找表中的相应签名值形成关联;(2)当进行TCP连接的创建、删除时,先根据TCP连接的源IP地址、目的IP地址、 源端口地址、目的端口地址计算得到该TCP连接的签名值,通过该TCP连接的签名值在查找表中进行查找,根据查找结果进行TCP连接的创建、删除操作。优选的,所述方法步骤(1)中所述TCB通过系统预先分配能处理的最大TCB的数组;所述数组中TCB与查找表中的相应签名值形成关联。优选的,所述方法步骤(1)中查找表的数据结构为哈希表。优选的,所述方法步骤(1)中所述查找表空间大小确定,且内存或高速缓存cache 中还构建用于解决哈希项冲突的冲突链表。优选的,所述方法步骤O)中所述查找步骤包括Al)将需要查找的TCP连接的源IP地址、目的IP地址、源端口地址、目的端口地址计算得到该TCP连接签名值;A2)将该TCP连接签名值与查找表哈希项中的所有签名进行比较;当没有找到匹配的签名时,将该TCP连接签名值与冲突链表中哈希项中的所有签名进行比较;A3)当查找表或冲突链表中找到匹配的签名时,根据查找表或冲突链表得到其相应TCB的索引值或者地址,然后访问TCB比较源IP地址、目的IP地址、源端口地址、目的端口地址是否匹配,当完全匹配时,即可确认TCB已经查找到并返回相应指针;当查找表和冲突链表中没有找到匹配的签名或根据匹配的签名,源IP地址、目的IP地址、源端口地址、目的端口地址不能匹配时,结束查找,表明该TCP连接尚未建立。优选的,所述方法步骤( 中创建TCP连接的步骤包括按照权利要求5的方式在查找表和冲突链表中查找新TCP连接的TCB,当查找结果没有匹配时,在查找表中找到一个空闲的位置,将其相应的签名插入其中,并根据需要给其分配一个空闲的TCB。优选的,所述方法中当查找表已满时,通过系统分配内存填入签名,并连入冲突链表中。优选的,所述方法步骤( 中删除TCP连接的步骤包括按照权利要求5的方式在查找表和冲突链表中查找需要删除的TCP连接的TCB,如果查找的连接签名在查找表哈希项中,那么将相应的签名值置为0,以标注其为空闲时的后续新建连接使用;如果查找的连接签名在冲突链表中,那么将其相应节点在冲突链表中删除,并回收其TCB。优选的,所述方法中签名采用CRC32签名函数对TCP连接的源地址,目的地址,源端口,目的端口进行计算。本发明提供了一种高速网络环境中大量TCP连接的管理方法,采用了网络连接的摘要组成一个查找表,将查找结构与实际存储的TCB相分离,从而使的查找结构被压缩至很小以加速查找。在采用通用处理器进行实施时,可有效利用CPU的cache资源,从而加速查找。查找表中存储的是根据TCP连接的四元组(源IP地址,目的IP地址,源端口地址, 目的端口地址)所计算得到的签名值。预先分配所能处理的最大TCB的数组,将其与查找表中的相应签名值做关联。本发明优选采用了哈希的方法组织查找表。本发明尽可能避免存储指针以压缩查找表的大小,对于有可能的更多冲突,则可采用了额外的冲突表加以处理。本发明的目的是提供一种TCP连接的管理方法,其中针对高流量大量并发连接的情况作出优化,本发明采取以下技术方案为了使TCB的查找过程仅访问查找表中的数据而避免访存,将查找的TCP连接计算出签名并组织为一个摘要哈希表。在该摘要哈希表中, 存储的不是TCB本身,而是每个TCP连接的相应的签名。这样整个哈希表所占用的空间就会被压缩至很小,从而使得TCP连接的查找,新建,删除过程的开销被大大减小。同时本发明极大缓解了通常用哈希表组织数据而造成的查找开销的不可确定性,使得查找的时间方差大为缩短。本发明的主要目的在于加速TCP连接的查找速度,例如,若实施例在通用处理器上软件实现中,主要目的是有效的利用cache资源,尽量减少访存开销。由于TCP连接控制块为较大的数据块,大量TCP连接下,TCB的总大小已超过cache大小,访问其会致使访问内存,从而导致较大开销。通过将其签名组织为一个单独的查找表保存于内存中,可以使得查找过程避免不必要的访存,从而大大节省开销。为了将TCP连接进行签名算法而尽量减少伪阳性识别概率,本发明的另一个目的是提供了网络连接的有效签名算法,该算法采用了一种基于CRC算法的非对称签名方式, 产生出的签名可被用于唯一的标识一个网络连接而具有极低的伪阳性概率。对应于以上概述方法的系统和计算机程序也在这里被说明和要求保护。相对于现有技术中的方案,本发明的优点是本发明提供了一种高速网络环境中大量TCP连接的管理方法。通过计算TCP连接的签名并将其存储至一个查找表中,可以有效的分离TCP的查找结构与存储结构。同时,通过压缩查找结构,软硬件实现可以有效利用系统硬件所提供的缓存,加速TCP连接的查找。 同时,通过利用CRC计算,本发明设计了一种低冲突率的非对称的TCP连接签名算法,使得上述查找结构可以有效的实施。本发明提高了 TCP连接的查找、新建、删除速度,从而使得系统可以采用低成本硬件处理高速大流量网络。
下面结合附图及实施例对本发明作进一步描述图1是本发明实施例方法的数据结构示意图。图2是查找一个连接的具体实施流程图。
具体实施例方式以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。实施例
如图1所示,本发明包括将连接签名与真正要存储数据结构相分离从而加快查找速度的方法以及对于网络连接低伪阳性签名计算的方法。101是存储TCP签名的查找表,其组织方式类似于哈希表,但每个哈希桶(bucket)由一个定长的数组组成,其中每一项存储着TCP连接的签名值。为了允许可能的更多的连接存入此哈希项,每一个项后面对应着一个相应的冲突链表以容许更多的冲突。由于哈希表可以被设置为较大而尽量减小每个哈希项平均冲突个数,所以可以将冲突至链表的查找看作极少的情况。102是一个冲突链表,当哈希至一个 bucket中的数量超过其初始分配的个数时,其将被分配存储空间并存储在冲突链表中。103是TCB的集合,其可以为静态数组系统预先分配或后来动态分配,当TCP连接的签名匹配时如何查找相应的TCB可以由多种方法实现,一种是将TCB的地址同TCP相应签名一起存储于查找表之中,这样签名匹配后就可直接定位于相应的TCB。图1中实现了另一种节省存储的有效方法即将查找表的表项以及TCB数组的位置做一一映射,可以用哈希值加上表项所存储的位置计算出TCB在其数组中相应的位置从而进行访问,此种方法需采用静态TCB数组分配的方法。在真实实施过程中,对于每一个查找项的大小可以自由设置,对于冲突链表的位置也可以根据具体情况放在不同的位置,典型的实现方式如图1所示,冲突链表的头指针被单独分配为一个数组,与原有的哈希表项一一对应。而相应的冲突链表的头指针也可被存储在查找项中。算法执行描述,查找连接如图2所示,在查找一个连接相应TCB的时候,首先将该连接的四元祖通过哈希函数计算得到一个哈希值,然后由此哈希值访问摘要哈希表中相应的项。通过该连接的标识(四元组)再由签名函数计算出该连接的签名,并将其与该哈希项中的所有签名进行比较,如果没有找到匹配的签名,那么再去查找冲突链表。如果在查找过程中找到匹配的签名,则根据摘要哈希表的设计得到其相应TCB的索引值或者地址,在访问TCB比较真正的四元组真的匹配而不是伪阳性后,即可确认TCB已经查找到并返回相应指针。如果四元组不匹配即伪阳性时,则略过此项,继续向下查找。当整个哈希项以及冲突链表都搜索完而没有发现匹配时,即可确认该四元组所标识的连接没有被建立。添加新连接当一个新连接被建立时,首先去摘要哈希表中搜索其之前是否已经被建立,如果没有,则在摘要哈希表中找到一个空闲的位置,将其相应的签名插入其中,同时根据需要给其分配一个空闲的TCB。在此实施例中,哈希项中签名全0的位置被作为摘要哈希表中一个空闲的位置,标识其可以被用于存储新建连接的签名。为了保证算法正确性, 此实施例将设计签名函数使得产生的签名不为0。当冲突过多致使哈希项能存放的最大签名数已满时,该实施例就分配一块内存,在其中填入签名(或者再加上TCB的地址或索引), 连入冲突链表中。删除连接要删除一个已经建立的连接时,首先按照查找算法查找到相应的连接。 如果查找的连接签名在哈希项中,那么将相应的签名值值置为0,以标注其为空闲时的后续新建连接可以使用;如果查找的连接签名在冲突链中,那么将其相应节点在冲突链表中删除,并回收其TCB。签名算法的选择由于在查找表中所应存储为尽可能小的TCP连接的签名值, 96bits的TCP连接四元组(包括源IP地址,目的IP地址,源端口地址,目的端口地址)应被尽量压缩为较小的签名。由于产生冲突是压缩所必然导致的,因此不同的四元组有可能得到相同签名。为了应对这种问题以保证程序正确性,实施例在匹配签名后,会访问TCB以对比真实的四元组。然而由于每一次访问TCB都是一次访存,如果冲突概率过大,那么查找过程中的多次访存将使算法本身的优势消失。由于签名算法是保证低假阳性概率的关键,此实施例选择了 CRC32作为签名函数的基础算法对连接的四元组(源地址,目的地址,源端口,目的端口)进行计算,得到的 32bits的签名的同时可以保证极低的伪阳性概率。这样,百万个连接仅仅占用了 4MB空间, 从而可以被维持在cache中。同时,由于为了保TCP连接查找时的对称性以及算法正确性,签名算法和匹配算法需要经过恰当的设计,其算法实现的C语言描述如下所示
inline sig_type calc_signature(const uint32_t sip, const uint32_t dip, const uint16_t sport, const
uint16_tdport) {
int crcl = 0, crc2 = 0; crcl = _mm_crc32_u32(crc1, sip); crcl = _mm_crc32_u32(crc1, dip); crcl = _mm_crc32_u32(crc1, sport); crcl = _mm_crc32_u32(crc1, dport); crc2 = _mm_crc32_u32(crc2, dip); crc2 = _mm_crc32_u32(crc2, sip); crc2 = _mm_crc32_u32(crc2, dport); crc2 = _mm_crc32_u32(crc2, sport); res = (crcl & OxFFFFOOOO) | (crc2 16); if (res == 0) {
res = sip Λ dip Λ sportΛ dport; if (res == 0) res = OxFFFFFFFF;
}
return (sig_type)res;
}如上所示,当前包的四元组计算CRC32得到crcl,将同一个连接的反向的四元组同样计算CRC32得到crc2,由于crc32结果的前16位具有良好的哈希特性,取每个crc32 计算结果的前16位组成签名,以获取最佳的效果。为了保证程序正确性,当按此方法计算出来的签名为0时,实施例用四元组异或来得到签名值,如果依然为零,则采用一个特殊值 (如OxFFFFFFFF)作为签名,从而保证了每一个连接的签名不会为零。由于这种情况的可能性非常小,因此其多个连接的签名同为特殊值而导致的冲突概率也十分的小。由此,本来 96bits的TCP连接被压缩为32bits的签名。为了保证两个方向的连接查找对称性,其签名匹配过程的C语言描述如下
inline int signature_match(const sig一type sign, const elem一type *ptr) {
sig_type rev_sign;
if(sign == ptr->signature) return 1;
rev_sign = ((sign & 0xFFFF)<<16) | ((sign & 0xFFFF0000) 16); if(rev_sign == ptr->signature) return 1; return 0;
}CRC32的计算用软件实现本是一个十分耗时的过程,往往需要几百个CPU cycles。 之所以选择CRC32作为签名函数,除了其良好的随机性以外,还因为x86结构的通用处理器 Intel SSE4. 2提供了 CRC32的计算专用指令,使得其计算时间大为缩短,从而使其适宜在此作为签名函数。本发明可以在软件、固件、硬件或者其结合中实现。本发明可以包括在具有计算机可用介质的物品中。该介质在其中具有例如计算机可读程序代码装置或者逻辑(例如指令,代码,命令等)来提供和使用本发明的能力。该制造物品可作为计算机系统的一部分或者单独出售。所有上述变化被认为是要求保护的本发明的一部分。上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。
权利要求
1.一种高速网络环境中提高TCP并发连接速度的方法,其特征在于所述方法包括以下步骤(1)在内存或高速缓存cache中构建查找表,所述查找表存储根据已有TCP连接的源 IP地址、目的IP地址、源端口地址、目的端口地址计算得到的签名值,并实现TCB与查找表中的相应签名值形成关联;(2)当进行TCP连接的创建、删除时,先根据TCP连接的源IP地址、目的IP地址、源端口地址、目的端口地址计算得到该TCP连接的签名值,通过该TCP连接的签名值在查找表中进行查找,根据查找结果进行TCP连接的创建、删除操作。
2.根据权利要求1所述的方法,其特征在于所述方法步骤(1)中所述TCB通过系统预先分配能处理的最大TCB的数组;所述数组中TCB与查找表中的相应签名值形成关联。
3.根据权利要求2所述的方法,其特征在于所述方法步骤(1)中查找表的数据结构为哈希表。
4.根据权利要求3所述的方法,其特征在于所述方法步骤(1)中所述查找表空间大小确定,且内存或高速缓存cache中还构建用于解决哈希项冲突的冲突链表。
5.根据权利要求4所述的方法,其特征在于所述方法步骤(2)中所述查找步骤包括Al)将需要查找的TCP连接的源IP地址、目的IP地址、源端口地址、目的端口地址计算得到该TCP连接签名值;A2)将该TCP连接签名值与查找表哈希项中的所有签名进行比较;当没有找到匹配的签名时,将该TCP连接签名值与冲突链表中哈希项中的所有签名进行比较;A3)当查找表或冲突链表中找到匹配的签名时,根据查找表或冲突链表得到其相应 TCB的索引值或者地址,然后访问TCB比较源IP地址、目的IP地址、源端口地址、目的端口地址是否匹配,当完全匹配时,即可确认TCB已经查找到并返回相应指针;当查找表和冲突链表中没有找到匹配的签名或根据匹配的签名,源IP地址、目的IP地址、源端口地址、目的端口地址不能匹配时,结束查找,表明该TCP连接尚未建立。
6.根据权利要求5所述的方法,其特征在于所述方法步骤(2)中创建TCP连接的步骤包括按照权利要求5的方式在查找表和冲突链表中查找新TCP连接的TCB,当查找结果没有匹配时,在查找表中找到一个空闲的位置,将其相应的签名插入其中,并根据需要给其分配一个空闲的TCB。
7.根据权利要求6所述的方法,其特征在于所述方法中当查找表已满时,通过系统分配内存填入签名,并连入冲突链表中。
8.根据权利要求5所述的方法,其特征在于所述方法步骤(2)中删除TCP连接的步骤包括按照权利要求5的方式在查找表和冲突链表中查找需要删除的TCP连接的TCB,如果查找的连接签名在查找表哈希项中,那么将相应的签名值置为0,以标注其为空闲时的后续新建连接使用;如果查找的连接签名在冲突链表中,那么将其相应节点在冲突链表中删除, 并回收其TCB。
9.根据权利要求1所述的方法,其特征在于所述方法中签名采用CRC32签名函数对 TCP连接的源地址,目的地址,源端口,目的端口进行计算。
全文摘要
本发明公开了一种高速网络环境中提高TCP并发连接速度的方法,其特征在于所述方法包括以下步骤(1)在内存或高速缓存cache中构建查找表,所述查找表存储根据已有TCP连接的源IP地址、目的IP地址、源端口地址、目的端口地址计算得到的签名值,并实现TCB与查找表中的相应签名值形成关联;(2)当进行TCP连接的创建、删除时,先根据TCP连接的源IP地址、目的IP地址、源端口地址、目的端口地址计算得到该TCP连接的签名值,通过该TCP连接的签名值在查找表中进行查找,根据查找结果进行TCP连接的创建、删除操作。该方法提高了TCP连接的查找、新建、删除速度,从而使得系统可以采用低成本硬件处理高速大流量网络。
文档编号H04L29/06GK102420771SQ20111044730
公开日2012年4月18日 申请日期2011年12月28日 优先权日2011年12月28日
发明者华蓓, 张凯, 王俊昌 申请人:中国科学技术大学苏州研究院