范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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通信双方长时间没有进行数据传输,这也会浪费系统和网络资源。
  相关视频推荐
  Tcp/ip协议栈技术专题训练营(1)
  Tcp/ip协议栈技术专题训练营(2)
  100行代码实现tcp/ip协议栈,自行准备好Linux系统
  需要C/C++ Linux服务器架构师学习资料加qun 812855908 获取(资料包括 C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg 等),免费分享
  五 长连接/短连接的应用场景长连接一般多用于需要频繁进行读写操作,点对点通讯,而且连接数不太多的情况。
  例如:数据库的连接通常使用长连接,如果用短连接的话,频繁的TCP socket创建和关闭,会造成socket错误,也是对资源的一种浪费。 短连接一般用于不需要频繁进行读写操作,并且连接数很大的情况下。
  例如:web网站的http服务一般都用短连接。因为长连接对于服务器来说是要耗费一定的系统资源的,像web网站服务,通常会有大量的客户端连接请求,并发连接量大,使用短连接会更节省系统资源,能够及时响应客户请求。
  总结:长连接和短连接的选择要具体需求、实际情况而定。 六 长连接的保活机制
  对于TCP长连接,当通信双方在没有数据传输的时候,如何保持TCP连接一直处于"保活(KeepAlive)"状态,这是一个必须要解决的问题。
  在Linux系统中,我们可以使用 netstat、lsof等命令可以查看TCP连接是否处于"ESTABLISHED"状态。 6.1 TCP保活的必要性
  (1)很多防火墙会主动关闭空闲的socket。
  (2)可能出现的非正常断连,服务器并不能检测到,为了回收已断连的socket资源,必须提供一种检测机制。
  导致TCP非正常断连的可能原因:
  (1)网络故障
  (2)客户端/服务端一侧突然断电或者进程崩溃 6.2 保活机制的方式
  6.2.1 应用层的心跳机制
  在应用层中使用心跳(heartbeat)机制来主动检测。具体做法:当TCP连接建立成功后,客户端开启一个定时任务,定时对已经建立连接的对端发送一个心跳请求消息,服务器收到该心跳消息后,返回一个心跳应答消息。如果在超时时间内没有收到服务器的应答消息,则重发心跳请求消息,如果客户端持续多次没有响应,客户端则可以认为该TCP连接不可用,主动断开连接。当然,也可以是服务器端主动发送心跳请求消息给客户端。
  6.2.2 TCP协议自带的保活机制
  Linux内核自带的保活机制keep-alive。使用的时候只需要打开keep-alive功能即可。
  TCP的Keepalive机制的作用是在于探测连接的对端是否存活。
  工作原理:TCP keep-alive是通过在空闲时发送TCP Keep-Alive数据包,然后对方回应TCP Keep-Alive ACK来实现的。
  在socket网络编程中,需要设置一个socket选项 SO_KEEPALIVE,才能开启keepalive机制。代码描述如下: keepAlive = 1;   setsockopt(listen_fd, SOL_SOCKET, SO_KEEPALIVE, &keepAlive, sizeof(keepAlive));
  在Linux的keepalive机制中,有3个重要的内核参数:tcp_keepalive_time、tcp_keepalive_probes 和 tcp_keepalive_intvl。 tcp_keepalive_time:表示TCP连接闲置多长时间后开始发送探测报文。(单位:秒) tcp_keepalive_probes:表示一次探测过程中最多可以重发探测报文的次数。(没有收到确认时重发次数) tcp_keepalive_intvl:表示前一个探测报文和后一个探测报文之间的时间间隔。(即超时重传的时间间隔)(单位:秒)
  这些内核参数可以在/proc/sys/net/ipv4/目录下可以看到,也可以使用Linux命令查看其默认值: # sysctl -a |grep keepalive net.ipv4.tcp_keepalive_intvl = 75 net.ipv4.tcp_keepalive_probes = 9 net.ipv4.tcp_keepalive_time = 7200
  可以看到,这3个内核参数的默认值分别为:
  tcp_keepalive_time = 7200秒,即2小时。也就是说,从最后一次数据传输结束开始计时起到发送第一个保活探测报文的时间间隔为2小时。
  tcp_keepalive_probes = 9。当没有收到对方的确认时,继续发送保活探测报文的默认次数为9次。
  tcp_keepalive_intvl = 75秒。当没有收到对方的确认时,继续发送保活探测报文的间隔时间为75秒。
  TCP连接探活的过程 :
  开启 keepalive后,如果2小时内在此TCP连接的通信双方没有发生数据交换,TCPT就自动给对方发一个保活探测报文段(keepalive probe)。这是一个对方必须响应的TCP报文段。
  它会导致以下三种情况: 对方成功接收,连接正常:以期望的ACK报文段响应。2小时后,TCP将发出另一个探测报文。 对方已崩溃且已重新启动:已RST报文段响应。socket的待处理错误被置为ECONNRESET,socket本身则被关闭,断开TCP连接。 对方无任何响应:发送保活探测报文的一方,相隔75秒后,再次重发保活探测报文,重发8次,一共尝试9次。若仍无响应就放弃。socket的待处理错误被置为ETIMEOUT,socket本身则被关闭,断开TCP连接。
  设置TCP keepalive
  上面提到的 TCP keepalive使用的是其默认值。如果我们不想使用这么长的等待时间,可以修改Linux内核关于网络方面的配置参数。我们可以自定义那3个内核参数的值,有两种修改方式:
  (1)全局设置(操作系统层面)
  (2)针对单个TCP连接设置(应用程序层面)
  1、全局设置
  在Linux系统中,我们可以通过修改  /etc/sysctl.conf  配置文件的全局配置: net.ipv4.tcp_keepalive_time=300  net.ipv4.tcp_keepalive_intvl=30   net.ipv4.tcp_keepalive_probes=5
  添加上面的配置后,输入:sysctl -p 使其生效。
  这种方法设置的全局内核参数,针对整个操作系统生效,对单个socket的设置不够友好。
  2、针对单个TCP连接的设置
  我们可以在socket网络编程中设置TCP的  TCP_KEEPCNT  、 TCP_KEEPIDLE  、 TCP_KEEPINTVL   这3个socket选项。
  这三个选项的定义,可以通过man 命令查看。
  man 7 tcp
  TCP_KEEPCNT (since Linux 2.4)
  The maximum number of keepalive probes TCP should send before dropping the connection. This option should not be
  used in code intended to be portable.
  关闭一个非活跃连接之前的最大重试次数。 该选项不具备可移植性。
  TCP_KEEPIDLE (since Linux 2.4)
  The time (in seconds) the connection needs to remain idle before TCP starts sending keepalive probes, if the
  socket option SO_KEEPALIVE has been set on this socket. This option should not be used in code intended to be
  portable.
  设置连接上如果没有数据发送的话,多久后发送keepalive探测报文,单位是秒。该选项不具备可移植性。
  TCP_KEEPINTVL (since Linux 2.4)
  The time (in seconds) between inpidual keepalive probes. This option should not be used in code intended to be
  portable.
  前后两次探测报文之间的时间间隔,单位是秒。该选项不具备可移植性。
  代码层面的设置步骤如下: int keepAlive = 1;    // 非0值,开启keepalive属性   int keepIdle = 60;    // 如该连接在60秒内没有任何数据往来,则进行此TCP层的探测   int keepInterval = 5; // 探测发包间隔为5秒   int keepCount = 3;    // 尝试探测的最多次数   //开启tcp-keepAlive探活机制 setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &keepAlive, sizeof(keepAlive));   setsockopt(sockfd, SOL_TCP, TCP_KEEPIDLE, &keepIdle, sizeof(keepIdle));   setsockopt(sockfd, SOL_TCP, TCP_KEEPINTVL, &keepInterval, sizeof(keepInterval));   setsockopt(sockfd, SOL_TCP, TCP_KEEPCNT, &keepCount, sizeof(keepCount);
  6.2.3 TCP Keepalive 常见异常
  启用TCP Keepalive 的应用程序,一般可以捕获到下面几种类型的错误: ETIMEOUT 超时错误
  在发送一个探测报文段后经过(tcpkeepaliveTime + tcpkeepaliveIntvl * tcpkeepaliveProbes)时间后仍然没有接收到ACK确认报文段的情况下触发的异常,套接字被关闭:Connection timedout。 EHOSTUNREACH 主机不可达错误
  这个是网络层的ICMP汇报给上层应用的异常错误:No route to host。
  6.2.4 TCP Keepalive 和 应用层 heartbeat 优缺点
  1、TCP协议的 Keepalive 机制
  优点:TCP协议的Keepalive机制由系统内核实现,上层应用程序只需要处理数据的收发,连接异常通知即可,这就减少了应用层代码的复杂度,内核层面的计时器相比应用层,更为高效。
  缺点:第一,TCP keepalive机制,位于传输层,由操作系统负责,只能检测到连接是否存活,但不能检测检测连接是否可用。例如,服务器因为某种原因导致负载超高,CPU使用率达到了100%,无法继续响应任何业务请求,但是TCP探针却仍能确定连接状态,这就是典型的连接活着但是服务已死的状态。对于客户端而言,这时最好的选择就是断开连接重新连接到其他服务器上,而不是一直认为当前服务器仍处于可用状态,一直向当前服务器发送那些必然会失败的请求。
  第二,TCP keepalive机制 对于连接异常断开的情况不能及时有效地监测到。如果TCP连接的某一方突然异常断开连接,这个时候发送方并不知道对端已经掉线。而此时,如果有数据发送失败,tcp会自动进行超时重传,而重传报文段的优先级是要高于keepalive的探测报文段的,导致探测报文段总是不能发送出去,直到经过较长时间的重传之后,我们才会知道。
  2、应用层的HeartBeat 机制
  优点:第一,具有更好的灵活可控性。可以控制心跳的监测时机、间隔和流程,甚至可以在心跳包上附带额外信息,最重要的是不光可以检测连接是否存在,还可以检测到连接是否可用,而TCP的keepalive机制只能提供简单的检活功能。
  第二,具有通用性。应用层的心跳不依赖传输层协议,如果有一天不用TCP要改用UDP了,传输层不提供心跳机制了,但是你应用层的心跳机制依然可以使用,只需做少许改动就可以继续使用。
  缺点:第一,需要开发人员自己实现,增加软件开发的工作量,由于应用特定的网络框架,还可能增加代码结构的复杂度。
  第二,应用层心跳的流量消耗会更大,毕竟这本质上还是一个普通的数据包。

江苏2大爷30年前比存酒,1人存汾酒,另一人存茅台,如今双双落败江苏2大爷30年前比存酒,1人存汾酒,另一人存茅台,如今双双落败上世界50年代后有什么事情备受瞩目?当属白酒行业的复兴,国家对于白酒的重视有目共睹,曾为了行业振兴大力开展全国评酒会大运河焕发时代新风貌北京城市副中心运河文化保护的探索实践京杭大运河京冀游船互联互通,标志着北京市第一次出现了跨省际航道和跨省际水上旅游运输,为京津冀协同发展注入新活力。新华社发在北运河北关分洪枢纽西岸,一座重檐叠角雕梁画栋的雄伟建筑,巍信仰是蒲公英,在任何角落生根发芽开出希望的花北京永定天主堂疫情这两年来,城里的教堂一直没对外开放。就连西北旺天主堂也是大门紧闭。从一开始产生想写写北京教堂的想法,就一直在艰难的时光中度日。教堂不开,清真寺不开,寺庙道观不开,博物馆也不开后北京大学,投了自家教授北京大学科技成果转化基金,聚焦高端硬技术领域,致力于推动科技成果转化,助力国家创新能力提升。如今,高校也开始频繁踏入创投圈。近日,GaN基第三代半导体企业中博芯完成首轮融资。该企业小遇挑战!女排全锦赛天津3比1力挫北京,王宝泉率队夺第2胜北京时间9月22日消息,2022年全国女子排球锦标赛在福建漳州展开第五日争夺。小组循环赛,王宝泉挂帅的天津女排以3比1力挫初辉执教的北京女排,目前的战绩为2胜2负。本届女排全锦赛,炖羊肉时,牢记3放3不放,炖好后肉香汤鲜,浓白无膻味,好喝各位读者朋友们大家好,感谢阅读我分享的美食文章,经验和大家一起共享,今天我要和大家分享的内容是天冷炖羊肉,牢记3放3不放,炖好后肉香汤鲜,浓白无膻味,好喝!马上就是秋分了,天气变得驻约翰内斯堡总领事走访约堡桑顿警局共商保障华社安全等议题中国侨网9月23日电据中国驻约翰内斯堡总领馆网站消息,9月21日,驻约翰内斯堡总领事唐中东一行走访约堡桑顿警局,会见了警局局长EGENMOODLEY,双方就深化务实合作预防暴力犯罪我的理性生活我感觉我被绑架了,一是让自律所圈禁,从来没有像如今这个社会如此倡导人们要自律,所谓越自律,越优秀,越成功云云。二是被规则所束缚,到处是规则,到处是监控,连说话都怕了,我不知道制定规一男子深夜偷偷摸摸看成人网站,发现自己居然是男主角白天工作忙,一晃很快就过去了,可是到了夜深人静的晚上一些孤独寂寞冷的男生会通过各种渠道找异性聊天,甚至看一些不良视频。老公的发小毛蛋,离婚三年了,到现在一直没娶,对象倒是不缺。前些(体育)打出训练水平信心提升很多中国女篮队员谈世界杯首战新华社悉尼9月22日电(岳东兴刘诗月)22日在女篮世界杯首场帮助球队以10744大胜韩国队后,中国女篮队长杨力维和中锋韩旭接受了新华社专访。她们表示,坚决执行教练意图是本场获胜关键危机升级!美联储暴力加息!人民币汇率大幅贬值!中国有何影响?昨天美联储的靴子落地了,之前市场预期加息75个基点,这次没有出意外,但尽管如此,全球金融市场也随之出现了巨大震荡。美联储加息75个基点,靴子落地这次美联储宣布加息75个基点,联邦基
民革广东省委会聚焦三农建言献策三农是民革参政议政的传统优势和重点领域。民革广东省委会高度重视三农领域的参政议政工作,近年在种业发展粮食安全农业科技创新休闲农业农村环境整治等方面形成了一批高质量有影响力的成果,多浙江率先打造行政裁决数字化系统自2020年3月被国家知识产权局确定为专利侵权纠纷行政裁决示范建设试点单位以来,浙江省市场监督管理局(知识产权局)加强顶层设计,积极创新举措,借助浙江知识产权在线平台,精心打造专利苹果劲敌!三星GalaxyS23系列发布,三款机型有啥区别?三星GalaxyS23系列正式在全球市场发布,主打新一代高端机皇定位,配置和价格都与iPhone14系列针锋相对。作为安卓阵营最强机皇,新品是否会对苹果构成威胁,三款机型都有何区别胡鑫宇事件引发的思考胡鑫宇事件,由最初的失联到现在的确定死亡,吸引众人关注,主要关注热点是胡鑫宇究竟是自缢还是被害。大家更应该重视的是审视我们的教育本质,我们的孩子来到这个世界,需要什么样的教育?教育72岁的张艺谋尽管岳母比自己小了11岁,给她尽孝也能坦然我不敢说自己是中国最好的导演,却是中国最勤奋的导演。张艺谋曾这样评价自己。细数自1987年,张艺谋导演了第一部影片红高粱开始,他便保持着一年至两年上映一部新作品的速度至今。在此期间慢直播一起来线上行头桥摸石狮明清时期就有文字记载的行彩桥,是春节过后元宵节前揭阳市一项隆重的节庆活动,每年正月十一,正是榕城区石狮桥最热闹的时候,数以万计的市民,扶老携幼呼朋引伴,一起行头桥摸石狮,祈愿新年幸造孽啊,拍出九转大肠的综艺整个都很荒唐!图源一出好戏真的很荒谬,谁能想到2023年第一个让全网久久无法忘怀反复回味的梗,会是九转大肠。几天前,东方卫视老综艺顶级厨师中的一个片段,被人翻了出来。节目里头,一位本名俞涛外号小因为一包盐,她离婚了01hr哄了一个多小时,徐鸥才终于把这磨人的孩子哄睡了,她连外套都顾不得穿,就匆忙踏拉着拖鞋下了楼,她必须趁孩子醒之前回来。到楼下的小超市买了包盐,她不敢停留就赶紧回家,回来的时候二胎政策放开后的七年之痒头条创作挑战赛最近四川发布了一份有关生育服务管理的文件,简单来说就是给想生孩子的人拉开了一条道德上的口子,砖家们更是叫嚣着大家一路小跑的去多生孩子,要积极响应号召才是听话的小可爱,比亚迪出海的产品ATTO3,居然能获得反华媒体的好评?比亚迪披露业绩预告。公司预计2022年盈利160170亿元,比上年同期上升425。42458。26。公司2022年预计年度营业收入突破4,200亿元。很显然,比亚迪从2008年甚至恩比德没进全明星首发一点不冤,奥尼尔当年比他冤多了北京时间1月27日,NBA公布了2023年全明星东西部的首发阵容名单,公布后引起最大争议的话题就是恩比德落选了东部首发阵容,有许多人为他鸣不平,毕竟恩比德是目前阶段的得分王常规赛M