Generated by Answer me with HTML 0.5.5 · 2026-10-19 17:31 · ★ Star on GitHub

TCP 三次握手

为什么建立连接要三次,而不是两次

sourceRFC 9293

TCP 用三次握手同步双方的序号,并确认两条方向都能通。两次不够,因为服务端无法确认客户端收得到自己的消息。

A

三次握手

ClientServerSYN, seq=x1SYN+ACK, seq=y, ack=x+12ACK, ack=y+13ESTABLISHED
B

状态迁移

被动打开收到 SYN,回 SYN+ACK收到 ACKCLOSEDLISTENSYN_RCVDESTABLISHED
C

为什么不是两次

次数 问题
两次 服务端不知道客户端能否收到数据。历史连接请求会让服务端白等
三次 双方都确认了收发能力,序号也同步完毕
四次 多一次冗余。第二、三步可以合并成一个包