概念图解难度 · 入门
TCP 三次握手图解:为什么一定要握三次手
TCP 三次握手原理图解,一张图看懂 SYN、SYN-ACK、ACK 和序列号的作用,理解可靠传输的第一步。
#TCP#传输层#三次握手
先看效果

为什么是三次,不是两次
在打电话前,你会先确认「你听得到吗?我这边听得到你。」TCP 建立连接前也一样,要确认双向都能正常收发,才能开始传数据。
三次握手解决的核心问题是:序列号(Seq)的同步。TCP 是面向字节流的可靠协议,每个字节都要有编号,接收方靠编号来排序、去重、确认。握手的本质就是双方把各自的序列号起点告诉对方,并确认对方收到了自己的起点。
原理图解
看上面这张图,完整的三次交互:
- 客户端发 SYN:
Seq=100,意思「我这边序列号从 100 开始,我想建立连接」; - 服务器回 SYN+ACK:
Ack=101(表示期待下一个字节是 101),并带上自己的Seq=200; - 客户端回 ACK:
Ack=201,确认收到服务器的序列号起点。
注意 Ack 值 = 对方的 Seq + 1,这个 +1 表示「你的 SYN 我收到了」。三次之后,双方都知道了对方的起点,后续数据就能按序号有序、可靠地传。
为什么两次不够
如果只握两次手,可能出现旧连接的迟到包被当成新请求:客户端第一次 SYN 在网络里滞留,超时重发;如果第一次其实到达了服务器并建立连接,浪费一个资源。三次握手让双方都确认「我发的你已经收到」,才不会有这种歧义。
常见问题
Q: 三次握手能防 DDoS 吗? A: 不能,反而可能被利用——攻击者只发 SYN 不回应 ACK,服务器会一直挂着半连接等超时,这就是 SYN Flood 攻击。防御靠 SYN Cookie、限速等机制。
Q: 如果第三次 ACK 丢了会怎样? A: 服务器会重发 SYN+ACK,直到客户端补 ACK 或超时关闭。因为连接还没真正建立,此时不传输数据,安全。
下一步
连接建立后要传的是 HTTP 报文,但明文 HTTP 会被窃听和篡改。看 HTTPS 加密流程。