本发明涉及互联网技术领域,特别涉及一种TCP连接的关闭方法及装置。
背景技术:
随着互联网技术的快速发展,用户客户端对于从网络服务器中下载各种数据的需求与日俱增。每天都会有海量的信息进行下载,下载数据所占用网络资源的优化技术,变得越来越重要。
目前网络上的下载服务过程中使用的几乎都是TCP(Transmission Control Protocol,传输控制协议)协议,对TCP协议而言,当一个TCP连接关闭时,一个正常的、完整的TCP连接的关闭过程包括四个步骤。参见图1,图1为现有技术中TCP连接的关闭方法的流程图。服务器端向客户端发送FIN/ACK(Finish/Acknowledgement,结束/确认字符)报文,客户端收到FIN/ACK报文后立即向服务器端发送ACK(Acknowledgement,确认字符)报文,当客户端处理完收到的数据以及也确认没有数据可以发送给服务器端之后,将也向服务器端发送一个FIN/ACK报文,服务器端收到客户端的FIN/ACK报文以后,回复ACK报文,同时再等待两倍的MSL(Maximum segment lifetime,最大生存时间)时间之后再完全关闭连接,而客户端收到服务器端最后的ACK之后,就立刻关闭连接。这种设计的初衷是为了防止当端口在短时间内被重用时,出现报文错乱的现象,但是在实际情况中,发生报文错乱现象的概率极低。
在上述的4步关闭连接的方法中,服务器端在发送完所有的关闭连接的报文后,需要等待两倍的MSL时间之后才能释放所占用的资源,而且在很多时候,服务器端收到客户端的ACK报文,需要等待较长的时间才能收到客户端发来的FIN/ACK报文,在这段时间内,同样会占用大量的资源。所以现有的关闭连接的方法中,在关闭连接时,会使得很多资源得不到及时的释放,从而造成了服务器资源的浪费,降低了服务器效率。
技术实现要素:
本发明实施例的目的在于提供一种TCP连接的关闭方法及装置,以实现在关闭TCP连接时,服务器资源可以及时释放,减少服务器等待时间,避免服务器资源浪费,提高服务器效率。具体技术方案如下:
本发明实施例公开一种TCP连接的关闭方法,应用于服务器端,包括
服务器向客户端发送第一连接关闭通知报文,所述第一连接关闭通知报文用于通知所述客户端关闭与所述服务器的TCP连接;
所述服务器接收所述客户端发送的连接关闭回应报文,所述连接关闭回应报文用于通知所述服务器,所述客户端已经接收到所述第一连接关闭通知报文;
所述服务器向所述客户端发送连接重置报文,所述连接重置报文用于使所述客户端终止与所述服务器的TCP连接;
所述服务器终止与所述客户端的TCP连接,并释放建立所述TCP连接所占用的资源。
优选的,所述服务器向客户端发送第一连接关闭通知报文之前,还包括:
所述服务器触发或获取关闭指令,所述关闭指令用于指示关闭所述服务器与所述客户端的TCP连接。
优选的,所述服务器向客户端发送第一连接关闭通知报文之前,进一步包括:
所述服务器获得配置信息,所述配置信息用于指示所述服务器,接收到所述客户端发送的连接关闭回应报文之后,发送所述连接重置报文。
优选的,所述服务器向所述客户端发送连接重置报文,包括:
所述服务器接收到所述客户端发送的连接关闭回应报文后,等待预设延时时间,再向所述客户端发送所述连接重置报文。
优选的,所述等待预设延时时间,再向所述客户端发送所述连接重置报文,包括:
当在所述预设延时时间内,所述服务器接收到所述客户端发送的第二连接关闭通知报文,则所述服务器接收到所述第二连接关闭通知报文后立即向所述客户端发送所述连接重置报文,所述第二连接关闭通知报文用于通知所述服务器立即关闭与所述客户端的TCP连接。
本发明实施例还公开一种TCP连接的关闭装置,应用于服务器端,包括:
发送模块,用于服务器向客户端发送第一连接关闭通知报文,所述第一连接关闭通知报文用于通知所述客户端关闭与所述服务器的TCP连接;
接收模块,用于所述服务器接收到所述客户端发送的连接关闭回应报文,所述连接关闭回应报文用于通知所述服务器,所述客户端已经接收到所述第一连接关闭通知报文;
所述发送模块,还用于所述服务器向所述客户端发送连接重置报文,所述连接重置报文用于使所述客户端终止与所述服务器的TCP连接;
关闭模块,用于所述服务器终止与所述客户端的TCP连接,并释放建立所述TCP连接所占用的资源。
优选的,所述TCP连接的关闭装置,还包括:
获取模块,用于所述服务器触发或获取关闭指令,所述关闭指令用于指示关闭所述服务器与所述客户端的TCP连接。
优选的,所述TCP连接的关闭装置,进一步包括:
配置模块,用于所述服务器获得配置信息,所述配置信息用于指示所述服务器,接收到所述客户端发送的连接关闭回应报文之后,发送所述连接重置报文。
优选的,所述发送模块,还用于所述服务器接收到所述客户端发送的连接关闭回应报文后,等待预设延时时间,再向所述客户端发送所述连接重置报文。
优选的,所述发送模块,还用于当在所述预设延时时间内,所述服务器接收到所述客户端发送的第二连接关闭通知报文,则所述服务器接收到所述第二连接关闭通知报文后立即向所述客户端发送所述连接重置报文,所述第二连接关闭通知报文用于通知所述服务器立即关闭与所述客户端的TCP连接。
本发明实施例提供的一种TCP连接的关闭方法及装置,可以使得服务器在接收到客户端发送的连接关闭回应报文后,向客户端发送连接重置报文,并关闭与客户端的TCP连接,释放服务器资源。不需要等待客户端再次反馈FIN/ACK报文,也不再需要等待两倍的MSL时间才释放服务器资源,提高了服务器的效率,同时使得服务器资源能够及时释放并且能够更加高效的利用服务器资源。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中TCP连接的关闭方法的流程图;
图2为本发明实施例提供的TCP连接的关闭方法的一种流程图;
图3为本发明实施例提供的TCP连接的关闭方法的另一种流程图;
图4为本发明实施例提供的TCP连接的关闭装置的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图2,图2为本发明实施例提供的TCP连接的关闭方法的一种流程图,应用于服务器侧,包括:
步骤201,服务器向客户端发送第一连接关闭通知报文,第一连接关闭通知报文用于通知客户端关闭与服务器的TCP连接。
当一个TCP连接关闭时,绝大多数情况下,都由服务器主动关闭连接,客户端收到服务器所发送的指令后,再执行关闭连接的有关程序。
服务器主动发起关闭一个与客户端的TCP连接时,首先,要向客户端发送第一连接关闭通知报文,通过第一连接关闭通知报文,通知客户端已经没有数据可以发送了,需要关闭本次的TCP连接。其中,第一连接关闭通知报文可以为FIN/ACK报文。
步骤202,服务器接收客户端发送的连接关闭回应报文,连接关闭回应报文用于通知服务器,客户端已经接收到第一连接关闭通知报文。
客户端收到服务器发送的第一连接关闭通知报文后,客户端会向服务器发送连接关闭回应报文,作为对第一连接关闭通知报文的回应。连接关闭回应报文是客户端向服务器表示,客户端已经收到了服务器所发送的第一连接关闭通知报文。其中,连接关闭回应报文可以是ACK报文。
服务器接收到客户端发送的连接关闭回应报文,表示客户端已经接收到了服务器所发送的第一连接关闭通知报文,并作出了回应。服务器可以进行剩下的关闭步骤。
步骤203,服务器向客户端发送连接重置报文,连接重置报文用于使客户端终止与服务器的TCP连接。
服务器收到客户端发送的连接关闭回应报文后,向客户端发送连接重置报文。连接重置报文用于使客户端可以立即终止与服务器的连接。连接重置报文可以是RST(Reset,重置)报文。RST报文用于立即终止一个TCP连接。
所以当客户端收到该RST报文时,就可以立即释放建立与服务器连接所使用的资源。
由于服务器向客户端发送连接重置报文时,连接重置报文有丢失的可能,所以服务器可以同时向客户端发送多个连接重置报文,以保证即使有连接重置报文发生了丢失,客户端也能够接收到剩下的连接重置报文。
步骤204,服务器终止与客户端的TCP连接,并释放建立TCP连接所占用的资源。
当服务器已经向客户端发送了连接重置报文后,就可以终止与客户端的TCP连接,并且释放建立与客户端的连接所使用的资源。
服务器不需要再接收任何客户端所发送的回应信息,只要服务器向客户端发出了连接重置报文,不需要考虑客户端的情况,就可以主动的终止该连接,并释放该连接所使用的服务器资源。
本发明实施例中,服务器接收到到客户端所发送的连接关闭回应报文后,就向客户端发出连接重置报文,并释放服务器资源。避免了现有技术中,服务器等待客户端再次反馈FIN/ACK报文的等待时间,提高了服务器效率。同时不再需要等待两倍的MSL时间才释放服务器资源。使得服务器资源能够及时释放并且更加高效的利用服务器资源,避免不必要的资源闲置。
优选的,本发明实施例提供的TCP连接的关闭方法中,服务器向客户端发送第一连接关闭通知报文之前,还包括:
服务器触发或获取关闭指令,关闭指令用于指示关闭服务器与客户端的TCP连接。
当服务器已经没有数据可以发送给客户端时,该服务器就可以自己触发关闭指令;或者服务器可以从其他控制单元获得停止向客户端发送数据的关闭指令;也可以是服务器后台操作人员,人为的向服务器发送一个关闭指令,使该服务器停止向客户端发送数据。
关闭指令用于指示服务器关闭与客户端的TCP连接,服务器触发或获取该指令后,才开始进行关闭TCP连接的步骤。保证了服务器不会因为其他干扰因素而关闭与客户端的TCP连接,从而使得TCP连接更加可靠。
优选的,本发明实施例提供的TCP连接的关闭方法中,服务器向客户端发送第一连接关闭通知报文之前,进一步包括:
服务器获得配置信息,配置信息用于指示服务器,接收到客户端发送的连接关闭回应报文之后,发送连接重置报文。
在服务器关闭与客户端的TCP连接之前,对服务器进行配置,服务器获得配置信息,从而服务器在接收到客户端发送的连接关闭回应报文之后,可以向客户端发送出连接重置报文,而不是等待客户端再次反馈FIN/ACK报文。
具体的,配置信息可以是在服务器setsockopt(套接口设置)中,加入预设选项程序,通过该选项程序,实现服务器在接收到客户端发送的连接关闭回应报文之后,向客户端发送出连接重置报文。同时,也可以通过该选项程序,关闭服务器的这项功能,使服务器恢复到原有的TCP连接的关闭方式,即接收到客户端发送的连接关闭回应报文之后,等待客户端再次反馈FIN/ACK报文。其中,预设选项程序可以为SO_LINGER_RST选项。SO_LINGER_RST选项可以通过编程语言实现。
在本发明实施例中,通过服务器的配置信息,实现了服务器在接收到客户端发送的连接关闭回应报文之后,向客户端发送出连接重置报文。并且通过在服务器setsockopt中添加SO_LINGER_RST选项,使得可以控制服务器是否开启该项功能。从而可以根据实际需要进行服务器的调整,选择开启或关闭服务器的该项功能,满足了不同用户的不同需求。
优选的,本发明实施例提供的TCP连接的关闭方法中,服务器向客户端发送连接重置报文,包括:
服务器接收到客户端发送的连接关闭回应报文后,等待预设延时时间,再向服务器发送连接重置报文。
在一个TCP连接中,服务器发送给客户端的数据经常会先存储在接收缓冲区中,然后客户端再从接收缓冲区中读取数据。当服务器发起TCP连接的关闭时,在接收缓冲区中可能还存在客户端没有读取完的数据。所以当服务器接收到客户端发送的连接关闭回应报文后,可以等待预设延时时间,再向客户端发送连接重置报文。客户端接收到连接重置报文后,立即终止该连接并释放所占用的资源。
预设延时时间是一个可以根据需要进行设定的值,当该值为0是,则相当于没有延时时间,服务器接收到客户端所发送的连接关闭回应报文后,立即向客户端发送连接重置报文。
通过预设延时时间,可以保证客户端有一定的时间可以从接收缓冲区中读取完数据,保证了数据传输的完整性。同时,预设时间可以根据需要进行的设定,以满足各种不同情况下的需求。
优选的,本发明实施例提供的TCP连接的关闭方法中,等待预设延时时间,再向服务器发送连接重置报文,包括:
当在预设延时时间内,服务器接收到客户端发送的第二连接关闭通知报文,则服务器接收到第二连接关闭通知报文后立即向客户端发送连接重置报文,第二连接关闭通知报文用于通知服务器立即关闭与客户端的TCP连接。
在本发明实施例中,对于客户端侧不需要做出调整,所以客户端依然会按照常规的TCP关闭方法进行连接的关闭。客户端向服务器发送了连接关闭回应报文后,客户端从接收缓存区读取完数据,处理完接收到的数据以及确认没有数据可以发送给服务器之后,还会向服务器发送第二连接关闭通知报文,通知服务器现在已经可以立即关闭并终止与客户端的TCP连接。
当在预设延时时间内,服务器如果接收到客户端发送的第二连接关闭通知报文,则表示客户端已经完成了接收缓冲数据读取等工作,可以立即关闭该连接。所以服务器立即向客户端发送连接重置报文,以使客户端立即终止该连接。
在本发明实施例中,在预设延时时间内,服务器接收到第二连接关闭通知报文后立即向客户端发送连接重置报文。不必等到预设延时时间结束才发送连接重置报文,缩短了预设延时时间的同时,保证了客户端能够从接收缓冲区中读取完数据。从而提升了服务器效率。
参见图3,图3为本发明实施例提供的TCP连接的关闭方法的另一种流程图,应用于服务器端,包括:
步骤301,服务器获得配置信息。
配置信息可以是服务器setsockopt中,加入SO_LINGER_RST选项,通过开启SO_LINGER_RST选项,使服务器可以向直接客户端发送连接重置报文。
步骤302,服务器触发或获取关闭指令。
关闭指令用于指示服务器关闭与客户端的TCP连接,服务器触发或获取该指令后,才开始进行关闭TCP连接的步骤。
服务器可以自己触发或者从其他控制单元获取关闭指令。
步骤303,服务器向客户端发送第一连接关闭通知报文。
第一连接关闭通知报文可以为FIN/ACK报文,用于通知客户端关闭与服务器的TCP连接。
步骤304,服务器接收客户端所发送的连接关闭回应报文。
连接关闭回应报文可以为ACK报文,用于通知服务器,客户端已经接收到第一连接关闭通知报文。
步骤305,等待预设延时时间。
服务器接收到连接关闭回应报文后,开始等待预设延时时间,预设延时时间时根据实际情况设定的值,例如可以为1秒,也可以为0,当预设延时时间为0时,表示不等待预设延时时间。
步骤306,是否接收到第二连接关闭通知报文。
在等待预设延时时间的时间内,判断是否接收到客户端发送的第二连接关闭通知报文。若接收到了该第二连接关闭通知报文,则不需要等待延时时间结束,直接进行步骤308。
步骤307,是否到达预设延时时间。
若在预设延时时间的时间内没有接收到了第二连接关闭通知报文,则需要等待到达预设延时时间,当到达预设延时时间后,进行步骤308。
步骤308,服务器向客户端发送连接重置报文。
连接重置报文可以是RST报文,通过RST报文,可以使客户端立即终止与服务器之间的TCP连接。
步骤309,服务器关闭与客户端的TCP连接。
当服务器已经向客户端发送了连接重置报文后,终止与客户端的TCP连接,并且释放建立与客户端的连接所使用的资源。完成本次TCP连接关闭的全部流程。
在本发明实施例中,服务器在关闭与客户端的TCP连接时,不需要等待客户端再次反馈FIN/ACK报文,也不再需要等待两倍的MSL时间才释放服务器资源,提高了服务器的效率和性能。并且通过预设延时时间,可以使得客户端有时间从接收缓冲区读取完数据之后,在关闭该TCP连接。从而在提高了服务器效率和性能的基础上保证了数据传输的完整性。
参见图4,图4为本发明实施例提供的TCP连接的关闭装置的结构图,应用于服务器端,包括:
发送模块401,用于服务器向客户端发送第一连接关闭通知报文,第一连接关闭通知报文用于通知客户端关闭与服务器的TCP连接。
接收模块402,用于服务器接收到客户端发送的连接关闭回应报文,连接关闭回应报文用于通知服务器,客户端已经接收到第一连接关闭通知报文。
发送模块401,还用于服务器向客户端发送连接重置报文,连接重置报文用于使客户端终止与服务器的TCP连接。
关闭模块403,用于服务器终止与客户端的TCP连接,并释放建立TCP连接所占用的资源。
本发明实施例中,服务器接收到到客户端所发送的连接关闭回应报文后,就向客户端发出连接重置报文,并释放服务器资源。避免了现有技术中,服务器等待客户端再次反馈FIN/ACK报文的等待时间,提高了服务器效率。同时不再需要等待两倍的MSL时间才释放服务器资源。使得服务器资源能够及时释放并且更加高效的利用服务器资源,避免不必要的资源闲置。
本发明实施例的装置是应用上述TCP连接的关闭方法的装置,则上述TCP连接的关闭方法的所有实施例均适用于该装置,且均能达到相同或相似的有益效果。
优选的,本发明实施例提供的TCP连接的关闭装置,还包括:
获取模块,用于服务器触发或获取关闭指令,关闭指令用于指示关闭服务器与客户端的TCP连接。
优选的,本发明实施例提供的TCP连接的关闭装置,进一步包括:
配置模块,用于服务器获得配置信息,配置信息用于指示服务器,接收到客户端发送的连接关闭回应报文之后,发送连接重置报文。
优选的,本发明实施例提供的TCP连接的关闭装置中的发送模块401,还用于服务器接收到客户端发送的连接关闭回应报文后,等待预设延时间,再向服务器发送连接重置报文。
优选的,本发明实施例提供的TCP连接的关闭装置中的发送模块401,还用于当在预设延时时间内,服务器接收到客户端发送的第二连接关闭通知报文,则服务器接收到第二连接关闭通知报文后立即向客户端发送连接重置报文,第二连接关闭通知报文用于通知服务器立即关闭与客户端的TCP连接。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。