📅  最后修改于: 2023-12-03 15:06:16.495000             🧑  作者: Mango
TCP 是一种可靠的传输协议,它提供了全双工的连接,保证了数据的可靠传输。为了建立连接,TCP 需要进行三次握手,而为了终止连接,TCP 需要进行四次握手。为什么需要四次握手呢?
首先,我们来回顾一下 TCP 连接的建立过程。在建立连接时,客户端向服务器发送一个 SYN 请求,服务器接收到后返回一个 SYN-ACK 响应,客户端再次发送一个 ACK 响应确认连接建立。这三次握手保证了双方都能收到对方的请求和响应,建立起了可靠的连接。
但是在终止连接时,情况会更加复杂。
当客户端希望终止连接时,需要发送一个 FIN 请求给服务器,表示不再发送数据。客户端进入 FIN_WAIT_1 状态,等待服务器的响应。这是第一次握手。
服务器收到客户端的 FIN 请求后,会发送一个 ACK 响应给客户端,表示已经收到了该请求。服务器进入 CLOSE_WAIT 状态,等待收到客户端的 FIN 请求。这是第二次握手。
当服务器也希望终止连接时,会向客户端发送一个 FIN 请求,表示不再发送数据。服务器进入 LAST_ACK 状态,等待客户端的响应。这是第三次握手。
客户端收到服务器的 FIN 请求后,会发送一个 ACK 响应,表示收到了该请求。客户端进入 TIME_WAIT 状态,等待一段时间后关闭连接。这是第四次握手。
为什么需要第四次握手呢?因为在收到服务器的 FIN 请求后,客户端可能还有未发送完成的数据包需要发送,需要等待一段时间后才能关闭连接。这个等待时间称为 TIME_WAIT 时间,一般是 2MSL(Maximum Segment Lifetime,最大分段生存时间)。
总的来说,四次握手保证了双方都能正确地终止连接,避免了因网络中的延迟或错误而导致连接无法正常关闭的情况。
## 为什么 TCP 连接终止需要 4 次握手?
TCP 是一种可靠的传输协议,它提供了全双工的连接,保证了数据的可靠传输。为了建立连接,TCP 需要进行三次握手,而为了终止连接,TCP 需要进行四次握手。为什么需要四次握手呢?
首先,我们来回顾一下 TCP 连接的建立过程。在建立连接时,客户端向服务器发送一个 SYN 请求,服务器接收到后返回一个 SYN-ACK 响应,客户端再次发送一个 ACK 响应确认连接建立。这三次握手保证了双方都能收到对方的请求和响应,建立起了可靠的连接。
但是在终止连接时,情况会更加复杂。
### 第一次握手
当客户端希望终止连接时,需要发送一个 FIN 请求给服务器,表示不再发送数据。客户端进入 FIN_WAIT_1 状态,等待服务器的响应。这是第一次握手。
### 第二次握手
服务器收到客户端的 FIN 请求后,会发送一个 ACK 响应给客户端,表示已经收到了该请求。服务器进入 CLOSE_WAIT 状态,等待收到客户端的 FIN 请求。这是第二次握手。
### 第三次握手
当服务器也希望终止连接时,会向客户端发送一个 FIN 请求,表示不再发送数据。服务器进入 LAST_ACK 状态,等待客户端的响应。这是第三次握手。
### 第四次握手
客户端收到服务器的 FIN 请求后,会发送一个 ACK 响应,表示收到了该请求。客户端进入 TIME_WAIT 状态,等待一段时间后关闭连接。这是第四次握手。
为什么需要第四次握手呢?因为在收到服务器的 FIN 请求后,客户端可能还有未发送完成的数据包需要发送,需要等待一段时间后才能关闭连接。这个等待时间称为 TIME_WAIT 时间,一般是 2MSL(Maximum Segment Lifetime,最大分段生存时间)。
总的来说,四次握手保证了双方都能正确地终止连接,避免了因网络中的延迟或错误而导致连接无法正常关闭的情况。