专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

TCP协议长连接和短连接详解

  一前言
  TCP在真正开始进行数据传输之前,Server和Client之间必须建立一个连接。当数据传输完成后,双方不再需要这个连接时,就可以释放这个连接。
  TCP连接的建立是通过三次握手,而连接的释放是通过四次挥手。所以说,每个TCP连接的建立和释放都是需要消耗资源和时间成本的。二TCP短连接
  模拟一种TCP短连接的情况:client向server发起连接请求server收到连接请求,双方建立TCP连接client向server发送消息server回应client消息一次读写完成,此时双方任何一方都可以发起关闭连接请求,即close操作。
  在步骤5中,一般都是client先发起close操作。从上面的描述来看,短连接一般只会在client和server之间传递一次读写操作。
  短连接的操作过程:建立连接传输数据关闭连接。三TCP长连接
  模拟一种长连接的情况:client向server发起连接请求server收到连接请求,双方建立TCP连接client向server发送消息server回应client消息一次读写完成,TCP连接不关闭后续读写操作。。。长时间操作之后,client发起关闭连接请求
  TCP长连接是指在连接成功建立之后,即使通信双方没有数据传输也要保持连接,使其不断开。
  长连接的操作步骤:建立连接传输数据。。。(保持连接)。。。传输数据关闭连接四长连接和短连接的优缺点4。1短连接的优缺点
  优点:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。
  缺点:由于TCP的建立和关闭操作需要一定的系统开销,如果客户端连接请求频繁,会降低服务器的处理速度、浪费系统资源和带宽。4。2长连接的优缺点
  优点:长连接可以省去较多的TCP连接的建立和关闭的操作,减少浪费,节约时间。
  缺点:client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端的连接越来越多,服务器的负载压力会增大,降低服务器的整体性能,更严重者,可能导致服务器崩溃;其次,如果大量处于连接状态的TCP通信双方长时间没有进行数据传输,这也会浪费系统和网络资源。
  相关视频推荐
  Tcpip协议栈技术专题训练营(1)
  Tcpip协议栈技术专题训练营(2)
  100行代码实现tcpip协议栈,自行准备好Linux系统
  需要CCLinux服务器架构师学习资料加qun812855908获取(资料包括CC,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCPIP,协程,DPDK,ffmpeg等),免费分享
  五长连接短连接的应用场景长连接一般多用于需要频繁进行读写操作,点对点通讯,而且连接数不太多的情况。
  例如:数据库的连接通常使用长连接,如果用短连接的话,频繁的TCPsocket创建和关闭,会造成socket错误,也是对资源的一种浪费。短连接一般用于不需要频繁进行读写操作,并且连接数很大的情况下。
  例如:web网站的http服务一般都用短连接。因为长连接对于服务器来说是要耗费一定的系统资源的,像web网站服务,通常会有大量的客户端连接请求,并发连接量大,使用短连接会更节省系统资源,能够及时响应客户请求。
  总结:长连接和短连接的选择要具体需求、实际情况而定。六长连接的保活机制
  对于TCP长连接,当通信双方在没有数据传输的时候,如何保持TCP连接一直处于保活(KeepAlive)状态,这是一个必须要解决的问题。
  在Linux系统中,我们可以使用netstat、lsof等命令可以查看TCP连接是否处于ESTABLISHED状态。6。1TCP保活的必要性
  (1)很多防火墙会主动关闭空闲的socket。
  (2)可能出现的非正常断连,服务器并不能检测到,为了回收已断连的socket资源,必须提供一种检测机制。
  导致TCP非正常断连的可能原因:
  (1)网络故障
  (2)客户端服务端一侧突然断电或者进程崩溃6。2保活机制的方式
  6。2。1应用层的心跳机制
  在应用层中使用心跳(heartbeat)机制来主动检测。具体做法:当TCP连接建立成功后,客户端开启一个定时任务,定时对已经建立连接的对端发送一个心跳请求消息,服务器收到该心跳消息后,返回一个心跳应答消息。如果在超时时间内没有收到服务器的应答消息,则重发心跳请求消息,如果客户端持续多次没有响应,客户端则可以认为该TCP连接不可用,主动断开连接。当然,也可以是服务器端主动发送心跳请求消息给客户端。
  6。2。2TCP协议自带的保活机制
  Linux内核自带的保活机制keepalive。使用的时候只需要打开keepalive功能即可。
  TCP的Keepalive机制的作用是在于探测连接的对端是否存活。
  工作原理:TCPkeepalive是通过在空闲时发送TCPKeepAlive数据包,然后对方回应TCPKeepAliveACK来实现的。
  在socket网络编程中,需要设置一个socket选项SOKEEPALIVE,才能开启keepalive机制。代码描述如下:keepAlive1;setsockopt(listenfd,SOLSOCKET,SOKEEPALIVE,keepAlive,sizeof(keepAlive));
  在Linux的keepalive机制中,有3个重要的内核参数:tcpkeepalivetime、tcpkeepaliveprobes和tcpkeepaliveintvl。tcpkeepalivetime:表示TCP连接闲置多长时间后开始发送探测报文。(单位:秒)tcpkeepaliveprobes:表示一次探测过程中最多可以重发探测报文的次数。(没有收到确认时重发次数)tcpkeepaliveintvl:表示前一个探测报文和后一个探测报文之间的时间间隔。(即超时重传的时间间隔)(单位:秒)
  这些内核参数可以在procsysnetipv4目录下可以看到,也可以使用Linux命令查看其默认值:sysctlagrepkeepalivenet。ipv4。tcpkeepaliveintvl75net。ipv4。tcpkeepaliveprobes9net。ipv4。tcpkeepalivetime7200
  可以看到,这3个内核参数的默认值分别为:
  tcpkeepalivetime7200秒,即2小时。也就是说,从最后一次数据传输结束开始计时起到发送第一个保活探测报文的时间间隔为2小时。
  tcpkeepaliveprobes9。当没有收到对方的确认时,继续发送保活探测报文的默认次数为9次。
  tcpkeepaliveintvl75秒。当没有收到对方的确认时,继续发送保活探测报文的间隔时间为75秒。
  TCP连接探活的过程:
  开启keepalive后,如果2小时内在此TCP连接的通信双方没有发生数据交换,TCPT就自动给对方发一个保活探测报文段(keepaliveprobe)。这是一个对方必须响应的TCP报文段。
  它会导致以下三种情况:对方成功接收,连接正常:以期望的ACK报文段响应。2小时后,TCP将发出另一个探测报文。对方已崩溃且已重新启动:已RST报文段响应。socket的待处理错误被置为ECONNRESET,socket本身则被关闭,断开TCP连接。对方无任何响应:发送保活探测报文的一方,相隔75秒后,再次重发保活探测报文,重发8次,一共尝试9次。若仍无响应就放弃。socket的待处理错误被置为ETIMEOUT,socket本身则被关闭,断开TCP连接。
  设置TCPkeepalive
  上面提到的TCPkeepalive使用的是其默认值。如果我们不想使用这么长的等待时间,可以修改Linux内核关于网络方面的配置参数。我们可以自定义那3个内核参数的值,有两种修改方式:
  (1)全局设置(操作系统层面)
  (2)针对单个TCP连接设置(应用程序层面)
  1、全局设置
  在Linux系统中,我们可以通过修改etcsysctl。conf配置文件的全局配置:net。ipv4。tcpkeepalivetime300net。ipv4。tcpkeepaliveintvl30net。ipv4。tcpkeepaliveprobes5
  添加上面的配置后,输入:sysctlp使其生效。
  这种方法设置的全局内核参数,针对整个操作系统生效,对单个socket的设置不够友好。
  2、针对单个TCP连接的设置
  我们可以在socket网络编程中设置TCP的TCPKEEPCNT、TCPKEEPIDLE、TCPKEEPINTVL这3个socket选项。
  这三个选项的定义,可以通过man命令查看。
  man7tcp
  TCPKEEPCNT(sinceLinux2。4)
  ThemaximumnumberofkeepaliveprobesTCPshouldsendbeforedroppingtheconnection。Thisoptionshouldnotbe
  usedincodeintendedtobeportable。
  关闭一个非活跃连接之前的最大重试次数。该选项不具备可移植性。
  TCPKEEPIDLE(sinceLinux2。4)
  Thetime(inseconds)theconnectionneedstoremainidlebeforeTCPstartssendingkeepaliveprobes,ifthe
  socketoptionSOKEEPALIVEhasbeensetonthissocket。Thisoptionshouldnotbeusedincodeintendedtobe
  portable。
  设置连接上如果没有数据发送的话,多久后发送keepalive探测报文,单位是秒。该选项不具备可移植性。
  TCPKEEPINTVL(sinceLinux2。4)
  Thetime(inseconds)betweeninpidualkeepaliveprobes。Thisoptionshouldnotbeusedincodeintendedtobe
  portable。
  前后两次探测报文之间的时间间隔,单位是秒。该选项不具备可移植性。
  代码层面的设置步骤如下:intkeepAlive1;非0值,开启keepalive属性intkeepIdle60;如该连接在60秒内没有任何数据往来,则进行此TCP层的探测intkeepInterval5;探测发包间隔为5秒intkeepCount3;尝试探测的最多次数开启tcpkeepAlive探活机制setsockopt(sockfd,SOLSOCKET,SOKEEPALIVE,keepAlive,sizeof(keepAlive));setsockopt(sockfd,SOLTCP,TCPKEEPIDLE,keepIdle,sizeof(keepIdle));setsockopt(sockfd,SOLTCP,TCPKEEPINTVL,keepInterval,sizeof(keepInterval));setsockopt(sockfd,SOLTCP,TCPKEEPCNT,keepCount,sizeof(keepCount);
  6。2。3TCPKeepalive常见异常
  启用TCPKeepalive的应用程序,一般可以捕获到下面几种类型的错误:ETIMEOUT超时错误
  在发送一个探测报文段后经过(tcpkeepaliveTimetcpkeepaliveIntvltcpkeepaliveProbes)时间后仍然没有接收到ACK确认报文段的情况下触发的异常,套接字被关闭:Connectiontimedout。EHOSTUNREACH主机不可达错误
  这个是网络层的ICMP汇报给上层应用的异常错误:Noroutetohost。
  6。2。4TCPKeepalive和应用层heartbeat优缺点
  1、TCP协议的Keepalive机制
  优点:TCP协议的Keepalive机制由系统内核实现,上层应用程序只需要处理数据的收发,连接异常通知即可,这就减少了应用层代码的复杂度,内核层面的计时器相比应用层,更为高效。
  缺点:第一,TCPkeepalive机制,位于传输层,由操作系统负责,只能检测到连接是否存活,但不能检测检测连接是否可用。例如,服务器因为某种原因导致负载超高,CPU使用率达到了100,无法继续响应任何业务请求,但是TCP探针却仍能确定连接状态,这就是典型的连接活着但是服务已死的状态。对于客户端而言,这时最好的选择就是断开连接重新连接到其他服务器上,而不是一直认为当前服务器仍处于可用状态,一直向当前服务器发送那些必然会失败的请求。
  第二,TCPkeepalive机制对于连接异常断开的情况不能及时有效地监测到。如果TCP连接的某一方突然异常断开连接,这个时候发送方并不知道对端已经掉线。而此时,如果有数据发送失败,tcp会自动进行超时重传,而重传报文段的优先级是要高于keepalive的探测报文段的,导致探测报文段总是不能发送出去,直到经过较长时间的重传之后,我们才会知道。
  2、应用层的HeartBeat机制
  优点:第一,具有更好的灵活可控性。可以控制心跳的监测时机、间隔和流程,甚至可以在心跳包上附带额外信息,最重要的是不光可以检测连接是否存在,还可以检测到连接是否可用,而TCP的keepalive机制只能提供简单的检活功能。
  第二,具有通用性。应用层的心跳不依赖传输层协议,如果有一天不用TCP要改用UDP了,传输层不提供心跳机制了,但是你应用层的心跳机制依然可以使用,只需做少许改动就可以继续使用。
  缺点:第一,需要开发人员自己实现,增加软件开发的工作量,由于应用特定的网络框架,还可能增加代码结构的复杂度。
  第二,应用层心跳的流量消耗会更大,毕竟这本质上还是一个普通的数据包。

每天一篇手机里的云(二十二)这一组没什么特色一个人真正在乎你,那么她是藏不住的我们总是去问对的人是什么样子的啊?对此我们的回答是我们认为对的那个人,是那种一看见我们就笑,一看见我们就想跑来我们身边,陪我们渡过苦难,并会安心配伴在我们身边的那个人。我们这一生苦初恋是什么味道?大师有话说初恋是什么味道?日复一日的生活打拼与柴米油盐中你也许早就忘却了最初的美好今天一起来重温屠格涅夫的初恋听大师讲述生命最初的悸动故事很狗血内涵很深远叙述很高明总之,值得细细品味16岁男人民日报每日金句摘抄1旗帜决定方向,道路决定命运。2昨天的成功并不代表着今后能够永远成功,过去的辉煌并不意味着未来可以永远辉煌。时代是出卷人,我们是答卷人,人民是阅卷人。3大道至简,实干为要。4同舟共波兰签约购买韩国FA50战机(观察者网讯)据美国防务新闻(DefenseNews)网站报道,波兰国防部已签署2份合同,将从韩国购买48架FA50轻型攻击机,预计首批12架在明年交付,其余36架飞机将在2025U20亚洲杯预赛中国队0比1小负沙特两队齐进亚洲杯正赛16强北京时间9月19日凌晨两点,在沙特进行的U20亚洲杯预赛A组的最后一场中国U19国家队和东道主沙特阿拉伯U19国家队的比赛,正式打响。上半场结束前,沙特队利用角球机会,由苏莱曼打入10!亚洲第6太强了,3连胜头名晋级,中国队输球庆祝拿6分出线北京时间9月19日凌晨,U20亚洲杯预选赛迎来一场焦点战,中国U19国青最终01负于沙特国青,积分定在6分,排名小组第二,净胜球比其他5个小组第二多,所以依然可以以其中一个成绩最好最弱斗牛士逆袭夺冠,西班牙男篮力破法国,加索尔兄弟后继有人男篮欧锦赛终于迎来火星撞地球,这届出战欧锦赛的西班牙球员,被很多人称为最差一批,除了加索尔兄弟离开,球队也在经历一定的新老交替,引进归化球员布朗也是无奈之举,但西班牙诠释了姜还是老移动老用户,披露中国移动一点不广为人知的秘密!有图有真相强烈谴责通讯行业那些为了达到自己的销售目标,而不择手段的方式!(9月11日)事情的开始是由于2022年9月11日,下午时间当我得知我儿子使用的中国移动电话号码(1877358),因苹果公布iPhone14全球发售场景,iPhone13惭愧价崩沦为白菜机据ITHome报道,苹果表示,iPhone14搭载了全新的双摄像头系统和全新的原装深前置摄像头,与以往相比实力更强的iPhone14Pro和iPhone14ProMax新设计引入了iPhone14黄牛党遇上杀猪盘,乐呵了无数吃瓜网友头号周刊iPhone14发售至今已经超过一周了,有不少人喷它毫无新意,比如乔布斯的女儿就是这样直言不讳的怒斥。也有人说灵动岛的设计是UI交互界的颠覆性创新,但同时某些曾在手机圈深耕
主持人王冠上初中一个月赚8000,和李咏做搭档,37岁仍然未婚文丨柠一编辑丨娱阿姨在央视团建类综艺你好,生活里,有一个向最亲的人喊话的环节。轮到主持人王冠时,她对着天空大喊妈妈,我一定会结婚的。言下之意就是妈妈,你不要再催婚了。王冠本来只是借国家一级演员村里因病去世,享年90岁,官方发讣告透露丧礼细节6月30日,据圈内博主透露,国家一级演员村里(原名周存礼)于6月29日去世,享年90岁。村里曾主演陈奂生上城咱爸咱妈荷花淀的故事等,曾任河北话剧院艺委会副主任,1985年任河北电影黄家杰被双开九江市政府原副秘书长市商务局原党委书记局长黄家杰严重违纪违法被开除党籍开除公职日前,经中共九江市委批准,市纪委市监委对市政府原副秘书长市商务局原党委书记局长黄家杰严重违纪违法问题进全自动压面机不同价位有什么区别,赵师傅带你深入了解,避免入坑开早餐店,早餐设备是必不可少的,有的人为了安全用的都是这种全自动压面机,也有的是大批量做包子,用包子机做包子,或者馒头机大批量的做馒头,现实中我们都能见到这种全自动压面机。不同的压25岁央视女主持张舒越又开挂!成为北大研究生,颜值不输高圆圆曝央视主持张舒越成北大研究生6月28日。根据中传艺术社媒账号发布的内容显示,央视年轻的节目主持人张舒越,竟然考上了北京大学的MFA。不仅考上了MFA(研究生),而且成绩还名列前茅,速溶咖啡的危害,速溶咖啡喝多了会怎样?到底有没有危害咖啡,被称之为世界三大饮料之一,而咖啡的冲煮方式也是多种多样的,手冲咖啡虹吸壶土耳其壶发展到现代的全自动咖啡机,而在如今快节奏生活里,速溶咖啡,在价格及便利程度上来看,绝对是大多数逆转夺冠!李亚杰斩获1米板金牌,起跳高度太绝,难度征服所有人6月30日,国际泳联布达佩斯世锦赛,女子1米板决赛落下帷幕,最终中国队选手李亚杰以总分300。85分,夺得金牌,截止到目前为止,中国队包揽所有跳水项目的金牌,展现出了十足的统治力。3名80后,同日被查6月29日12点,浙江省纪委监委网站同时发布中国人寿财险分公司支公司4人被查的消息。记者注意到,4人中,有3人是80后另一人则是两个月前刚刚退休,具体如下中国人寿财产保险股份有限公称猪比中国人吃得多后经济学人删除不当推文本意绝不是要引起分歧(观察者网讯)在一片批评声中,英国杂志经济学人6月29日对引发众怒的文章内容做出修改,并删除了相关推文。该杂志此前曾将猪和中国人做类比,声称猪比中国人吃得多,众多网友痛斥此举是种族一生丁克,不和成龙合作,称死后捐出56亿财产的周润发如今怎样了多年前,医生告诉周润发,以她妻子的身体状况,想要孩子是非常困难的。周润发听到后,脑子嗡的一下,但没几分钟便缓了过来。因为还要振作起来安慰一旁的妻子。他对妻子笑着说没孩子也不要紧,以同是演村姑,把孙俪热依扎和刘亦菲等30代女星放一起,差距出来了由金牌导演郑小龙操刀赵丽颖主演的电视剧幸福到万家开播啦!郑导85花的组合竟然不是拍古装剧,而是走起了接地气的乡土风,这组合多少让人有些意外。究竟是不是王炸,大家可以拭目以待。当红小
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网