一种传输控制协议TCP连接的关闭方法及装置与流程

文档序号:11524236阅读:186来源:国知局
一种传输控制协议TCP连接的关闭方法及装置与流程

本发明涉及互联网技术领域,特别是涉及一种传输控制协议tcp连接的关闭方法及装置。



背景技术:

当今网络上的下载服务,从传输层而言使用的几乎都是tcp(transmissioncontrolprotocol,传输控制协议)协议。对tcp协议而言,当一个tcp连接关闭时,一个正常的、完整的tcp连接的关闭过程为:服务器端发送一个包含所有数据已全部发送完成信息的fin/ack(finish/acknowledgement,完成/确认字符)包;客户端接收到这个包,将立即回复一个ack包,表明收到了服务器端发送的信息;当客户端处理完接收到的数据以及确认自身没有数据可以发送给服务器端之后,将向服务器端发送一个fin/ack包;服务器端收到客户端发送的fin/ack包以后,回复一个ack包,同时在等待两倍的msl(maximumsegmentlifetime,tcp包在网络上的最大生存时间)时间之后,完全关闭tcp连接;而客户端收到服务器端最后的ack之后,就立刻tcp关闭连接。

但是在实际应用中,对于服务器端主动关闭连接的绝大多数情况,存在以下问题:即使是正常的连接关闭,服务器端在发送完所有的关闭连接的包之后,进入time-wait(时间-等待)状态时,依然会占用资源,等待一段时间(2msl)之后,才释放这些资源;在大多数情况下,当服务器端收到客户端发送的ack包,进入fin-wait-2(结束-等待-2)状态后,经历了很久也没有收到客户端发来的fin/ack包,导致服务器端的等待时间会更长,从而占用了资源。可见,以上两种情况,现有的tcp连接的关闭方式,会导致服务器等待的时间较长,进而加大了对服务器维护tcp连接的状态所需的网络资源的占用。



技术实现要素:

本发明实施例的目的在于提供一种传输控制协议tcp连接的关闭方法及装置,以实现减少网络资源的占用。具体技术方案如下:

为达到上述目的,本发明实施例提供了一种传输控制协议tcp连接的关闭方法,应用于服务器,方法包括:

根据客户端发送的目标数据请求包,向所述客户端发送所述目标数据请求包对应的目标数据包,其中,所述目标数据包为包含psh标志的数据包;

接收所述客户端在接收到最后一个目标数据包之后所发送的ack包;

根据接收到的所述ack包,向客户端发送至少一个rst包;

关闭当前与所述客户端相连的服务器端tcp连接。

较佳的,所述服务器为:

提供下载服务的服务器。

为达到上述目的,本发明实施例提供了一种传输控制协议tcp连接的关闭方法,应用于客户端,方法包括:

根据向服务器发送的目标数据请求包,接收所述服务器发送的目标数据包,其中,所述目标数据包为包含psh标志的数据包;

在接收到最后一个目标数据包之后,向所述服务器发送ack包;

接收所述服务器根据所述ack包发送的至少一个rst包;

根据所述至少一个rst包,关闭当前与所述服务器相连的客户端tcp连接。

较佳的,所述根据所述至少一个rst包,关闭当前与所述服务器相连的客户端tcp连接,包括:

针对所述至少一个rst包中的每一个rst包,分别判断所述rst包的前一个数据包是否包含所述psh标志;

如果包含,将tcp接收缓冲区的所有数据发送给应用层,关闭当前与所述服务器相连的客户端tcp连接;

如果不包含,关闭当前与所述服务器相连的客户端tcp连接。

较佳的,所述方法还包括:

在向所述服务器发送ack包后,预设时长内未接收到所述服务器发送的所述至少一个rst包中的任一个rst包的情况下,关闭当前与所述服务器相连的客户端tcp连接。

为达到上述目的,本发明实施例提供了一种传输控制协议tcp连接的关闭装置,应用于服务器,装置包括:

第一发送模块,用于根据客户端发送的目标数据请求包,向所述客户端发送所述目标数据请求包对应的目标数据包,其中,所述目标数据包为包含psh标志的数据包;

第一接收模块,用于接收所述客户端在接收到最后一个目标数据包之后所发送的ack包;

第二发送模块,用于根据接收到的所述ack包,向客户端发送至少一个rst包;

第一关闭模块,用于关闭当前与所述客户端相连的服务器端tcp连接。

较佳的,所述服务器为:

提供下载服务的服务器。

为达到上述目的,本发明实施例提供了一种传输控制协议tcp连接的关闭装置,应用于客户端,装置包括:

第二接收模块,用于根据向服务器发送的目标数据请求包,接收所述服务器发送的目标数据包,其中,所述目标数据包为包含psh标志的数据包;

第三发送模块,用于在接收到最后一个目标数据包之后,向所述服务器发送ack包;

第三接收模块,用于接收所述服务器根据所述ack包发送的至少一个rst包;

第二关闭模块,用于根据所述至少一个rst包,关闭当前与所述服务器相连的客户端tcp连接。

较佳的,所述第二关闭模块,具体用于:

针对所述至少一个rst包中的每一个rst包,分别判断所述rst包的前一个数据包是否包含所述psh标志;

如果包含,将tcp接收缓冲区的所有数据发送给应用层,关闭当前与所述服务器相连的客户端tcp连接;

如果不包含,关闭当前与所述服务器相连的客户端tcp连接。

较佳的,所述装置还包括:

第三关闭模块,用于在向所述服务器发送ack包后,预设时长内未接收到所述服务器发送的所述至少一个rst包中的任一个rst包的情况下,关闭当前与所述服务器相连的客户端tcp连接。

本发明实施例提供的一种传输控制协议tcp连接的关闭方法及装置,服务器可以在向客户端发送至少一个rst包后,直接关闭自身与客户端相连的服务器端tcp连接,并且客户端可以根据至少一个rst包,关闭自身与服务器相连的客户端tcp连接,而不需要进行任何的等待,使得tcp连接可以及时关闭,释放维护tcp连接所需的网络资源,从而减少了网络资源的占用。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的传输控制协议tcp连接的关闭方法的一种流程示意图;

图2为本发明实施例提供的传输控制协议tcp连接的关闭方法的另一种流程示意图;

图3为本发明实施例提供的一种tcp连接的关闭示意图;

图4为本发明实施例提供的传输控制协议tcp连接的关闭方法的再一种流程示意图;

图5为本发明实施例提供的传输控制协议tcp连接的关闭装置的一种结构示意图;

图6为本发明实施例提供的传输控制协议tcp连接的关闭装置的另一种结构示意图;

图7为本发明实施例提供的传输控制协议tcp连接的关闭装置的再一种结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面首先对本发明实施例提供的一种传输控制协议tcp连接的关闭方法进行详细说明。

参见图1,图1为本发明实施例提供的传输控制协议tcp连接的关闭方法的一种流程示意图,应用于服务器,可以包括如下步骤:

s101,根据客户端发送的目标数据请求包,向所述客户端发送所述目标数据请求包对应的目标数据包,其中,所述目标数据包为包含psh标志的数据包;

具体的,在实际应用中,服务器可以为:提供下载服务的服务器,例如视频网站的服务器等。

具体的,针对客户端请求的目标数据,在客户端发送给服务器包含客户端相应标识、且用于请求目标数据的目标数据请求包a之后,服务器接收到该目标数据请求包a,从而向该客户端发送a对应的目标数据包,其中,目标数据包均为包含psh(push,推送比特)标志的数据包。

具体的,psh是tcp报头中的一个标志,服务器在发送数据的时候可以设置这个标志。当服务器与客户端进行交互式通信并传输数据时,可以在数据包中添加psh标志。这时,服务器端将推送比特psh置为1,并立即创建一个报文段发送出去。客户端接收到推送比特置1的报文段后,就尽快地(即“推送向前”)交付给接收应用进程,而不再等到整个tcp接收缓冲区都填满后在向上交互。另外,为目标数据包添加puh标志为现有技术,本发明实施例在此不对其进行赘述。

s102,接收所述客户端在接收到最后一个目标数据包之后所发送的ack包;

具体的,客户端在接收到服务器发送的最后一个带psh标志的目标数据包之后,会向服务器返回一个ack包(表明接收到了服务器发送的这些目标数据包),进而服务器可以接收到返回的这个ack包,其中,ack为确认字符,表示服务器发来的数据客户端已确认接收无误。服务器向客户端发送最后一个目标数据包之后,能够收到客户端返回的一个ack包,为tcp协议的一种现有策略。

s103,根据接收到的所述ack包,向客户端发送至少一个rst包;

具体的,在接收到客户端发送的该ack包后,确认客户端已接收完所有的目标数据包,此时会直接向客户端发送至少一个rst(reset,重置)包。在实际应用中,可以一次性发送一个或多个rst包以确保发送端可以接收到至少一个rst包,防止rst包在传输过程中发生丢失,进而提高容错性。在实际应用中,可以对服务器端进行相应修改,以实现可以在收到ack包后向客户端发送至少一个rst包的目的。其中,在服务器端进行修改可以为现有技术,本发明实施例在此不对其进行赘述。

s104,关闭当前与所述客户端相连的服务器端tcp连接。

具体的,在实际应用中,服务器在收到ack包后直接向客户端发送一个rst包,同时关闭当前与客户端建立的服务器端tcp连接,从而释放了服务器端tcp连接所占用的资源。

可见,应用本发明实施例,服务器可以在向客户端发送至少一个rst包后,直接关闭自身与客户端相连的服务器端tcp连接,并且客户端可以根据至少一个rst包,关闭自身与服务器相连的客户端tcp连接,而不需要进行任何的等待,使得tcp连接可以及时关闭,释放维护tcp连接所需的网络资源,从而减少了网络资源的占用。

参见图2,图2为本发明实施例提供的传输控制协议tcp连接的关闭方法的另一种流程示意图,应用于客户端,可以包括如下步骤:

s201,根据向服务器发送的目标数据请求包,接收所述服务器发送的目标数据包,其中,所述目标数据包为包含psh标志的数据包;

s202,在接收到最后一个目标数据包之后,向所述服务器发送ack包;

s203,接收所述服务器根据所述ack包发送的至少一个rst包;

s204,根据所述至少一个rst包,关闭当前与所述服务器相连的客户端tcp连接。

具体的,所述根据所述至少一个rst包,关闭当前与所述服务器相连的客户端tcp连接,可以针对所述至少一个rst包中的每一个rst包,分别判断所述rst包的前一个数据包是否包含所述psh标志;

如果包含,将tcp接收缓冲区的所有数据发送给应用层,关闭当前与所述服务器相连的客户端tcp连接;

如果不包含,关闭当前与所述服务器相连的客户端tcp连接。

具体的,在实际应用中,可以利用现有技术在tcp协议栈进行判断选项的配置等等,以使客户端收到rst包后,判断rst包的前一个数据包是否包含所述psh标志(客户端往往还与其他服务器进行连接传输数据,所以需要判断rst包的前一个数据包是否为本服务器发送的目标数据包),目的是将用来关闭连接的rst包和发生错误重置的rst包区别开来。其中,关闭了当前与服务器相连的客户端tcp连接,即代表释放了客户端tcp连接所占用的资源。

示例性的,图3为本发明实施例提供的一种tcp连接的关闭示意图。如图3所示,最后一个数据包(psh)为最后一个包含psh标志的数据包,即为最后一个包含psh标志的目标数据包,ack包为携带ack确认字符的包,表示服务器发来的数据客户端已确认接收无误。服务器端在发送rst包后关闭服务器端tcp连接,此时服务器端tcp连接处于关闭状态。客户端在接收到至少一个rst包之前,客户端tcp连接处于established状态(建立状态),在接收到rst包后,客户端tcp连接处于等待关闭的状态,然后客户端查看之前的一个数据包是否包含psh标志,如果包含,通知并等待应用层接收tcp接收缓冲区的数据,否则直接关闭客户端tcp连接,客户端tcp连接进而会直接转到关闭状态。

可见,应用本发明实施例,服务器可以在向客户端发送至少一个rst包后,直接关闭自身与客户端相连的服务器端tcp连接,并且客户端可以根据至少一个rst包,关闭自身与服务器相连的客户端tcp连接,而不需要进行任何的等待,使得tcp连接可以及时关闭,释放维护tcp连接所需的网络资源,从而减少了网络资源的占用。

参见图4,图4为本发明实施例提供的传输控制协议tcp连接的关闭方法的再一种流程示意图,本发明图4实施例在图2所示实施例的基础上,增加步骤s205:在向所述服务器发送ack包后,预设时长内未接收到所述服务器发送的所述至少一个rst包中的任一个rst包的情况下,关闭当前与所述服务器相连的客户端tcp连接。

具体的,在实际应用中,在向服务器发送ack包后,在预设时长内即使没有任何一个rst包到达客户端,tcp协议的现有机制也可以保证客户端一定会关闭当前与服务器相连的客户端tcp连接。其中,预设时长可以根据服务器和客户端的实际配置等情况来进行设置,具体以能够实现客户端在未接收到服务器发送的任一个rst包的情况下,关闭当前与服务器相连的客户端tcp连接为准。

可见,应用本发明实施例,服务器可以在向客户端发送至少一个rst包后,直接关闭自身与客户端相连的服务器端tcp连接,并且客户端可以根据至少一个rst包,关闭自身与服务器相连的客户端tcp连接,而不需要进行任何的等待,使得tcp连接可以及时关闭,释放维护tcp连接所需的网络资源,从而减少了网络资源的占用。进一步的,即使在客户端没有接收到任一个rst包的情况下,也能够保证在预设时长后一定可以关闭当前与服务器相连的客户端tcp连接,进而保证可以释放资源,减少网络资源的占用。

参见图5,图5为本发明实施例提供的传输控制协议tcp连接的关闭装置的一种结构示意图,应用于服务器,与图1所示的流程相对应,该关闭装置包括:第一发送模块501、第一接收模块502、第二发送模块503、第一关闭模块504。

第一发送模块501,用于根据客户端发送的目标数据请求包,向所述客户端发送所述目标数据请求包对应的目标数据包,其中,所述目标数据包为包含psh标志的数据包;

第一接收模块502,用于接收所述客户端在接收到最后一个目标数据包之后所发送的ack包;

第二发送模块503,用于根据接收到的所述ack包,向客户端发送至少一个rst包;

第一关闭模块504,用于关闭当前与所述客户端相连的服务器端tcp连接。

具体的,所述服务器可以为:提供下载服务的服务器。

可见,应用本发明实施例,服务器可以在向客户端发送至少一个rst包后,直接关闭自身与客户端相连的服务器端tcp连接,并且客户端可以根据至少一个rst包,关闭自身与服务器相连的客户端tcp连接,而不需要进行任何的等待,使得tcp连接可以及时关闭,释放维护tcp连接所需的网络资源,从而减少了网络资源的占用。

参见图6,图6为本发明实施例提供的传输控制协议tcp连接的关闭装置的另一种结构示意图,应用于客户端,与图2所示的流程相对应,该关闭装置可以包括:第二接收模块601、第三发送模块602、第三接收模块603、第二关闭模块604。

第二接收模块601,用于根据向服务器发送的目标数据请求包,接收所述服务器发送的目标数据包,其中,所述目标数据包为包含psh标志的数据包;

第三发送模块602,用于在接收到最后一个目标数据包之后,向所述服务器发送ack包;

第三接收模块603,用于接收所述服务器根据所述ack包发送的至少一个rst包;

第二关闭模块604,用于根据所述至少一个rst包,关闭当前与所述服务器相连的客户端tcp连接。

具体的,所述第二关闭模块,具体用于:

针对所述至少一个rst包中的每一个rst包,分别判断所述rst包的前一个数据包是否包含所述psh标志;

如果包含,将tcp接收缓冲区的所有数据发送给应用层,关闭当前与所述服务器相连的客户端tcp连接;

如果不包含,关闭当前与所述服务器相连的客户端tcp连接。

可见,应用本发明实施例,服务器可以在向客户端发送至少一个rst包后,直接关闭自身与客户端相连的服务器端tcp连接,并且客户端可以根据至少一个rst包,关闭自身与服务器相连的客户端tcp连接,而不需要进行任何的等待,使得tcp连接可以及时关闭,释放维护tcp连接所需的网络资源,从而减少了网络资源的占用。

参见图7,图7为本发明实施例提供的传输控制协议tcp连接的关闭装置的再一种结构示意图,与图4所示的流程相对应,本发明图7所示实施例在图6所示实施例的基础上,增加第三关闭模块605,用于在向所述服务器发送ack包后,预设时长内未接收到所述服务器发送的所述至少一个rst包中的任一个rst包的情况下,关闭当前与所述服务器相连的客户端tcp连接。

可见,应用本发明实施例,服务器可以在向客户端发送至少一个rst包后,直接关闭自身与客户端相连的服务器端tcp连接,并且客户端可以根据至少一个rst包,关闭自身与服务器相连的客户端tcp连接,而不需要进行任何的等待,使得tcp连接可以及时关闭,释放维护tcp连接所需的网络资源,从而减少了网络资源的占用。进一步的,即使在客户端没有接收到任一个rst包的情况下,也能够保证在预设时长后一定可以关闭当前与服务器相连的客户端tcp连接,进而保证可以释放资源,减少网络资源的占用。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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