TCP 三次握手(Three-Way Handshake)是 TCP 建立可靠连接 的标准过程,目的是确认双方的 收发能力同步序列号


一、为什么要三次?

核心目的只有三点:

  1. 确认客户端能发、服务器能收
  2. 确认服务器能发、客户端能收
  3. 同步双方的初始序列号(ISN)

少一次不安全,多一次没必要,因此是 三次


二、三次握手全过程

第一次:客户端 → 服务器(SYN)

客户端请求建立连接。

  • 标志位:SYN = 1
  • 初始序列号:Seq = x(随机生成)
Client → Server
SYN = 1, Seq = x

👉 表示:我想跟你建立连接


第二次:服务器 → 客户端(SYN + ACK)

服务器同意连接,并确认客户端的请求。

  • 标志位:SYN = 1, ACK = 1
  • 服务器序列号:Seq = y
  • 确认号:Ack = x + 1
Server → Client
SYN = 1, ACK = 1
Seq = y, Ack = x + 1

👉 表示:我收到了你的请求,我也准备好了


第三次:客户端 → 服务器(ACK)

客户端确认服务器的响应。

  • 标志位:ACK = 1
  • 确认号:Ack = y + 1
Client → Server
ACK = 1, Ack = y + 1

👉 表示:我确认收到你的响应,可以开始通信了


三、状态变化(非常常考)

角色状态变化
客户端CLOSED → SYN_SENT → ESTABLISHED
服务器CLOSED → LISTEN → SYN_RCVD → ESTABLISHED

四、为什么不能两次?

如果只有两次握手:

  • 服务器无法确认 客户端是否收到了自己的 SYN
  • 容易造成 历史连接请求被误认为有效连接
  • 可能引发 资源浪费或连接错乱

三次握手正好解决了这些问题。


五、口诀记忆版

SYN 请求 → SYN+ACK 应答 → ACK 确认

或者一句话:

你找我?我答应你。好,开始吧。