在一般情况下,TCP在网路为了避免半连接状态(比如客户端已经掉线服务器还在提供资源),会在长时间没有数据传输时主动关闭连接,但很多应用场景下,如websocket,连接需要一直保持,以便于客户端随时能接收到服务器的消息。只要客户端每隔一段时间向服务器发送一条保活数据,这样服务器就不会主动关闭连接。

为了不影响业务数据,一方会发送与前一个seq相同的数据包,而另一方则会回复同样的ack,如果另一方没有回复,就说明连接有问题。这就是保活的原理。

TCP默认没有数据情况下2小时后发送一次保活消息,在/proc/sys/net/ipv4目录下的 tcp_keepalive_time 文件中可以设置。tcp_keepalive_intvl 文件表示保活消息的间隔,默认是75s,tcp_keepalive_probes 文件表示累计没有收到的回复数算掉线。也可以针对某个socket来设置:

int keeplive = 1; // 打开keepkive属性
int keepidle = 60; // 60s没有数据keeplive激活
int keepinterval = 5; // keeplive间隔5s
int keepcount = 3; // 探测失败尝试次数
setsocket(fd,SOL_SOCKET,SO_KEEPALIVE,(void*)&keeplive,sizeof(keeplive);
setsocket(fd,SOL_SOCKET,SO_KEEPPIDLE,(void*)&keeppidle,sizeof(keeppidle);
setsocket(fd,SOL_SOCKET,SO_KEEPINTVL,(void*)&keepintvl,sizeof(keepintvl);
setsocket(fd,SOL_SOCKET,SO_KEEPCNT,(void*)&keepcount,sizeof(keepcount);

在保活情况中,有三种情况

TCP 的 keeplive保活机制相关推荐

  1. 网络协议:TCP保活机制和Nagle算法

    一 Nagle算法背景 有时候,我们可能会遇到一些很小的分组,比如,20字节的IP首部,20字节的TCP首部和1字节的数据,如果很多这样的小分组数据,在局域网一般不会出现拥塞,但是在广域网就可有可能. ...

  2. TCP握手机制、TCP长连接和短连接、TCP 保活机制 、心跳机制

    参考: https://www.cnblogs.com/Andya/p/7272462.html 1. TCP连接(3次握手建立连接.4次挥手关闭连接) 当网络通信时采用TCP协议时,在真正的读写操作 ...

  3. TCP保活机制(KeepAlive)

    TCP保活机制 如果两端的 TCP 连接一直没有数据交互,达到了触发 TCP 保活机制的条件,那么内核里的 TCP 协议栈就会发送探测报文. 如果对端程序是正常工作的.当 TCP 保活的探测报文发送给 ...

  4. 如果客户端不发送数据,什么时候才会断开处于 ESTABLISHED 状态的连接?(TCP保活机制和心跳包)

    TCP 的 保活机制(KeepAlive机制).这个机制的原理是这样的: 定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个「探测报文」 ...

  5. TCP超时与重传机制

    TCP超时与重传机制    TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时与重传机制.其基本原理:在发送一个数据之后,就开启一个定时器 ...

  6. 高效 保活长连接:手把手教你实现 自适应的心跳保活机制

    前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 1. ...

  7. android 心跳 简书,如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制...

    前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 示意 ...

  8. 长连接-心跳保活机制

    前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 1. ...

  9. TCP协议的KeepAlive机制与HeartBeat心跳包

    原文地址:http://www.nowamagic.net/academy/detail/23350382 心跳包 很多应用层协议都有HeartBeat机制,通常是客户端每隔一小段时间向服务器发送一个 ...

  10. TCP连接探测中的Keepalive和心跳包. 关键字: tcp keepalive, 心跳, 保活

    1. TCP保活的必要性 1) 很多防火墙等对于空闲socket自动关闭 2) 对于非正常断开, 服务器并不能检测到. 为了回收资源, 必须提供一种检测机制. 2. 导致TCP断连的因素 如果网络正常 ...

最新文章

  1. Keil中使用宏编译来定义DEBUG输出
  2. java display html_css html布局之display属性_动力节点Java学院整理
  3. latin1_swedish_ci gbk_chinese_ci
  4. mysql定义外键_MySQL定义外键的方法
  5. XScroll.js更新:加入交错切换效果,附思路
  6. 噪声dba是什么单位_在职DBA : 工作多年为什么还是选择报读工商管理博士
  7. 返乡置业?多数人将掉入陷阱
  8. Windows异常学习笔记(二)—— 内核异常处理流程用户异常的分发
  9. 其实,人的核心职场时间是有限的,一定要和高手玩
  10. 探究Jvm源码实现-MarkWord
  11. EnforceLearning-主动强化学习
  12. Spring MVC竟然有5种参数绑定的方式?你知道几种?
  13. ARM和NEON指令 very nice
  14. 计算机应用基础精品课程申报表,《计算机应用基础》精品课程申报书(修改意见)...
  15. c matlab.h,用matlab和c写程序,include的mex.h在哪里?
  16. 【数论】Concatenated Multiples【codeforces-Round #506-div3-D】
  17. 华硕Chromebox-cn 62+i7-5500 U+HD 5500
  18. 【蓝桥杯嵌入式】【HAL库】九、DAC实验
  19. cypress——前端自动化测试框架
  20. 【kali】34 WEB渗透——扫描工具w3af_console

热门文章

  1. python数据分析收获与心得体会_初次数据分析--我的心得体会
  2. Linux下通过ssh上传、下载文件或者文件夹
  3. 信息系统分析与设计杨选辉_信息系统分析与设计课后题答案(杨选辉)
  4. Multisim14仿真使用汇总
  5. 网页版 html5 斗地主,HTML5版单机斗地主
  6. 谷歌浏览器如何长截屏
  7. python3编写方程计算器_python算法——方程计算器小工具
  8. MDT批量部署服务搭建
  9. JS对大陆车牌照的归属地(省份和城市)加载和显示
  10. 企查查python爬虫实例