首页 TCP四次挥手
文章
取消

TCP四次挥手

时序图:

TCP四次挥手时序图

详细流程:

我们用 curl http://sogo.com 来获得一次 TCP 断开连接。

在 wireshark 中找到这几条记录:

TCP四次挥手

可以看到断开连接的过程如下:

1.客户端设定随机序列号 1316840669,向服务端发送 FIN/ACK 请求,请求服务端断开连接。客户端进入 FIN_WAIT_1 状态。

挥手1

2.服务端设定随机序列号 617231205,确认号 1316840670(1中的序列号+1),向客户端发送 ACK 请求。服务端进入 CLOSE_WAIT 状态。

挥手2

3.服务端设定序列号 617231205(同2中的序列号),确认号 1316840670(同2中的确认号),向客户端发送 FIN/ACK 请求。服务端进入 LAST_ACK 状态。

挥手3

4.客户端设定确认号 617231206(2、3中的序列号+1),向客户端发送 ACK 请求。服务端进入 CLOSED 状态。断开连接完毕。

挥手4

和三次握手建立连接相比,为什么断开连接是四次而不是三次?

由于TCP通信是全双工的,客户端申请断开连接,说明其没有数据继续传输了,服务端给与确认回应,但此时服务端可能还有数据没有传完,传完后它也会申请断开连接,客户端给与确认回应,至此断开连接。

本文由作者按照 CC BY 4.0 进行授权