博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
监测CentOS下TCP断线
阅读量:7078 次
发布时间:2019-06-28

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

TCP正常的断开,通信双方(服务端和客户端)都是能知道的。但是非正常的断开,比如直接拔掉了网线,就只能靠如下两种方法,实现短时间内的检测。一、心跳包机制心跳包机制,是网游设计中的常用机制。从用户层面,自己发包去判断对方连线状态。可以根据情况,很灵活的使用。比如,20秒发送一个最小的数据包(也可以根据实际情况稍带一些其他数据)。如果发送没有回应,就判断对方掉线了。二、利用tcp_keepalive机制利用TCP的机制,通过设置系统参数,从系统层面,监测tcp的连接状态。以下为linux下的方法:1、首先查看系统tcp_keepalive相关参数(centos和Ubuntu)    # sysctl -a|grep tcp_keepalive    显示如下:    net.ipv4.tcp_keepalive_intvl = 75    net.ipv4.tcp_keepalive_probes = 9    net.ipv4.tcp_keepalive_time = 7200    分别说一下这三个参数:    tcp_keepalive_time 参数:    是指TCP发送keepalive消息的频度,默认为7200秒,也就是两个小时。    keepalive_intvl 参数:    当探测没有确认时,重新发送探测的频度。默认是75秒。    keepalive_probes 参数:    在认定连接失效之前,发送多少个TCP的keepalive探测包。默认值是9次。2、修改系统的tcp_keepalive相关参数    在知道以上三个系统参数的定义和作用之后,我们来修改一下这三个参数:    修改/etc/sysctl.conf文件:    # vi /etc/sysctl.conf    在打开的文件中,加入如下三行:    net.ipv4.tcp_keepalive_intvl = 1    net.ipv4.tcp_keepalive_probes = 1    net.ipv4.tcp_keepalive_time = 5    保存文件。3、重启服务器    # reboot    附注:或者临时使系统设置生效也行:# sysctl -p4、修改程序代码部分。    注意:仅仅配置内核参数是不够的,还必须在编程的时候设置套接字的选项,调用函数是    socket.setsockopt(level, optname, value)     示例:    level为SOL_SOCKET的话,选项为SO_KEEPALIVE,值为布尔。    socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, True)      此外还可以设置TCP选项(设置的level为SOL_TCP而不是SOL_SOCKET)覆盖系统全局设置    TCP_KEEPCNT  与tcp_keepalive_probes 对应    TCP_KEEPIDLE 与tcp_keepalive_time 对应    TCP_KEEPINTVL 与tcp_keepalive_intvl 对应

 

转载地址:http://tgpml.baihongyu.com/

你可能感兴趣的文章
ActiveMQ(三)消息机制
查看>>
CentOS yum安装mcrypt详细图解教程
查看>>
我的友情链接
查看>>
FastDFS 安装部署
查看>>
我的友情链接
查看>>
查看命令帮助 help 、man
查看>>
Linux下Squid正向/反向代理配置
查看>>
android sdk 更新代理
查看>>
企业快速开发的优点
查看>>
WIN7 64位系统使用SCRT 7.064位、GNS3以及SCRT与GNS3的关联(一)
查看>>
MONGO_URL
查看>>
监控服务器Nagios之三 监控案例
查看>>
最简单的jdbc程序
查看>>
c#索引器
查看>>
C/C++内存管理 笔记
查看>>
对象数组去重合并
查看>>
Ubuntu 安装网络扫描和嗅探工具 Zenmap
查看>>
云计算与openstack学习(七)
查看>>
SpringMVC视图解析器ViewResovlet问题
查看>>
php 取整
查看>>