首页 › 技术笔记 › 正文

TCP 三次握手与四次挥手详解

发布于 2026-10-18 · 分类:技术笔记 · 标签:网络基础 · 作者:玄金

TCP 是面向连接的可靠传输协议,在正式传输数据之前,通信双方需要先建立连接;数据传输完成后,再通过一系列报文释放连接。这篇笔记整理一下这两个过程。

一、三次握手

  1. 客户端发送 SYN 报文,携带初始序列号 seq=x,进入 SYN_SENT 状态;
  2. 服务端收到后回复 SYN+ACK,seq=y, ack=x+1,进入 SYN_RCVD 状态;
  3. 客户端回复 ACK,ack=y+1,双方进入 ESTABLISHED 状态。

为什么是三次而不是两次?核心原因是双方都需要确认“对方能收到我的数据,我也能收到对方的数据”,同时防止已经失效的旧连接请求突然到达服务端,造成资源浪费。

二、四次挥手

  1. 主动关闭方发送 FIN,进入 FIN_WAIT_1;
  2. 被动方回复 ACK,进入 CLOSE_WAIT,主动方进入 FIN_WAIT_2;
  3. 被动方数据发送完毕后发送 FIN,进入 LAST_ACK;
  4. 主动方回复 ACK,进入 TIME_WAIT,等待 2MSL 后关闭。

三、关于 TIME_WAIT

TIME_WAIT 的存在有两个作用:一是保证最后一个 ACK 能到达对端,若丢失可以重传;二是让本次连接中残留的报文在网络中自然消失,避免影响后续新连接。

可以用下面的命令查看当前各状态的连接数量:

ss -ant | awk 'NR>1 {print $1}' | sort | uniq -c
小结:握手保证“双向可达”,挥手保证“双向关闭”,TIME_WAIT 保证“干净收尾”。
上一篇:没有了下一篇:关于坚持写博客这件事