一种tcp连接的time_wait状态下节省内存的方法

文档序号:7996263阅读:358来源:国知局
一种tcp连接的time_wait状态下节省内存的方法
【专利摘要】本发明公开了一种TCP连接的TIME_WAIT状态下节省内存的方法,它是在TCP连接进入TIME_WAIT状态时,采用Timewait控制模块取代TCP控制模块,其中所述的Timewait控制模块用于维护TCP连接。本发明在保持TIME_WAIT状态时连接的超时时间一致的前提下,能够降低系统内存损耗,缓解了在高并发连接下,由于TIME_WAIT状态的超时时间导致的服务器性能下降、网络阻塞等现象。
【专利说明】—种TCP连接的TIME_WAIT状态下节省内存的方法
【技术领域】
[0001] 本发明涉及网络传输领域,特别涉及一种TCP连接的TIME_WAIT(等待足够的时间以确保远程TCP接收到连接中断请求的确认)状态下节省内存的方法。
【背景技术】
[0002]网络协议层使用协议控制模块(PCB:protocol control block)存放各UDP (UserDatagram Protocol,用户数据包协议)和 TCP (Transmission Control Protocol 传输控制协议)插口所要求的多个信息片。互联网协议维护包括互联网协议控制模块(简称:inpcb)和TCP控制模块(简称:tcpcb)。由于UDP是无连接的,所以一个端结点需要的所有信息都可以在互联网协议控制模块中找到,不需要UDP控制模块。
[0003]互联网互联网协议控制模块含有所有UDP和TCP端结点共有的信息:外部和本地IP地址、外部和本地端号、IP首部原型、该端结点使用的IP选项以及一个指向该端结点目的地址选路表入口的指针。TCP控制模块包含了 TCP为各连接维护的所有结点信息:两个方向的序号、窗口大小、重传次数等等。
[0004]根据《TCP/IP详解》中的TCP的建立和终止中有关"TCP的终止〃的讲解,TCP的终止通过双方的四次握手实现。发起终止的一方执行主动关闭,响应的另一方执行被动关闭,TCP正常关闭连接的状态变化如附图1所示:①主动关闭方更改状态为FIN_WAIT_1,关闭应用程序进程,发出一个TCP的FIN包;②接收方收到FIN包,返回一个带确认序号的ACK,同时向自己对应的进程发送一个文件结束符E0F,同时更改状态为CL0SE_WAIT,主动关闭方接到ACK后状态更改为FIN_WAIT_2 接收方关闭应用程序进程,更改状态为LAST_ACK,并向对方发出一个TCP的FIN包;④发起方接到FIN后状态更改为HME_WAIT,并发出这个FIN的ACK确认。ACK发送成功后双方TCP状态变为CLOSED。
[0005]根据TCP协议,主动发起关闭的一方,会进入HME_WAIT状态。TCP实现必须可靠地终止连接的两个方向(全双工关闭),持续2MSL (Max Segment Lifetime最大分段生存时间)通常是被要求的,一般缺省时间为60-240秒,即TME_WAIT状态需维持2MSL。设置HME_WAIT状态主要有以下两个原因:①防止上一次连接中的数据包迷路后重新出现,会影响第二个拥有相同相关五元组的新连接(经过2MSL,上一次连接中所有的重复包都会消失),所以该连接的新的替身必须在前一个连接替身关闭2MSL之后才能再次发起;②可靠的关闭TCP连接,如图2所示,在主动关闭方发送的最后一个ACK,有可能丢失,那么另一端将超时并重传最后的FIN报文段,因此,在主动关闭的一端保留连接的状态信息,这样它才能在需要的时候重传最后的确认报文段;否则,它收到最后的FIN报文段后就无法重传最后一个ACK,而只能发出RST报文段,从而造成虚假的错误信息,所以主动关闭方要处于TIME_WAIT状态,而不能是CLOSED。
[0006]综上,TCP在关闭连接时,主动关闭的一方为应对网络丢包情况,保证对方连接能够完整关闭,需要保存一个HME_WAIT状态的连接,并且所述HME_WAIT状态应保持时间足够长,例如2MSL。但是,常规的设置方法容易产生几方面的问题,首先在高并发连接下,常导致服务器性能下降,甚至阻塞网络,严重影响服务;其次,在TCP连接比较多的时候,累积的HME_WAIT连接会占用大量系统内存,从而降低系统的处理能力;再次,虽然现有技术出现了对通用的TCP协议栈采用通过修改内核参数来减少TIME_WAIT超时时间,缓解了内存的损耗,但与此同时也降低了 HME_WAIT机制的安全性,系统只能在HME_WAIT连接较多时作为一个临时解决方案,不能作为一个性能可靠的持久解决方案。

【发明内容】

[0007]为克服已有技术中存在的问题,本发明的目的是提供一种TCP连接的HME_WAIT状态下节省内存的方法,该方法不减少TIME_WAIT状态下连接的超时时间,也能够降低系统内存损耗。
[0008]一种TCP连接的HME_WAIT状态下节省内存的方法,是在TCP连接进入HME_WAIT状态时,采用Timewait控制模块取代TCP控制模块,其中所述的Timewait控制模块用于维护TCP连接,它至少包括互联网协议控制模块数据、维护TCP状态数据、接收序列号数据和超时定时器数据。
[0009]进一步地,在所述的在TCP连接即将进入HME_WAIT状态时,主动关闭方收发数据包的步骤如下:
[0010]步骤1,主动关闭方在FIN_WAIT_2状态下收到FIN,创建Timewait控制模块,将其状态设为TIME_WAIT,更新recvnextseq,将TCP控制模块中t_inpcb指针更新到所述的Timewait控制模块中,删除TCP控制模块;然后,
[0011]步骤2,启动TME_WAIT定时器,设置系统必要的TME_WAIT状态时间段;然后,
[0012]步骤3,对上述FIN数据包回应ACK。
[0013]进一步地,是当TCP连接进入HME_WAIT状态后,如果tcpcb_>t_state为--ΜΕ_WAIT,则将TCP控制模块强制转化为Timewait控制模块。
[0014]更进一步地,当TCP连接进入TIME_WAIT状态后,所述的将TCP控制模块强制转化为Timewait控制模块的具体步骤包括:
[0015]主动关闭方收到FIN,则重置HME_WAIT定时器,并对该FIN段回应ACK。
[0016]更进一步地,当TCP连接进入TIME_WAIT状态后,所述的将TCP控制模块强制转化为Timewait控制模块的具体步骤还包括:
[0017]主动关闭方收到RST,则释放TCP连接资源,跳转到CLOSED状态,提前终止--ΜΕ_WAIT状态。
[0018]更进一步地,当TCP连接进入TIME_WAIT状态后,所述的将TCP控制模块强制转化为Timewait控制模块的具体步骤还包括:
[0019]主动关闭方收到SYN,当SYN报文段的新的起始序号大于连接上最后收到的序号,则调用TCP_CL0SE,释放处于TME_WAIT状态原有连接的PCB进程控制块和TCP控制模块,控制跳转到寻找监听服务器,为新的连接创建新的插口。 [0020]本发明在保持TME_WAIT状态时连接的超时时间一致的前提下,能够降低系统内存损耗,缓解了在高并发连接下,由于TIME_WAIT状态的超时时间导致的服务器性能下降、网络阻塞等现象;提高了在TCP连接较多、累积大量HME_WAIT时系统的处理能力;同时,维持TIME_WAIT的超时时间与通用TCP控制模块的超时时间一致,既缓解了内存的损耗,也 保证了 HME_WAIT机制的安全性。
【专利附图】

【附图说明】
[0021]图1是已有技术中TCP正常关闭连接的状态变化示意图;
[0022]图2是已有技术中最后一个报文段丢失时的TCP连接关闭示意图;
[0023]图3是本发明系统HME_WAIT状态下维护TCP连接控制模块前后比较示意图;
[0024]图4是本发明Timewait控制模块代替TCP控制块所占内存空间比较示意图;
[0025]图5是本发明在TCP连接即将进入HME_WAIT状态时主动关闭方接受和发送数据包步骤示意图。
[0026]图6是TIME_WAIT状态下2MSL超时时间段内可能收到被动关闭方发来的报文段传输不意图;
【具体实施方式】
[0027]在以下的叙述中,为了使读者更好地理解本申请而提出了许多技术细节。但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也是本申请各权利要求所要求保护的技术方案。
[0028]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的实施方式作进一步地详细描述。
[0029]FreeBSD (一种UNIX操作系统)定义了互联网协议控制模块和TCP控制模块。互联网协议控制模块与TCP控制模块彼此对应,都带有指向对方的指针,维护一个正常的TCP连接所需要的信息量比较大,TCP控制块中包含发送/接受序列号,发送/接受窗口,拥塞控制,重传机制参数维护,其它特殊功能参数及相关定时器。但是本发明注意到维护一个HME_WAIT状态连接的信息量则比较小,除了需要保留互联网协议控制模块外,只需维护TCP状态、接收序列号和一个超时定时器等,如图3所示,为TIME_WAIT状态下维护TCP连接控制模块前后比较,本发明Timewait控制模块定义为tcpcbJIMEWAIT,其中数据状态和指向互联网协议控制模块指针应和TCP控制模块中相应字段位置一一对应。
[0030]再如图3及图4所示,当TCP连接进入TIME_WAIT状态时,采用一个精简的数据结构Timewait控制模块取代TCP控制模块,这样我们既能在HME_WAIT状态下维持不变的时间段,例如2MSL时间段,使得系统正确处理在第一个ACK (最长生存时间为MSL)丢失的情况下,能够收到对端重传的FIN(最长生存时间为MSL),然后重传ACK,同时也降低了内存的使用。
[0031]本发明一种TCP连接的TME_WAIT状态下节省内存的方法,是在TCP连接进入TIME_WAIT状态时,采用Timewait控制模块取代通用TCP控制模块,其中Timewait控制模块用于维护TCP连接,它至少包括互联网协议控制模块数据、维护TCP状态数据、接收序列号数据和超时定时器数据等。
[0032]进一步地,如图5,所述的在TCP连接即将进入HME_WAIT状态时,主动关闭方接收和发送数据包的步骤如下:
[0033]步骤1,主动关闭方在FIN_WAIT_2状态下收到FIN,说明是正常收到对端过来的FIN数据包,这时创建Timewait控制模块,将其状态设为HME_WAIT,更新recvnextseq,将TCP控制模块中t_inpcb指针更新到所述的Timewait控制模块中,删除TCP控制模块;然后,
[0034]步骤2,启动HME_WAIT定时器,设置系统必要的HME_WAIT状态时间段,例如设置时间为2MSL ;然后,
[0035]步骤3,对上述FIN数据包回应ACK。
[0036]图6显示了 TME_WAIT状态下2MSL时间段中可能收到被动关闭方发来的报文段。当超过2MSL时间段后,主动关闭方可以发起该连接的新的替身。
[0037]TIME_WAIT状态下收到FIN、ACK、RST、SYN的数据处理与通常协议栈数据处理有所不同,当TCP连接的状态为HME_WAIT状态时,如果tcpcb->t_state为HME_WAIT,需要将TCP控制模块结构强制转化为Timewait控制模块结构。详细处理可参考RFC793和RFC1337使用说明。上述描述了即将进入HME_WAIT状态(即当前状态为FIN_WAIT_2)时主动关闭方接收和发送数据包的步骤,紧接着在HME_WAIT状态下主动关闭方接收数据包的处理还包括:
[0038]进一步地,是当TCP连接进入HME_WAIT状态后,如果tcpcb_>t_state为--ΜΕ_WAIT,则将TCP控制模块强制转化为Timewait控制模块。
[0039]更进一步地,当TCP连接进入TME_WAIT状态后,所述的将TCP控制模块强制转化为Timewait控制模块的具体步骤包括:
[0040]主动关闭方收到FIN,则重置HME_WAIT定时器,并对该FIN段回应ACK。
[0041]更进一步地,当TCP连接进入TIME_WAIT状态后,所述的将TCP控制模块强制转化为Timewait控制模块的具体步骤还包括:
[0042]主动关闭方收到RST,则释放TCP连接资源,跳转到CLOSED状态,提前终止--ΜΕ_WAIT状态。
[0043]更进一步地,当TCP连接进入TIME_WAIT状态后,所述的将TCP控制模块强制转化为Timewait控制模块的具体步骤还包括:
[0044]主动关闭方收到SYN,当SYN报文段的新的起始序号大于连接上最后收到的序号,则调用TCP_CL0SE,释放处于TME_WAIT状态原有连接的PCB进程控制块和TCP控制模块,控制跳转到寻找监听服务器,为新的连接创建新的插口。
[0045]需要说明的是,本发明各设备实施方式中提到的各单元都是逻辑单元,在物理上,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现,这些逻辑单元本身的物理实现方式并不是最重要的,这些逻辑单元所实现的功能的组合才是解决本发明所提出的技术问题的关键。此外,为了突出本发明的创新部分,本发明没有引入上述各设备实施方式以及与解决本发明所提出的技术问题关系不太密切的单元,但这并不表明不存在上述设备实施方式以及其它有关实施单元。
[0046] 虽然通过参照本发明的某些优选实施方式,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
【权利要求】
1.一种TCP连接的TIME_WAIT状态下节省内存的方法,其特征是在TCP连接进入TIME_WAIT状态时,采用Timewait控制模块取代TCP控制模块,其中所述的Timewait控制模块用于维护TCP连接,它至少包括互联网协议控制模块数据、维护TCP状态数据、接收序列号数据和超时定时器数据。
2.根据权利要求1所述的一种TCP连接的TIME_WAIT状态下节省内存的方法,其特征是在所述的在TCP连接即将进入TIME_WAIT状态时,主动关闭方收发数据包的步骤如下: 步骤1,主动关闭方在FIN_WAIT_2状态下收到FIN,创建Timewait控制模块,将其状态设为TIME_WAIT,更新recvnextseq,将TCP控制模块中t_inpcb指针更新到所述的Timewait控制模块中,删除TCP控制模块;然后, 步骤2,启动TME_WAIT定时器,设置系统必要的TME_WAn状态时间段;然后, 步骤3,对上述FIN数据包回应ACK。
3.根据权利要求1所述的一种TCP连接的TIME_WAIT状态下节省内存的方法,其特征是当TCP连接进入HME_WAIT状态后,如果tcpcb->t_state为HME_WAIT,则将TCP控制模块强制转化为Timewait控制模块。
4.根据权利要求3所述的一种TCP连接的TIME_WAIT状态下节省内存的方法,其特征是当TCP连接进入HME_WAIT状态后,所述的将TCP控制模块强制转化为Timewait控制模块的处理步骤包括: 主动关闭方收到FIN,则重置HME_WAIT定时器,并对该FIN段回应ACK。
5.根据权利要求3或4所述的一种TCP连接的TIME_WAIT状态下节省内存的方法,其特征是当TCP连接进入HME_WAIT状态后,所述的将TCP控制模块强制转化为Timewait控制模块的处理步骤还包括: 主动关闭方收到RST,则释放TCP连接资源,跳转到CLOSED状态,提前终止TME_WAIT状态。
6.根据权利要求3至5之一所述的一种TCP连接的HME_WAIT状态下节省内存的方法,其特征是当TCP连接进入TME_WAIT状态后,所述的将TCP控制模块强制转化为Timewait控制模块的处理步骤还包括: 主动关闭方收到SYN,当SYN报文段的新的起始序号大于连接上最后收到的序号,则调用TCP_CL0SE,释放处于TME_WAIT状态原有连接的PCB进程控制块和TCP控制模块,控制跳转到寻找监听服务器,为新的连接创建新的插口。
【文档编号】H04L29/06GK103973657SQ201310043485
【公开日】2014年8月6日 申请日期:2013年2月4日 优先权日:2013年2月4日
【发明者】穆秀玫, 付正立, 郑智仁, 李树峰, 贝少峰 申请人:华耀(中国)科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1