【计算机网络】TCP 的三次握手与四次挥手

通常我们进行 HTTP 连接网络的时候会进行 TCP 的三次握手,然后传输数据,之后再释放连接。

TCP 传输如图1所示:
TCP 传输

图1 TCP 传输

TCP三次握手的过程如下:

  • 第一次握手:建立连接。客户端发送连接请求报文段,将 SYN 设置为 1、Sequence Number(seq)为 x;接下来客户端进入 SYN_SENT 状态,等待服务端的确认。

  • 第二次握手:服务器收到客户端的 SYN 报文段,对 SYN 报文段进行确认,设置 Acknowledgment Number(ACK)为 x+1(seq + 1);同时自己还要发送 SYN 请求信息,将 SYN 设置为 1、seq 为 y。服务端将上述所有信息放到 SYN + ACK 报文段中,一并发送给客户端,此时服务端进入 SYN_RCVD 状态。

  • 第三次握手:客户端收到服务端的 SYN + ACK 报文段;然后将 ACK 设置为 y + 1,向服务端发送 ACK 报文段,这个报文段发送完毕后,客户端和服务端都进入 ESTABLISHED (TCP 连接成功)状态,完成 TCP 的三次握手。

当客户端和服务端通过三次握手建立了 TCP 连接以后,当数据传送完毕,断开连接时就需要进行 TCP 的四次挥手。其四次挥手如下所示:

  • 第一次挥手:客户端设置 seq 和 ACK,向服务端发送一个 FIN 报文段。此时,客户端进入 FIN_WAIT_1 状态,表示客户端没有数据要发送给服务端了。

  • 第二次挥手:服务端收到了客户端发送的 FIN 报文段,向客户端回了一个 ACK 报文段。

  • 第三次挥手:服务端向客户端发送 FIN 报文段,请求关闭连接,同时服务端进入 LAST_ACK 状态。

  • 第四次挥手:客户端收到服务端发送的 FIN 报文段,向服务端发送 ACK 报文段,然后客户端进入 TIME_WAIT 状态。服务端收到客户端的 ACK 报文段以后,就关闭连接。此时,客户端等待 2MSL(最大报文段生存时间)后依然没有收到回复,则说明服务端已正常关闭,这样客户端也可以关闭连接了。

现在看图2来加强一下理解:
三次握手与四次挥手

图2 三次握手与四次挥手

如果有大量的连接,每次在连接、关闭时都要经历三次握手、四次挥手,这很显然会造成性能低下。因此,HTTP 有一种叫作 keepalive connections 的机制,它可以在传输数据后仍然保持连接,当客户端需要再次获取数据时,直接使用刚刚空闲下来的连接而无须再次握手,如图3所示:
连接复用

图3 连接复用

相关推荐

  1. 简述TCP握手挥手

    2024-03-10 22:52:04       39 阅读
  2. TCP握手挥手

    2024-03-10 22:52:04       39 阅读
  3. tcp握手挥手

    2024-03-10 22:52:04       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 22:52:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 22:52:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 22:52:04       82 阅读
  4. Python语言-面向对象

    2024-03-10 22:52:04       91 阅读

热门阅读

  1. MySql分布式事务

    2024-03-10 22:52:04       31 阅读
  2. react在什么时候请求接口

    2024-03-10 22:52:04       42 阅读
  3. leetcode热题100训练计划

    2024-03-10 22:52:04       38 阅读
  4. react,hooks中的useRef使用

    2024-03-10 22:52:04       41 阅读
  5. vue3 blob下载流文件

    2024-03-10 22:52:04       39 阅读
  6. vue 菜鸟教学如何jason字符串转对象

    2024-03-10 22:52:04       38 阅读
  7. 音频视频如何转字幕,音频视频转字幕教程

    2024-03-10 22:52:04       47 阅读
  8. 【深度学习】Pytorch基础

    2024-03-10 22:52:04       36 阅读
  9. 基于python的可视化开发

    2024-03-10 22:52:04       35 阅读