概念图解难度 · 入门

TCP 三次握手图解:为什么一定要握三次手

TCP 三次握手原理图解,一张图看懂 SYN、SYN-ACK、ACK 和序列号的作用,理解可靠传输的第一步。

#TCP#传输层#三次握手

先看效果

TCP三次握手过程图
客户端和服务器之间交换三个报文,连接才算建立

为什么是三次,不是两次

在打电话前,你会先确认「你听得到吗?我这边听得到你。」TCP 建立连接前也一样,要确认双向都能正常收发,才能开始传数据。

三次握手解决的核心问题是:序列号(Seq)的同步。TCP 是面向字节流的可靠协议,每个字节都要有编号,接收方靠编号来排序、去重、确认。握手的本质就是双方把各自的序列号起点告诉对方,并确认对方收到了自己的起点。

原理图解

看上面这张图,完整的三次交互:

  1. 客户端发 SYN:Seq=100,意思「我这边序列号从 100 开始,我想建立连接」;
  2. 服务器回 SYN+ACK:Ack=101(表示期待下一个字节是 101),并带上自己的 Seq=200;
  3. 客户端回 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 加密流程。