当前位置: 首页 > news >正文

TCP连接保活机制

在TCP连接中有一个保活机制,叫做Keep-Alive,用语言描述就是如下:

在保活时间内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔(保活时间间隔),发送一个探测报文,该探测报文包含的数据非常少,如果超过保活探测次数,探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。

就如下图(画图参考了《傻傻分不清的TCP keepalive和HTTP keepalive》):
在这里插入图片描述

在操作系统里边三个变量的相关信息:

概念存放位置sysctl变量
保活时间/proc/sys/net/ipv4/tcp_keepalive_timenet.ipv4.tcp_keepalive_time
保活间隔/proc/sys/net/ipv4/tcp_keepalive_intvlnet.ipv4.tcp_keepalive_intvl
保活探测次数/proc/sys/net/ipv4/tcp_keepalive_probesnet.ipv4.tcp_keepalve_probes

在这里插入图片描述

开启了 TCP 保活,需要考虑以下几种情况:

第一种,对端程序是正常工作的。当 TCP 保活的探测报文发送给对端, 对端会正常响应,这样 TCP 保活时间会被重置,等待下一个 TCP 保活时间的到来。
第二种,对端程序崩溃并重启。当 TCP 保活的探测报文发送给对端后,对端是可以响应的,但由于没有该连接的有效信息,会产生一个 RST 报文,这样很快就会发现 TCP 连接已经被重置。
第三种,是对端程序崩溃,或对端由于其他原因导致报文不可达。当 TCP 保活的探测报文发送给对端后,石沉大海,没有响应,连续几次,达到保活探测次数后,TCP 会报告该 TCP 连接已经死亡。

TCP保活机制默认是关闭的,当我们选择打开时,可以分别在连接的两个方向上开启,也可以单独在一个方向上开启。如果开启服务器端到客户端的检测,就可以在客户端非正常断连的情况下清除在服务器端保留的“脏数据”;而开启客户端到服务器端的检测,就可以在服务器无响应的情况下,重新发起连接。

如果使用 TCP 自身的 keep-Alive 机制,在Linux系统中,最少需要经过 2 小时 11 分 15 秒才可以发现一个“死亡”连接。这个时间是怎么计算出来的呢?其实是通过 2 小时,加上 75 秒乘以 9 的总和。实际上,对很多对时延要求敏感的系统中,这个时间间隔是不可接受的。

http://www.lryc.cn/news/231965.html

相关文章:

  • centos安装mysql8.0.20、tar包安装方式
  • k8s yaml文件含义
  • ProEasy机器人:运动+通讯相关说明
  • Visual Studio Code 配置 C/C++ 开发环境的最佳实践(VSCode + Clangd + CMake)
  • 年产200万件的超级工厂投产!巨头「闭环」汽车电子全产业链
  • 智能穿戴AR眼镜主板方案定制_MTK平台AR智能眼镜PCB板开发
  • 【入门Flink】- 11Flink实现动态TopN
  • 现在做跨境电商还需要全球代理IP吗?全球代理IP哪家靠谱?
  • 微服务的常用组件
  • Android问题笔记四十五:解决SeekBar操作thumb周围产生的圆形阴影/灰色阴影/白色圆圈的解决办法
  • AI从入门到精通,什么是LLMs大型语言模型?
  • 优测云测试平台 | 有效的单元测试(下)
  • CUDA安装
  • 【XTDrone Ubuntu18.04】XTDrone + Ubuntu18.04 + PX4 安装过程
  • 网站使用什么协议比较好
  • 18. 机器学习——集成学习
  • SimaPro生命周期评估建模与碳足迹分析流程
  • 我的项目分享(不喜勿喷)
  • PyTorch:张量与矩阵
  • 传统广电媒体为何选择上云?有何优势?
  • 系列十、堆参数调优
  • sqlite3简单使用
  • 实测文心一言4.0,真的比GPT-4毫不逊色吗?
  • 损失函数——KL散度(Kullback-Leibler Divergence,KL Divergence)
  • 基于springboot的医护人员排班系统 全套代码 全套文档
  • 【YOLOX简述】
  • 一文带你深入浅出Web的自动化测试工具Selenium【建议收藏】
  • Django模版层
  • 同一个IP地址可有不同的写法?
  • 《Effective C++》条款13