tcp连接的关闭方式

tcp连接的关闭方式
tcp连接关闭方式
一个TCP连接的建立需要三次握手,而关闭连接需要四次握手,它分为主动和被动关闭。这是因为TCP连接是全双工的,我关上你的连接,这并不意味着你接近我的连接,因此双方必须单独关闭它。当方完成它的数据发送任务,它可以发送FIN分组在这个方向终止连接,表明它不再有数据要发送,和方片包不能发送数据,即使它无法读取数据。以客户端主动关闭连接为例:
Client sends FIN packages to Server, indicating that Client is actively closing the connection, then entering the FIN_WAIT_1 state, and waiting for Server to return to the ACK package.Since then, Client can not send data to Server again, but it can read the data.
收到FIN报文后,服务器发送ACK包到客户端,然后进入close_wait状态。之后,服务器不能再读取数据,但它可以继续发送数据到客户端,客户端进入fin_wait_2状态后接收服务器返回的ACK包,并等待服务器发送的散热封装。
发送数据后,服务器发送FIN报文给客户端,然后进入last_ack状态,等待客户端返回ACK包,然后服务器不能读取数据和发送数据。
接收片包后,客户端发送ACK数据包到服务器,然后进入time_wait状态,然后等待足够的时间(2msl)确保服务器收到ACK数据包,最后回到封闭的状态,释放网络资源。接收ACK包的客户端返回后,服务器返回到关闭状态释放网络资源。
建立与关机的TCP连接需要经历以下状态迁移(假设客户端启动连接并主动关闭连接):
客户端关闭-> syn_sent ->确定-> fin_wait_1 -> fin_wait_2 -> time_wait ->关闭
服务器云->听-> syn_received ->建立-> close_wait -> last_ack ->关闭
3的影响。服务器和客户端
详细了解了TCP连接状态和关闭后,我们会发现,time_wait状态是一个坑的存在。在最后一个ACK数据包发送,谁主动关闭连接将进入time_wait状态,无论对方是否接受它等待2msl时间聚会,然后网络资源可以released.msl是段的最长寿命(数据包的最大生命周期)。这是一个数据包在因特网上生存的最长时间。如果超过这个时间,数据包将在网络上消失。操作系统通常设置2msl 4分钟,与最低不少于30秒,所以time_wait状态一般是从30到4分钟保持。这是TCP / IP协议的本质,这是由TCP / IP的设计师设计的,这是不可能解决的。对于有time_wait状态存在的原因主要有两个方面:
实现TCP全双工连接是可靠的,当TCP关闭时,主动关闭方发送最后ACK包。如果ACK包丢失,被动关闭方将重发的FIN报文,所以发起人必须维护状态信息,让它重新发送ACK包。如果状态信息的维护不,活动方将回到封闭的状态,和FIN报文转发给被动方回应RST包,而被动关闭方将包装为一个错误(在java将把连接重置线程)。因此,如果我们要实现TCP全双工连接的正常终止,我们必须能够处理任何情况下,在四次握手协议数据包丢失。主动关闭方必须维护状态信息到time_wait状态。
确保了重复的数据包在网络中消失,防止最后连接出现后,包丢失,影响新connection.tcp分组路由器可能是由于异常的迷失,迷失在时间、分组发送超时和重传数据包可能丢失的数据包,路由器将恢复到目的地,丢失的包被称为失去的重复。关闭一个TCP,如果正确的使用一个新的TCP连接到相同的IP地址和端口,因此可能有一个连接在丢包在重复之前的连接被关闭了,新的连接效果。为了避免这种情况,TCP协议不允许IP和time_wait在端口使用状态开始一个新的连接,只有在2msl时间,以确保连接所有丢失的复制数据包已经丢失在网络安全,建立新的连接。

对于客户端,每个连接需要占用一个端口,可用端口的数量小于65000。这也是TCP参数优化后实现。因此,如果客户端发起的连接数太多,主动关闭(假设没有重用端口或连接多个服务器),将有一大批在time_wait状态连接关闭,等待2msl释放网络资源的时间(包括端口),然后,客户端将无法创建由于缺乏可用端口的一个新的连接。
在服务器的情况下(特别是高并发短连接服务器,服务器与客户端建立)是使用相同的端口,即监听端口,连接每一个五元组的区分,包括源IP地址、源端口,传输层协议号(协议类型),IP地址和目的端口,所以理论上,服务器是不受港口系统数量限制的影响。然而,服务器对每个端口的连接数限制。它使用哈希表来记录每个连接的端口是打开文件的最大数目有限。所以,如果服务器主动关闭连接,也会有大量的time_wait连接的状态是封闭的,等待2msl释放网络资源的时间(包括在连接记录和文件描述符哈希表),那么服务器将不接受由于哈希表和文件描述符的限制新的连接,一个急剧下降的力学性能,性能曲线将继续产生严重的波动。在这种情况下,有三种方式来处理它:
试图让客户机主动关闭连接,因为每个客户端具有较低的并发性,因此不会产生性能瓶颈。
优化服务器系统的TCP参数,平衡网络资源的最大消耗和恢复速度
TCP协议是重写,重新实现底层代码,但它是困难的,和系统的稳定性和安全性可能会受到影响。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部