TCP 三次握手交互模拟器

可视化展示 TCP 连接建立过程,理解 SYN、SYN-ACK、ACK 报文交互

客户端
CLOSED
️
服务器
CLOSED
SYN
SYN=1, ACK=0
seq=1000
SYN-ACK
SYN=1, ACK=1
seq=2000, ack=1001
ACK
SYN=0, ACK=1
seq=1001, ack=2001
初始状态
第一次握手
第二次握手
第三次握手
连接建立

当前步骤详解

初始状态

客户端和服务器都处于 CLOSED(关闭)状态,尚未建立连接。

  • 客户端:准备发起连接
  • 服务器:监听端口,等待连接请求

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

客户端发送 SYN 报文,请求建立连接。

  • SYN=1:同步序列号,请求建立连接
  • ACK=0:初始连接,无确认
  • seq=1000:客户端初始序列号(随机生成)
  • 客户端进入 SYN_SENT 状态
标志位SYN=1, ACK=0
序列号seq=1000
确认号ack=0
客户端状态SYN_SENT

第二次握手:服务器 → 客户端(SYN-ACK)

服务器收到 SYN 后,回复 SYN-ACK 报文,确认收到并同意建立连接。

  • SYN=1:服务器也请求建立连接(双向通信)
  • ACK=1:确认收到客户端的 SYN
  • seq=2000:服务器初始序列号(随机生成)
  • ack=1001:确认客户端的 seq+1
  • 服务器进入 SYN_RCVD 状态
标志位SYN=1, ACK=1
序列号seq=2000
确认号ack=1001
服务器状态SYN_RCVD

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

客户端收到 SYN-ACK 后,发送 ACK 报文确认,连接正式建立。

  • SYN=0:连接已建立,无需再同步
  • ACK=1:确认收到服务器的 SYN
  • seq=1001:客户端下一个序列号
  • ack=2001:确认服务器的 seq+1
  • 客户端进入 ESTABLISHED 状态
  • 服务器收到后也进入 ESTABLISHED 状态
标志位SYN=0, ACK=1
序列号seq=1001
确认号ack=2001
双方状态ESTABLISHED

连接建立完成

TCP 三次握手完成,客户端和服务器现在可以开始数据传输。

  • 客户端:ESTABLISHED(已建立)
  • 服务器:ESTABLISHED(已建立)
  • 双方可以开始全双工数据传输
  • 后续数据包使用确认机制保证可靠传输
客户端状态ESTABLISHED
服务器状态ESTABLISHED
连接类型全双工
传输模式可靠、有序

时序图

T0
初始状态
客户端 CLOSED,服务器 LISTEN(监听端口)
T1
第一次握手(SYN)
客户端发送 SYN 报文,seq=1000,进入 SYN_SENT 状态
T2
第二次握手(SYN-ACK)
服务器回复 SYN-ACK,seq=2000, ack=1001,进入 SYN_RCVD 状态
T3
第三次握手(ACK)
客户端发送 ACK,seq=1001, ack=2001,进入 ESTABLISHED 状态
T4
连接建立
服务器收到 ACK,进入 ESTABLISHED 状态,开始数据传输

TCP 状态变化

CLOSED
关闭状态
LISTEN
监听端口
SYN_SENT
已发送 SYN
SYN_RCVD
已收到 SYN
ESTABLISHED
连接已建立