TCP 三次握手可视化演示

交互式演示 TCP 连接建立过程,深入理解 SYN、SYN-ACK、ACK 机制

当前状态
CLOSED
客户端状态
CLOSED
服务器状态
CLOSED
握手阶段
0/3
客户端
CLOSED
服务器
CLOSED
SYN
SYN-ACK
ACK

TCP 三次握手时序图

使用 Mermaid 代码渲染的流程图

sequenceDiagram
    participant C as 客户端
    participant S as 服务器
    
    Note over C: CLOSED
    C->>S: 1. SYN (seq=x)
    Note over C: SYN_SENT
    Note over S: LISTEN
    
    S->>C: 2. SYN (seq=y), ACK (ack=x+1)
    Note over S: SYN_RECV
    
    C->>S: 3. ACK (ack=y+1)
    Note over C: ESTABLISHED
    Note over S: ESTABLISHED
    
    Note over C,S: 连接建立完成,开始数据传输
1
第一次握手:SYN
客户端发送 SYN 包(seq=x),进入 SYN_SENT 状态,请求建立连接
2
第二次握手:SYN-ACK
服务器收到 SYN,回复 SYN-ACK 包(seq=y, ack=x+1),进入 SYN_RECV 状态
3
第三次握手:ACK
客户端收到 SYN-ACK,回复 ACK 包(ack=y+1),进入 ESTABLISHED 状态
为什么需要三次握手?
  • 确认双方收发能力正常:三次握手确保客户端和服务器的发送、接收能力都正常工作
  • 同步初始序列号:双方交换初始序列号(ISN),为后续数据传输做准备
  • 防止已失效的连接请求:避免网络中延迟的旧 SYN 包导致服务器错误建立连接
  • 资源分配:服务器在收到 ACK 后才分配完整资源,避免资源浪费
TCP 状态转换详解

客户端状态变化:CLOSED → SYN_SENT → ESTABLISHED

服务器状态变化:CLOSED → LISTEN → SYN_RECV → ESTABLISHED

关键参数:

  • SYN=1:表示这是一个连接请求或接受请求
  • ACK=1:表示确认号有效
  • seq(序列号):标识数据包的顺序
  • ack(确认号):期望收到对方下一个报文段的第一个数据字节的序号
← 返回首页 | 阅读 TCP/IP 教程