TCP连接的管理方法和装置与流程

文档序号:12132357阅读:154来源:国知局
TCP连接的管理方法和装置与流程

本申请涉及通信技术领域,尤其涉及一种TCP连接的管理方法和装置。



背景技术:

NAT(Network Address Translation,网络地址转换)设备可以对来自终端设备的访问请求进行地址转换,将其源地址由私网地址转换为公网地址,以访问公网中的服务器。由于私网中的终端设备数量通常远大于NAT设备中公网地址的数量,在NAT设备进行地址转换的过程中,可能会出现来自不同的终端设备的访问请求经过地址转换后,具有相同的会话特征的情况,比如:在某时刻,NAT设备将来自终端设备1的访问请求的五元组转换为五元组1。在终端设备1结束访问后,NAT设备可以释放相关的公网地址以及端口号,后续可能将来自终端设备2的访问请求的五元组也转换为五元组1。在这种情况下,如果服务器可以将与终端设备1之间建立的TCP连接复用至终端设备2,则可以加快服务器的响应速度,快速实现用户业务。然而,服务器复用TCP连接的概率通常很低,服务器的响应速度也因此受到影响。



技术实现要素:

有鉴于此,本申请提供一种TCP连接的管理方法和装置,以解决相关技术中服务器复用TCP连接的概率低的问题。

具体地,本申请是通过如下技术方案实现的:

第一方面,本申请提供一种TCP连接的管理方法,所述方法应用于网络地址转换NAT设备,包括:

在接收到终端设备发送的TCP协议报文后,判断所述TCP协议报文是否为TCP SYN报文;

当所述TCP协议报文为TCP SYN报文时,基于系统内核时钟的计数值和预设的比率对所述TCP SYN报文的序列号进行修改,将修改后的TCP SYN报文转发给服务器,并将修改前后的序列号之间的差值与所述TCP SYN报文的会话特征对应保存;

当所述TCP协议报文不是TCP SYN报文时,根据所述TCP协议报文的会话特征查找对应的差值,基于所述差值对所述TCP协议报文的序列号进行修改,并将修改后的TCP协议报文转发给服务器;

在接收到服务器发送的TCP协议报文时,根据所述TCP协议报文的会话特征查找对应的差值,基于所述差值对所述TCP协议报文的确认号进行逆修改,并将逆修改后的TCP协议报文转发给终端设备。

第二方面,本申请提供一种TCP连接的管理装置,所述装置应用于NAT设备,包括:

报文判断单元,用于在接收到终端设备发送的TCP协议报文后,判断所述TCP协议报文是否为TCP SYN报文;

第一修改单元,用于当所述TCP协议报文为TCP SYN报文时,基于系统内核时钟的计数值和预设的比率对所述TCP SYN报文的序列号进行修改,将修改后的TCP SYN报文转发给服务器,并将修改前后的序列号之间的差值与所述TCP SYN报文的会话特征对应保存;

第二修改单元,用于当所述TCP协议报文不是TCP SYN报文时,根据所述TCP协议报文的会话特征查找对应的差值,基于所述差值对所述TCP协议报文的序列号进行修改,并将修改后的TCP协议报文转发给服务器;

逆修改单元,用于在接收到服务器发送的TCP协议报文时,根据所述TCP协议报文的会话特征查找对应的差值,基于所述差值对所述TCP协议报文的确认号进行逆修改,并将逆修改后的TCP协议报文转发给终端设备。

分析上述技术方案可知,本申请NAT设备在接收到来自终端设备的TCP SYN报文时,可以根据系统内核时钟的计数值和预设的比率对该TCP SYN报文的序列号进行修改,从而提高服务器复用TIME_WAIT状态TCP连接的概率,加快服务器的响应速度。

附图说明

图1是一种TCP连接过程的示意图;

图2是TCP协议报文的报文格式图;

图3是本申请一示例性实施例示出的一种TCP连接的管理方法的流程图;

图4是本申请一示例性实施例示出的一种TCP连接的管理装置所在设备的硬件结构图;

图5是本申请一示例性实施例示出的一种TCP连接的管理装置的框图。

具体实施方式

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

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

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

图1是一种TCP连接过程的示意图。请参考图1,终端设备1与服务器之间可以通过TCP协议中的三次握手建立TCP连接。在一个例子中,终端设备1可以主动向服务器发送TCP SYN报文,比如:TCP SYN 1,以请求建立TCP连接。服务器在接收到TCP SYN 1后,可以向终端设备1回复TCP SYN+ACK报文,比如TCP SYN+ACK 1。终端设备1在接收到TCP SYN+ACK 1后,可以向服务器回复TCP ACK报文,比如:TCP ACK 1,以完成TCP连接的建立,在建立TCP连接后,终端设备1与服务器之间可以基于该TCP连接进行数据交互。

通常,终端设备在确定完成数据发送后可以主动向服务器发送TCP FIN报文,以请求关闭与服务器之间建立的TCP建立。但在实际应用中,服务器在确定完成数据发送后也可以主动向终端设备发送TCP FIN报文,以请求关闭与终端设备之间建立的TCP连接。如图1所示,假设服务器主动向终端设备1发送TCP FIN报文,比如:TCP FIN 1,则终端设备1在接收到TCP FIN 1后,可以先向服务器回复TCP ACK报文,比如:TCP ACK 2。后续,终端设备1在确定完成数据发送后,也可以向服务器发送TCP FIN报文,比如:TCP FIN 2。服务器在接收到TCP FIN 2后,也可以向终端设备1回复TCP ACK报文,比如:TCP ACK 3。

终端设备1在接收到服务器回复的TCP ACK 3后,可以将该TCP连接的状态变更为CLOSED状态,以关闭该TCP连接。而服务器在向终端设备1回复TCP ACK 3后,则可以将该TCP连接的状态变更为TIME_WAIT状态,TIME_WAIT状态的时长通常为2个MSL(Maximum Segment Lifetime,最大分节生命期),其中MSL时间是报文在网络中存在的最长时间。在达到TIME_WAIT状态的时长后,服务器可以将该TCP连接的状态变更为CLOSED状态。如果终端设备1在等待一定时间后仍未接收到TCP ACK 3,则可以再次向服务器发送TCP FIN报文,以告知服务器其未能正常关闭该TCP连接。服务器在接收到该TCP FIN报文后,可以再次向终端设备1发送TCP ACK报文,以确保该TCP连接的正常关闭。

图2是TCP协议报文的报文格式图,TCP协议报文中通常都会携带序列号和确认号。其中,TCP协议报文的序列号可以表示本端发送的数据的字节数,确认号则可以表示本端接收的数据的字节数。一般而言,终端设备向服务器发送的首个TCP协议报文的序列号与其系统时钟有关,服务器在接收到该首个TCP协议报文后,回复的报文中的确认号是该首个TCP协议报文携带的数据量(单位是字节)与该首个TCP协议报文的序列号之和。换言之,服务器发送给终端设备的TCP协议报文的确认号,等于终端设备发送给服务器的前一TCP协议报文的序列号,加上该TCP协议报文携带的数据字节数。

需要说明的是,TCP SYN报文和TCP FIN报文中均未携带任何业务数据,SYN标志或FIN标志占一个标志位,依据TCP协议的规定,服务器在接收到终端设备发送的TCP SYN报文或TCP FIN报文后,回复的报文中的确认号为所述TCP SYN报文或TCP FIN报文的序列号加1。

请继续参考图1,假设终端设备1向服务器发送的TCP SYN 1的序列号为1000,则服务器向终端设备1回复的TCP SYN+ACK 1的确认号=1000+1=1001,后续终端设备1向服务器回复的TCP ACK 1的序列号为1001。假设终端设备1接下来发送的TCP业务报文中携带100字节的业务数据,则终端设备1向服务器发送的TCP业务报文1的序列号仍为1001,服务器向终端设备1发送的TCP业务报文2的确认号=1001+100=1101。

需要说明的是,终端设备与服务器之间的通信通常由NAT设备在进行地址转换后实现,换言之,本申请中终端设备与服务器之间的TCP连接,在实际实现中,通常指的是NAT设备与服务器之间的TCP连接。在实际应用中,私网中的终端设备数量通常远大于NAT设备中公网地址的数量,例如:当私网中的终端设备数量达到NAT设备中公网地址的数量的100倍时,在TIME_WAIT状态的时长内,NAT设备有极大概率会将来自不同终端设备的TCP协议报文转换为相同的五元组。假设,NAT设备将来自终端设备1的TCP协议报文的五元组转换为五元组1。由于NAT设备中NAT表项的老化时长通常小于所述TIME_WAIT状态的时长,因此当NAT设备关闭该TCP连接(可看作终端设备1与服务器之间的TCP连接)时,服务器中该TCP连接的状态可能仍为TIME_WAIT状态。NAT设备在接收到终端设备2的TCP SYN报文,比如:TCP SYN 2,可能将该TCP SYN 2的五元组也转换为五元组1,并转发给服务器。

假设,服务器在接收到TCP SYN 2时,上述TCP连接的状态仍为TIME_WAIT状态,服务器会对该TCP SYN 2的序列号进行检验。具体地,服务器可以检验该TCP SYN 2的序列号减去服务器向终端设备1回复的最后一个TCP ACK报文(TCP ACK 3)的确认号得到的差值是否在0到231之间。

当TCP SYN 2的序列号减去TCP ACK 3的确认号得到的差值小于0或大于231时,服务器会认为TCP SYN 2是异常的TCP协议报文,并将TCP SYN 2丢弃,从而导致终端设备2与服务器之间无法进行数据交互。而当TCP SYN 2的序列号减去TCP ACK 3的确认号得到的差值在0到231之间时,服务器可以基于处于TIME_WAIT状态的该TCP连接对TCP SYN报文2进行响应,即终端设备2与服务器之间可以进行三次握手,后续服务器可以将该TCP连接的状态变更为ESTABLISHED状态,终端设备2与服务器之间可以正常进行数据交互。

一般而言,终端设备发送的TCP SYN报文的序列号与该终端设备的系统内核时钟的计数值相关,来自不同终端设备的TCP SYN报文的序列号具有很强的随机性,并不能保证TCP SYN 2的序列号减去TCP ACK 3的确认号得到的差值满足服务器复用TIME_WAIT状态的TCP连接的要求,即无法确保TCP SYN 2的序列号减去TCP ACK 3的确认号得到的差值在0到231之间。

针对上述问题,为了提高服务器复用TIME_WAIT状态TCP连接的概率,NAT设备可以对来自终端设备的TCP SYN报文的序列号进行修改,再将修改后的TCP SYN报文转发给服务器,从而大幅提高所述差值在0到231之间的概率。在实际应用中,NAT设备可以基于其系统内核时钟的计数值和预设的比率对来自终端设备的TCP SYN报文的序列号进行修改,具体地,NAT设备可以将所述TCP SYN报文的序列号替换为接收到该TCP SYN报文时系统内核时钟的计数值对应的时长,乘以所述预设的比率得到的数值。其中,所述系统内核时钟的计数值通常与实际时间相关,具体地,在检测到一个系统时钟脉冲时系统内核时钟的计数值加1,假设系统内核时钟脉冲的步进值为1纳秒,则当所述系统内核时钟的计数值加1时,对应的设备时间增加1纳秒。反之,设备实际增加1秒,所述系统内核时钟的计数值加109;所述预设的比率通常由管理员自行设置。

下面介绍所述预设比率的一种选取规则。

由于TCP ACK 3的确认号等于TCP SYN 1的序列号与终端设备1在本次交互中向服务器发送的数据字节数之和,因此如果TCP SYN 2的序列号减去TCP SYN 1的序列号得到的差值不大于231,则TCP SYN 2的序列号减去TCP ACK 3的确认号得到的差值肯定也不会大于231

在本例中,由于业务类型相同,终端设备与服务器之间建立的TCP连接的时长较为稳定,可以视为固定值,因此终端设备1在本次交互中向服务器发送的数据字节数,与终端设备1与服务器之间建立的TCP连接的时长,以及该TCP连接的上行速率相关。假设该TCP连接的时长为10秒,该TCP连接的上行最大速率为1Mb/秒,则终端设备1在本次交互中最多可向服务器发送的数据字节数=10秒×1Mb/秒÷8位/字节=1250000字节,即终端设备1在该TCP连接的持续时间之内最多可向服务器发送1250000字节的数据。

综合来看,管理员在设置所述比率时,需要考虑该TCP连接的时长、该TCP连接的上行速率,以及所述TIME_WAIT状态的时长三方面的因素。假设该TCP连接的时长为T1(单位:秒),该TCP连接的上行最大速率为S1(单位:Mb/秒),所述TIME_WAIT状态的时长为T2(单位:秒),所述比率为X。在实际应用中,通常将上述两个时长换算为纳秒,将所述上行速率换算为b/秒,则有如下不等式:

(T1+T2)×109×X≤231,该不等式可满足TCP SYN 2的序列号减去TCP SYN 1的序列号得到的差值不大于231

(T1+T2)×109×X≥T1×S1×106÷8,该不等式可满足TCP SYN 2的序列号不小于TCP ACK 3的确认号。

在本例中,以Linux系统为例,TIME_WAIT状态的时长通常为120秒。基于上述两个不等式,可以确定X的取值范围,管理员可以根据该取值范围设置合适的比率。

基于上述说明,请参考图3,为本申请一示例性实施例示出的一种TCP连接的管理方法的流程图,该方法可以应用于NAT设备,包括以下步骤:

步骤301:在接收到终端设备发送的TCP协议报文后,判断所述TCP协议报文是否为TCP SYN报文。

在本实施例中,NAT设备在接收到终端设备发送的TCP协议报文后,可以基于该TCP协议报文中的SYN标志位,判断该TCP协议报文是否为TCP SYN报文。一般而言,当所述SYN标志位为1时,可以确定该TCP协议报文为TCP SYN报文;当所述SYN标志位为0时,则该TCP协议报文不为TCP SYN报文。

步骤302:当所述TCP协议报文为TCP SYN报文时,基于系统内核时钟的计数值和预设的比率对所述TCP SYN报文的序列号进行修改,将修改后的TCP SYN报文转发给服务器,并将修改前后的序列号之间的差值与所述TCP SYN报文的会话特征对应保存。

在本实施例中,基于前述步骤301的判断结果,当所述TCP协议报文为TCP SYN报文时,NAT设备可以基于系统内核时钟的计数值和预设的比率对该TCP SYN报文的序列号进行修改。

在一个可选的实施例中,NAT设备可以用此时系统内核时钟的计数值对应的时长乘以所述预设的比率,得到目标序列号,再将TCP SYN报文的序列号替换为所述目标序列号。例如:假设NAT设备在接收到某TCP协议报文时,所述系统内核时钟的计数值对应的时长为10秒,即1010纳秒,管理员设置的比率为1/64,则所述目标序列号=1010÷64=156250000,NAT设备可以将该TCP协议报文的序列号替换为156250000。

在本步骤中,NAT设备在对该TCP SYN报文的序列号进行修改后,可以将修改后的TCP SYN报文转发给服务器。此外,NAT设备还可以将修改前后的序列号之间的差值与所述TCP SYN报文的会话特征对应保存。

步骤303:当所述TCP协议报文不是TCP SYN报文时,根据所述TCP协议报文的会话特征查找对应的差值,基于所述差值对所述TCP协议报文的序列号进行修改,并将修改后的TCP协议报文转发给服务器。

在本实施例中,基于前述步骤301的判断结果,当所述TCP协议报文不是TCP SYN报文时,NAT设备可以根据该TCP协议报文的会话特征查找到其对应的差值,并基于该差值对该TCP协议报文的序列号进行修改。

需要说明的是,当所述差值由修改后的TCP SYN报文的序列号减去修改前的TCP SYN报文的序列号得到时,NAT设备可以将所述TCP协议报文的序列号加上所述差值,以对所述TCP协议报文的序列号进行修改。而当所述差值由修改前的TCP SYN报文的序列号减去修改后的TCP SYN报文的序列号得到时,NAT设备可以将所述TCP协议报文的序列号减去所述差值,以对所述TCP协议报文的序列号进行修改。

在本步骤中,NAT设备在对所述TCP协议报文的序列号进行修改后,可以将修改后的TCP协议报文转发给服务器。

在一个可选的实施例中,当NAT设备查找到所述TCP协议报文对应的差值不为0时,可以基于所述差值对所述TCP协议报文的序列号进行修改,并将修改后的TCP协议报文转发给服务器。而当NAT设备查找到所述TCP协议报文对应的差值为0时,则可以不对所述TCP协议报文的序列号进行修改,直接将其转发给服务器。

步骤304:在接收到服务器发送的TCP协议报文时,根据所述TCP协议报文的会话特征查找对应的差值,基于所述差值对所述TCP协议报文的确认号进行逆修改,并将逆修改后的TCP协议报文转发给终端设备。

在本实施例中,由于终端设备发送给服务器的TCP协议报文的序列号,与服务器发送给终端设备的TCP协议报文的确认号之间存在对应关系,因此NAT设备在接收到服务器发送的TCP协议报文时,需要对所述TCP协议报文的确认号进行逆修改。具体地,NAT设备可以先根据所述TCP协议报文的会话特征查找到其对应的差值。当所述差值由修改后的TCP SYN报文的序列号减去修改前的TCP SYN报文的序列号得到时,NAT设备可以将所述TCP协议报文的确认号减去所述差值,以对所述TCP协议报文的确认号进行逆修改。而当所述差值由修改前的TCP SYN报文的序列号减去修改后的TCP SYN报文的序列号得到时,NAT设备可以将所述TCP协议报文的确认号加上所述差值,以对所述TCP协议报文的确认号进行逆修改。

由上述实施例可见,本申请NAT设备在接收到来自终端设备的TCP SYN报文时,可以根据系统内核时钟的计数值和预设的比率对该TCP SYN报文的序列号进行修改,从而提高服务器复用TIME_WAIT状态TCP连接的概率,加快服务器的响应速度。

与前述TCP连接的管理方法的实施例相对应,本申请还提供了TCP连接的管理装置的实施例。

本申请TCP连接的管理装置的实施例可以应用在NAT设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在NAT设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本申请TCP连接的管理装置所在NAT设备的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的NAT设备通常根据该TCP连接的管理的实际功能,还可以包括其他硬件,对此不再赘述。

请参考图5,为本申请一示例性实施例示出的一种TCP连接的管理装置的框图,该TCP连接的管理装置可以应用于图4所示的NAT设备中,包括:

报文判断单元501,用于在接收到终端设备发送的TCP协议报文后,判断所述TCP协议报文是否为TCP SYN报文;

第一修改单元502,用于当所述TCP协议报文为TCP SYN报文时,基于系统内核时钟的计数值和预设的比率对所述TCP SYN报文的序列号进行修改,将修改后的TCP SYN报文转发给服务器,并将修改前后的序列号之间的差值与所述TCP SYN报文的会话特征对应保存;

第二修改单元503,用于当所述TCP协议报文不是TCP SYN报文时,根据所述TCP协议报文的会话特征查找对应的差值,基于所述差值对所述TCP协议报文的序列号进行修改,并将修改后的TCP协议报文转发给服务器;

逆修改单元504,用于在接收到服务器发送的TCP协议报文时,根据所述TCP协议报文的会话特征查找对应的差值,基于所述差值对所述TCP协议报文的确认号进行逆修改,并将逆修改后的TCP协议报文转发给终端设备。

在一个可选的实施例中,所述第一修改单元502可以包括:

计算子单元5021,用于用所述系统内核时钟的计数值对应的时长乘以所述预设的比率,得到目标序列号;

替换子单元5022,用于将所述TCP SYN报文的序列号替换为所述目标序列号。

在另一个可选的实施例中,所述预设的比率与TCP连接的时长、TCP连接的上行速率、TCP连接TIME_WAIT状态的时长相关。

在另一个可选的实施例中,所述第二修改单元503可以包括:

修改子单元5031,用于当所述差值不为0时,基于所述差值对所述TCP协议报文的序列号进行修改。

在另一个可选的实施例中,所述逆修改单元504可以包括:

逆修改子单元5041,用于当所述差值不为0时,基于所述差值对所述TCP协议报文的确认号进行逆修改。

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

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

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

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1