TCP短连接和长连接

红米2年前技术文章413

     当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗的

 三次握手示意图:

WX20230510-112856@2x.png

                                     

   四次握手关闭图:

 WX20230510-112909@2x.png

长连接:

       所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手)。      

      连接数据传输保持连接(心跳)数据传输保持连接(心跳)……关闭连接(一个TCP连接通道多个读写通信);       这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态;

      TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的连接。

       如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:

1.    客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。

2.    客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。

3.    客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。

4.    客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。

短连接:

      短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段);

     连接数据传输关闭连接;

应用场景:

     长连接多用于操作频繁(读写),点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

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

 

     在长连接中一般是没有条件能够判断读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读相应长度的报文。


相关文章

MySQL 数据迁移中 lower_case_table_names 参数影响

MySQL 数据迁移中 lower_case_table_names 参数影响

记一次 SQLServer 迁移至 MySQL 遇到的一个关于 lower_case_table_names 参数的问题。前言   将 SQLServer 数据库迁移至 MySQL 迁移过后,驼峰命名...

prometheus黑盒监控

prometheus黑盒监控

一.背景黑盒监控:主要关注的现象,一般都是正在发生的东西,例如出现一个告警,业务接口不正常,那么这种监控就是站在用户的角度能看到的监控,重点在于能对正在发生的故障进行告警。二.操作前了解相关配置和要求...

alluxio短路读

alluxio短路读

原理当Client和Worker在同一节点时,客户端对本地缓存数据的读写请求可以绕过RPC接口,使本地文件系统可以直接访问Worker所管理的数据,这种情况被称为短路写,速度比较快,如果该节点没有Wo...

开源大数据集群部署(二)集群基础环境实施准备

开源大数据集群部署(二)集群基础环境实施准备

1、部署实施Ø  部署实施章节中灰色文本内容为操作命令和配置文件内容。Ø  下文中$表示系统命令解释器开始符号,且表示所有机器都要执行,如出现[hadoop@hd1.dtstack...

Alluxio部署

安装前准备1.1. 添加环境变量vi /etc/profile export ALLUXIO_HOME=/opt/alluxioexport PATH=$PATH:$ALLUXIO_HOME/bin ...

PostgreSQL 基于时间点恢复

前言本篇文章介绍 PostgreSQL 基于时间点恢复(point-in-time-recover)需要的条件及恢复过程,属于操作说明。1. WAL 日志WAL(Write Ahead Log) 日志...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。