TCP 的 keeplive保活机制
在一般情况下,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保活机制相关推荐
- 网络协议:TCP保活机制和Nagle算法
一 Nagle算法背景 有时候,我们可能会遇到一些很小的分组,比如,20字节的IP首部,20字节的TCP首部和1字节的数据,如果很多这样的小分组数据,在局域网一般不会出现拥塞,但是在广域网就可有可能. ...
- TCP握手机制、TCP长连接和短连接、TCP 保活机制 、心跳机制
参考: https://www.cnblogs.com/Andya/p/7272462.html 1. TCP连接(3次握手建立连接.4次挥手关闭连接) 当网络通信时采用TCP协议时,在真正的读写操作 ...
- TCP保活机制(KeepAlive)
TCP保活机制 如果两端的 TCP 连接一直没有数据交互,达到了触发 TCP 保活机制的条件,那么内核里的 TCP 协议栈就会发送探测报文. 如果对端程序是正常工作的.当 TCP 保活的探测报文发送给 ...
- 如果客户端不发送数据,什么时候才会断开处于 ESTABLISHED 状态的连接?(TCP保活机制和心跳包)
TCP 的 保活机制(KeepAlive机制).这个机制的原理是这样的: 定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个「探测报文」 ...
- TCP超时与重传机制
TCP超时与重传机制 TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时与重传机制.其基本原理:在发送一个数据之后,就开启一个定时器 ...
- 高效 保活长连接:手把手教你实现 自适应的心跳保活机制
前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 1. ...
- android 心跳 简书,如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制...
前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 示意 ...
- 长连接-心跳保活机制
前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 1. ...
- TCP协议的KeepAlive机制与HeartBeat心跳包
原文地址:http://www.nowamagic.net/academy/detail/23350382 心跳包 很多应用层协议都有HeartBeat机制,通常是客户端每隔一小段时间向服务器发送一个 ...
- TCP连接探测中的Keepalive和心跳包. 关键字: tcp keepalive, 心跳, 保活
1. TCP保活的必要性 1) 很多防火墙等对于空闲socket自动关闭 2) 对于非正常断开, 服务器并不能检测到. 为了回收资源, 必须提供一种检测机制. 2. 导致TCP断连的因素 如果网络正常 ...
最新文章
- Keil中使用宏编译来定义DEBUG输出
- java display html_css html布局之display属性_动力节点Java学院整理
- latin1_swedish_ci gbk_chinese_ci
- mysql定义外键_MySQL定义外键的方法
- XScroll.js更新:加入交错切换效果,附思路
- 噪声dba是什么单位_在职DBA : 工作多年为什么还是选择报读工商管理博士
- 返乡置业?多数人将掉入陷阱
- Windows异常学习笔记(二)—— 内核异常处理流程用户异常的分发
- 其实,人的核心职场时间是有限的,一定要和高手玩
- 探究Jvm源码实现-MarkWord
- EnforceLearning-主动强化学习
- Spring MVC竟然有5种参数绑定的方式?你知道几种?
- ARM和NEON指令 very nice
- 计算机应用基础精品课程申报表,《计算机应用基础》精品课程申报书(修改意见)...
- c matlab.h,用matlab和c写程序,include的mex.h在哪里?
- 【数论】Concatenated Multiples【codeforces-Round #506-div3-D】
- 华硕Chromebox-cn 62+i7-5500 U+HD 5500
- 【蓝桥杯嵌入式】【HAL库】九、DAC实验
- cypress——前端自动化测试框架
- 【kali】34 WEB渗透——扫描工具w3af_console