浅谈TCP协议的长连接和短连接

2023-12-06 23:03:38 浏览数 (1)

首先先说一个结论,无论是HTTP的长连接还是TCP的长连接,最终都是基于TCP的长连接,因为HTTP是基于TCP的上层网络协议。

1 长连接&短连接比较

HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接。那么长连接和短连接有什么不同呢?

(1)概念不同

  • 长连接:HTTP客户端与服务端先建立连接,连接建立后不断开,然后再进行不断的数据传输。
  • 短连接:HTTP客户端与服务端每进行一次数据传输时才进行通讯连接,传输完成后立即断开连接。

(2)传输数据过程不同

  • 长连接:TCP三次握手打开连接—> HTTP报文传输—> 保持连接—> HTTP报文传输—> ...—> TCP四次挥手关闭连接
  • 短连接:TCP三次握手打开连接—> HTTP报文传输—> TCP四次挥手关闭连接

2 长连接原理

连接的保活:KeepAlive

首先想到的是KeepAlive 机制。他有三个参数:

  • tcp_keepalive_time
  • tcp_keepalive_probes
  • tcp_keepalive_intvl

KeepAlive 并不是 TCP 协议的一部分,但是大多数操作系统都实现了这个机制。KeepAlive 机制开启后,在一定时间内(一般时间为 7200s,参数tcp_keepalive_time)在链路上没有数据传送的情况下,TCP 层将发送相应的KeepAlive探针以确定连接可用性,探测失败后重试 10(参数tcp_keepalive_probes)次,每次间隔时间 75s(参数tcp_keepalive_intvl),所有探测失败后,才认为当前连接已经不可用。

但是,默认 TCP 连接并不启用 Keep-alive,若要打开的话要显式地调用 setsockopt(),来设置保活包的发送间隔、等待时间、重试个数等配置。在全局层面,Linux 还默认有 3 个跟 Keep-alive 相关的内核配置项可以调整:tcp_Keepalive_time,tcp_Keepalive_probes,还有 tcp_Keepalive_intvl。

参考:

https://network.51cto.com/article/603345.html

https://time.geekbang.org/column/article/482610

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

0 人点赞