0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TCP通信过程中的长连接与短连接是什么?

马哥Linux运维 来源:马哥Linux运维 2023-08-08 11:30 次阅读

当面试官问你:TCP 通信过程中的长连接与短连接是什么?

你应该如何回答?你会吗?

网络通信采用tcp协议时,在真正的读写操作之前,sever与client之间必须建立一个连接,当读写操作完成之后,对方不再需要这个连接时他们可以释放这个链接,连接的连接需要三次握手:

c78cbb2a-3528-11ee-9e74-dac502259ad0.png

释放需要四次握手:

c7e3ceba-3528-11ee-9e74-dac502259ad0.png

也就是说每个连接的建立都是需要消耗资源和时间的。

tcp 连接

短连接

模拟一种TCP短连接的情况:

client 向 server 发起连接请求

server 接到请求,双方建立连接

client 向 server 发送消息

server 回应 client

一次读写完成,此时双方任何一个都可以发起 close 操作

一般都是 client 先发起 close 操作。当然也不排除有特殊的情况。

从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作!

短连接的操作步骤是:

建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接

优缺点

短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

应用场景

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

TCP长连接

c800ace2-3528-11ee-9e74-dac502259ad0.png

模拟一种长连接的情况:

client 向 server 发起连接

server 接到请求,双方建立连接

client 向 server 发送消息

server 回应 client

一次读写完成,连接不关闭

后续读写操作…

长时间操作之后client发起关闭请求

长连接的操作步骤是:

建立连接——数据传输…(保持连接)…数据传输——关闭连接

保持连接用到了TCP保活功能

优缺点:

长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,适合长连接

client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。

应用场景:

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三次握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,再次处理时直接发送数据包就OK了,不用建立TCP连接。

例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

对比

c80e9e56-3528-11ee-9e74-dac502259ad0.png

短连接环境下,数据交互完毕后,会主动释放连接;如果使用的是长连接的情况下,如果双方已经建立起了连接,但是很长一段时间内没有数据交换,而客户端可能意外断电、死机、崩溃、重启,还是中间路由网络无故断开,这些TCP连接没来得及正常释放,那么,因为服务端不知道客户端的情况,他就会一直维护这个连接,长时间的积累会导致非常多的半打开连接,造成服务端系统资源的消耗和浪费。

所以服务端要做到快速感知失败,减少无效连接操作,这就有了TCP的Keepalive(保活探测)机制。

长连接断开的原因

在长连接的情况下,双方的所有通信 都建立在1条长连接上(1次TCP连接);所以,长连接 需要 持续保持双方连接 才可使得双方持续通信。

可是,长连接会存在断开的情况,而断开原因主要是:

长连接所在进程被杀死

NAT超时

网络状态发生变化

其他不可抗因素(网络状态差、DHCP的租期等等 )

原因1:进程被杀死

当进程被杀死后,长连接也会随之断开。

原因2:NAT 超时(重点关注)

NAT超时现象如下

c822ff72-3528-11ee-9e74-dac502259ad0.png

各运营商 & 地区的 NAT超时时间如下

c854d790-3528-11ee-9e74-dac502259ad0.png

特别注意:排除其他外因(网络切换、NAT超时、人为原因),TCP长连接在双方都不断开连接的情况上,本质上是不会自动中断的

即,不需要心跳包来维持。

验证:让2台电脑连上同1个Wifi(其中1台做服务器, 另1台做客户端连接服务器(无设置KeepAlive);只要电脑、路由器不断网断电,那么,2台电脑的长连接是不会自动中断的。

原因3:网络状态发生变化

当移动客户端网络状态发生变化时(如移动网络 & Wifi切换、断开、重连),也会使长连接断开。

原因4:其他不可抗因素

如网络状态差、DHCP的租期到期等等,都会使得长连接发生偶然的断开。

DHCP的租期到期:对于Android系统,DHCP到了租期后不会主动续约 & 继续使用过期IP,,从而导致长连接断开。

高效维持长连接的解决方案

在了解长连接断开原因后,针对对应原因,此处给出 高效维持长连接的解决方案。

c861a8ee-3528-11ee-9e74-dac502259ad0.png

为此,若需有效维持长连接,则需要做到。

c86ac1ae-3528-11ee-9e74-dac502259ad0.png

其实,说得简单点:高效维持长连接的关键在于。

保活:处于连接状态时尽量不要断

断线重连:断了之后继续重连回来

解决方案1:进程保活

c8760a6e-3528-11ee-9e74-dac502259ad0.png

解决方案2:心跳保活机制

解决方案3:断线重连机制

心跳保活机制简介

心跳保活机制的整体介绍如下

c8efe2bc-3528-11ee-9e74-dac502259ad0.png

注:很多人容易混淆心跳机制 & 轮询机制,此处给出二者区别。

c91ba32a-3528-11ee-9e74-dac502259ad0.png

主流心跳机制分析 & 对比

对国、内外主流的移动IM产品(WhatsApp、Line、微信)进行了心跳机制的简单分析 & 对比,具体请看下图 。

c926dfb0-3528-11ee-9e74-dac502259ad0.png

心跳机制方案 总体设计

下面,将根据市面上主流的心跳机制,设计一套心跳机制方案。

基本流程

c93ed7fa-3528-11ee-9e74-dac502259ad0.png

设计要点

对于心跳机制方案设计的主要考虑因素 = 保证消息的实时性 & 耗费设备的资源(网络流量、电量、CPU等等)

从上图可以看出,对于心跳机制方案设计的要点在于

心跳包的规格(内容 & 大小)

心跳发送的间隔时间

断线重连机制 (核心 = 如何 判断长连接的有效性)

在下面的方案设计中,将针对这3个问题给出详细的解决方案。

心跳机制方案详细设计

心跳包的规格

为了减少流量 & 提高发送效率,需要精简心跳包的设计。

设计原则

主要从心跳包的内容 & 大小入手,设计原则具体如下:

c960dfd0-3528-11ee-9e74-dac502259ad0.png

设计方案

心跳包 = 1个携带少量信息 & 大小在10字节内的信息包。

心跳发送的间隔时间

为了防止NAT超时 & 减少设备资源的消耗(网络流量、电量、CPU等等),心跳发送的间隔时间是整个心跳机制方案设计的重点。

设计原则

c96f70c2-3528-11ee-9e74-dac502259ad0.png

设计方案

最直接 & 常用方案

一般,最直接 & 常用的心跳发送间隔时间设置方案 :每隔估计 x 分钟发送心跳包1次。

其中,x <5分钟即可。(综合主流移动IM产品,此处建议 x= 4分钟)。

但是,这种方案存在一些问题:

c985becc-3528-11ee-9e74-dac502259ad0.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1272

    浏览量

    78299
  • 网络通信
    +关注

    关注

    4

    文章

    729

    浏览量

    29549
  • TCP协议
    +关注

    关注

    1

    文章

    83

    浏览量

    12004
  • TCP通信
    +关注

    关注

    0

    文章

    145

    浏览量

    4138

原文标题:面试官:什么是 TCP 长连接、短连接?问倒一大片。。。

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何标识一个TCP连接

    tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp
    的头像 发表于 10-10 10:33 2402次阅读

    LabVIEWTCP通信

    LabVIEWTCP通信CP(transmission contro1 protoco1)是一种面向连接的传输层协议,面向
    发表于 09-26 09:59

    嵌入式 Linux 学习过程中的各种连接

    本帖最后由 eehome 于 2013-1-5 10:01 编辑 嵌入式 Linux 学习过程中的各种连接是困扰初学者的一大难题。众多的软件,各种各样的连接方法,让“菜鸟”们头痛不已。 “明明
    发表于 06-05 21:33

    CC2541如何连接过程中修改连接间隔?

    CC2541如何连接过程中修改连接间隔?CC2541 连接 APK 传输数据,数据传输完之后,这时修改连接间隔,但是连接间隔不变;必须断开重
    发表于 03-31 16:45

    节点通信过程中遇到的问题

    上位机采用的是组态王这款监控软件,单片机采用的是STM32,系统的总框架分为4层: 服务器(组态王)——网关2——网关1——节点通信过程中遇到的问题如下:1. 将单片机与组态王连接完成后,组态王上没
    发表于 08-09 08:45

    简单了解TCP中设计的短连接和长连接

    TCP 本身并没有长短连接的区别,长短与否,完全取决于我们怎么用它。 短连接:每次通信时,创建 Socket;一次通信结束,调用 sock
    的头像 发表于 02-01 10:46 4852次阅读
    简单了解<b class='flag-5'>TCP</b>中设计的短<b class='flag-5'>连接</b>和长<b class='flag-5'>连接</b>

    ISO on TCP协议通信连接配置

    使用ISO on TCP 协议通信,除了连接参数的定义不同,其它组态编程与 TCP 协议通信完全相同,见S7-1200 和 S7-1200
    的头像 发表于 07-21 10:41 1943次阅读

    要是没有一端进行监听是否可以建立起TCP连接呢?

    TCP 网络通信过程中,我们都是先有 server 端调用 listen 监听某个端口号,然后 client 向 server 发起连接请求,最终建立起
    的头像 发表于 11-16 17:42 1914次阅读
    要是没有一端进行监听是否可以建立起<b class='flag-5'>TCP</b><b class='flag-5'>连接</b>呢?

    字节一面:HTTP长连接TCP连接有区别?

    由于 HTTP 是基于 TCP 传输协议实现的,客户端与服务端要进行 HTTP 通信前,需要先建立 TCP 连接,然后客户端发送 HTTP 请求,服务端收到后就返回响应,至此「请求-
    的头像 发表于 12-02 14:00 743次阅读

    什么是Socket连接?Socket与TCP连接的关系

    主机 A 的应用程序必须通过 Socket 建立连接才能与主机B的应用程序通信,而建立 Socket 连接需要底层 TCP/IP 协议来建立 TCP
    发表于 03-31 15:10 747次阅读

    TCP状态机设计与实现

    TCP状态机是TCP连接的变化过程TCP在三次握手和四次挥手的过程,就是一个
    的头像 发表于 04-21 11:47 1147次阅读
    <b class='flag-5'>TCP</b>状态机设计与实现

    什么是Socket连接?与TCP连接有什么关系?

    什么是Socket连接?它与TCP连接有什么关系? 计算机网络是我们日常生活中不可或缺的一部分,而Socket连接则是网络通信中必不可少的一
    的头像 发表于 05-23 11:43 411次阅读

    TCP连接的建立与中止

    TCP三次握手其实,网络上的传输是没有连接的, TCP 是一样的 TCP 所谓的 “连接”,其实只不过是在
    的头像 发表于 10-08 16:52 455次阅读

    TCP通信过程详解

    TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需
    的头像 发表于 11-09 14:39 412次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>通信</b><b class='flag-5'>过程</b>详解

    TCP的长连接和短连接

    TCP在真正开始进行数据传输之前,Server 和 Client 之间必须建立一个连接。当数据传输完成后,双方不再需要这个连接时,就可以释放这个连接
    的头像 发表于 11-13 10:46 524次阅读