Skip to main content

TCP 三次握手和四次挥手是什么?

建立 TCP 连接时 server 与 client 会经历三次握手

  1. 浏览器向服务器发送 TCP 数据:SYN(seq=x)包
  2. 服务器向浏览器发送 TCP 数据:ACK(seq=x+1)包 + SYN(y)包
  3. 浏览器向服务器发送 TCP 数据:ACK(seq=y+1)包

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

  • A:我准备好了你准备好了吗,收到请回答。
  • B:收到收到,我也准备好了,收到请回答。
  • A:收到收到

image.png

关闭 TCP 连接时 server 与 client 会经历四次挥手

  1. 浏览器向服务器发送 TCP 数据:FIN(seq=x)
  2. 服务器向浏览器发送 TCP 数据:ACK(seq=x+1)
  3. 服务器向浏览器发送 TCP 数据:FIN(seq=y)
  4. 浏览器向服务器发送 TCP 数据:ACK(seq=y+1)
  • A:我要关闭。
  • B:收到,我准备关闭。
  • B:我关闭好了。
  • A:收到。

为什么 2、3 步骤不合并起来呢?

答案:2、3 中间服务器很可能还有数据要发送,不能提前发送 FIN。

image.png