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

1.TCP保活的必要性

1)很多防火墙等对于空闲socket自动关闭

2)对于非正常断开

2.导致TCP断连的因素

如果网络正常

3.保活的两种方式:

1)应用层面的心跳机制

自定义心跳消息头

PS:

2)TCP协议自带的保活功能

打开

4.两种方式的优劣性

TCP

由应用自己实现的应用层的心跳

应用层心跳的好处我个人的理解有两点:

一是比较灵活

二是通用

应用层心跳的不好的地方也很显而易见

5.到底选用那种心跳方式?

优劣点第

6.类

keepalive

1)在代码里针对每个

除了

int keepAlive = 1; // 开启keepalive属性. 缺省值: 0(关闭)int keepIdle = 60; // 如果在60秒内没有任何数据交互,则进行探测. 缺省值:7200(s)int keepInterval = 5;// 探测时发探测包的时间间隔为5秒. 缺省值:75(s)int keepCount = 2; // 探测重试的次数. 全部超时则认定连接失效..缺省值:9(次)setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (void*)&keepAlive, sizeof(keepAlive));setsockopt(s, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));setsockopt(s, SOL_TCP, TCP_KEEPINTVL, (void*)&keepInterval, sizeof(keepInterval));setsockopt(s, SOL_TCP, TCP_KEEPCNT, (void*)&keepCount, sizeof(keepCount));

使用时需要

ps: 忍不住吐槽一下, 网上大量毫不负责的转载, 千篇一律的搜索结果, 很多人根本都没进行过任何验证吧. 为了找这么个头文件都费了不小的事. 大多数帖子里的说的都是不可用的.

2)修改配置文件

我们可以用

#cat/proc/sys/net/ipv4/tcp_keepalive_time7200

#cat/proc/sys/net/ipv4/tcp_keepalive_intvl75

#cat/proc/sys/net/ipv4/tcp_keepalive_probes9

修改它们:

#echo60>/proc/sys/net/ipv4/tcp_keepalive_time

#echo5>/proc/sys/net/ipv4/tcp_keepalive_intvl

#echo3>/proc/sys/net/ipv4/tcp_keepalive_probes

链接推荐:

闲说HeartBeat心跳包和TCP协议的KeepAlive机制

TCP Keepalive HOWTO

,让我们从自身的禁锢中放心地飞出去,重新审视自己,

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

相关文章:

你感兴趣的文章:

标签云: