Loading

TCP三次握手过程中从半连接到全连接的流程示意

TCP三次握手过程中从半连接到全连接的示意图,结合了半连接队列(SYN队列)和全连接队列(Accept队列)的流程:

客户端                           服务器
  │                                │
  │          SYN (seq=x)           │
  │───────────────────────────────>│
  │                                │ 状态:LISTEN → SYN_RCVD
  │                                │ 操作:将连接请求存入SYN队列(半连接)
  │                                │
  │        SYN-ACK (seq=y, ack=x+1)│
  │<───────────────────────────────│
  │ 状态:SYN_SENT → ESTABLISHED    │
  │                                │
  │          ACK (ack=y+1)         │
  │───────────────────────────────>│
  │                                │ 状态:SYN_RCVD → ESTABLISHED
  │                                │ 操作:将连接从SYN队列移至Accept队列(全连接)
  │                                │
  └───────────────────────────────┘

关键流程解析:

  1. 第一次握手
    客户端发送SYN包(SYN=1, seq=x),进入SYN_SENT状态。服务器收到后,将连接信息存入半连接队列(SYN队列),状态变为SYN_RCVD

  2. 第二次握手
    服务器回复SYN-ACK包(SYN=1, ACK=1, seq=y, ack=x+1),保持SYN_RCVD状态。此时连接仍在半连接队列中等待客户端确认。

  3. 第三次握手
    客户端发送ACK包(ACK=1, ack=y+1),进入ESTABLISHED状态。服务器收到后,将连接从半连接队列移至全连接队列(Accept队列),状态也变为ESTABLISHED,等待应用层调用accept()处理。

队列作用说明:

  • 半连接队列(SYN队列):存储未完成三次握手的连接请求,用于防止SYN Flood攻击。
  • 全连接队列(Accept队列):存储已完成握手但未被应用处理的连接,队列长度由listen()backlog参数和系统参数somaxconn共同决定。

TCP连接从半连接到全连接的状态迁移过程,体现了三次握手与队列管理的协同机制。

posted @ 2025-04-25 09:41  夷某蓁  阅读(64)  评论(0)    收藏  举报