博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP keepalive长连接心跳保活
阅读量:5999 次
发布时间:2019-06-20

本文共 1504 字,大约阅读时间需要 5 分钟。

比如:客户端与服务端进行握手时,经常无法握手成功,收不到回复; 需要建立保活机制。

 

1. 服务端Linux服务器新增系统内核参数配置。

在/etc/sysctl.conf文件中再添加如:

#允许的持续空闲时长,在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测包的间隔,即允许的持续空闲时长,或者说每次正常发送心跳的周期,默认值为7200s(2h)。net.ipv4.tcp_keepalive_time=1800#在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包的发送频率,net.ipv4.tcp_keepalive_intvl=30#在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包次数net.ipv4.tcp_keepalive_probes=3

执行sysctl -p来使它生效:

检测一下是否已经生效:sysctl -a | grep keepalive

2. Java/netty服务器中配置使用

ServerBootstrap bootstrapHttp =new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));bootstrapHttp.setPipelineFactory(new HttpServerPipelineFactory());bootstrapHttp.setOption("child.tcpNoDelay", true);bootstrapHttp.setOption("child.keepAlive", true);bootstrapHttp.bind(new InetSocketAddress(ip, http_port));

3.关闭tcp_timestamps选项

客户在服务端开启了某个端口,但是在客户端telnet确一直不通。通过在服务端抓包发现,客户端的syn分节已经到达,但是服务端并没有应答。

net.ipv4.tcp_tw_recycle选项可能引起这个问题,于是关闭了这个选项,问题果然得以解决。这里分析一下原因。
有些服务器(当然客户端也可以)为了避免TIME_WAIT状态占用连接,希望能加快TIME_WAIT状态的回收,通常将net.ipv4.tcp_tw_recycle选项开启。
当然这个选项的生效要依赖net.ipv4.tcp_timestamps选项的开启。虽然开启这个选项能够加快TIME_WAIT连接的回收,但却引入了另一个问题。我们先看下tcp_tw_recycle选项的工作机制:
当开启了tcp_tw_recycle选项后,当连接进入TIME_WAIT状态后,会记录对应远端主机最后到达分节的时间戳。如果同样的主机有新的分节到达,且时间戳小于之前记录的时间戳,即视为无效,相应的数据包会被丢弃(rfc1323)。
Linux是否启用这种行为取决于tcp_timestamps和tcp_tw_recycle,因为tcp_timestamps缺省就是开启的,所以当tcp_tw_recycle被开启后,实际上这种行为就被激活了

在/etc/sysctl.conf文件中再添加如:

#不检查请求的时间戳

net.ipv4.tcp_timestamps=0

 

转载于:https://www.cnblogs.com/brant/p/9377098.html

你可能感兴趣的文章
DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.Net2.0(ver 3.0.2Beta)
查看>>
如何配置epel源
查看>>
Oracle数据库报错:ORA-00265
查看>>
解决rpm安装包依赖问题的一个方法
查看>>
S2S3H4框架深度集成搭建(1) XmlConfigurationProvider的hashcode的问题
查看>>
Exchange 2013之(四)证书部署
查看>>
nmon监控centos6X,速成!
查看>>
Runtime ClassNotFoundExceptions may result
查看>>
面试总结之 pslow pfast 方法
查看>>
LEXUS OPENCART 自适应主题模板 ABC-0019-01 HIGHLIGHTED FEATURES
查看>>
向左向右向前走的空间转移
查看>>
python 批量修改root密码
查看>>
4.10—4.12 lvm讲解(上中下);4.13 磁盘故障小案例
查看>>
[小项目]行李箱(蓝牙解锁、称重)
查看>>
开源软件的安全性不足?
查看>>
CCNP笔记【EIGRP(1)】
查看>>
Android APP性能优化技巧
查看>>
运维工程师必会的109个Linux命令(5)
查看>>
解决memory leak问题
查看>>
PHP与JSP的比较
查看>>