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队列(全连接)
│ │
└───────────────────────────────┘
关键流程解析:
-
第一次握手
客户端发送SYN包(SYN=1, seq=x),进入SYN_SENT状态。服务器收到后,将连接信息存入半连接队列(SYN队列),状态变为SYN_RCVD。 -
第二次握手
服务器回复SYN-ACK包(SYN=1, ACK=1, seq=y, ack=x+1),保持SYN_RCVD状态。此时连接仍在半连接队列中等待客户端确认。 -
第三次握手
客户端发送ACK包(ACK=1, ack=y+1),进入ESTABLISHED状态。服务器收到后,将连接从半连接队列移至全连接队列(Accept队列),状态也变为ESTABLISHED,等待应用层调用accept()处理。
队列作用说明:
- 半连接队列(SYN队列):存储未完成三次握手的连接请求,用于防止SYN Flood攻击。
- 全连接队列(Accept队列):存储已完成握手但未被应用处理的连接,队列长度由
listen()的backlog参数和系统参数somaxconn共同决定。
TCP连接从半连接到全连接的状态迁移过程,体现了三次握手与队列管理的协同机制。

浙公网安备 33010602011771号