详解TCP四次挥手过程,为什么挥手需要四次?

360影视 欧美动漫 2025-05-28 13:30 3

摘要:TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。

它不仅确保数据的完整性,还设计了一套完整的连接管理机制:

• 三次握手(建立连接)

• 四次挥手(断开连接)

其中,四次挥手是TCP连接断开时的关键步骤,确保双方都能正确释放源,避免数据丢失或连接异常终止。

TCP是全双工通信,意味着数据可以同时在两个方向传输。因此,连接的断开不仅需要客户端通知服务器自己不再发送数据,还需要服务器通知客户端自己也不再发送数据。这就导致了四次挥手的过程,而不是简单的三次握手。

第一次挥手

客户端发送FIN(终止请求):客户端发送一个FIN(Finish)报文,表示自己不再发送数据,进入FIN-WAIT-1状态。此时,客户端仍然可以接收数据,但不会再主动发送数据。

第二次挥手

服务器回复ACK(确认):服务器收到FIN后,发送一个ACK(Acknowledgment)报文,确认收到客户端的终止请求,进入CLOSE-WAIT状态。此时,服务器仍然可以继续发送数据。

第三次挥手

服务器发送FIN(终止请求):服务器在完成数据传输后,发送FIN报文,表示自己也不再发送数据,进入LAST-ACK状态。

第四次挥手

客户端回复ACK(确认):客户端收到服务器的FIN后,发送ACK报文,确认收到服务器的终止请求,进入TIME-WAIT状态。此时,客户端会等待一段时间(通常是2MSL,即最大报文生存时间的两倍),确保服务器收到ACK后才彻底关闭连接。

其中TIME-WAIT的作用:

TIME-WAIT状态的存在是为了确保最后一个ACK能够被服务器正确接收,防止旧的TCP报文影响新的连接。通常,TIME-WAIT状态会持续2MSL(最大报文生存时间),以确保所有可能的延迟数据包都被清除。

TIME-WAIT还可以防止已失效的连接请求报文段影响新的连接。如果客户端在发送完最后一个ACK后立即释放连接,那么可能会导致服务器的FIN报文丢失,进而影响新的连接建立。

下图为完整流程的简图:

简单的来讲:基于TCP稳定的通信,在连接断开时不仅要终止数据的发送,还要确保对方的数据已经完全接收。同时TCP是全双工通信,所以每个通道都需要单独关闭,这导致请求回复的机制需要重复两遍,也就是4次是这个确认机制的最小步骤。

总的来讲,三次握手是建立可靠连接,而四次挥手则是为了保证数据传输的完整性。但是在实际的应用中如高并发服务器环境中:

TIME-WAIT状态可能会导致大量端口占用,影响服务器性能。为了解决这个问题,许多系统会采用TCP连接复用或缩短TIME-WAIT时间的方式来优化连接释放过程。

某些系统在Socket选项中也提供了SO_REUSEADDR选项,允许新的连接在TIME-WAIT状态下复用旧的端口,从而提高服务器的并发能力。

串口服务器_数传电台_4G DTU_遥控开关_LoRa/ZigBee/WiFi/蓝牙模块-成都亿佰特电子科技有限公司官网

来源:亿佰特物联网应用

相关推荐