CentOS下TCP断线监测详解
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 -p
--------------------------------------------------------------------
4,修改程序代码部分。
注意:仅仅配置内核参数是不够的,还必须在编程的时候设置套接字的选项,调用函数是
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 对应
--------------------------------------------------------------------
相关文章
- 很多朋友在Centos7安装时很多细节不注意,今天小编将为大家分享Centos7安装时注意事项的详解;希望对大家会有帮助,有需要的朋友一起去看看吧2016-12-26
CentOS下如何查看多核负载?CentOS下查看多核负载的方法
一些朋友还不知道CentOS下如何查看多核负载?今天小编将为大家分享CentOS下查看多核负载的方法,希望对大家会有帮助,有需要的朋友一起去看看吧2016-12-26- 经常登陆SSH的朋友可以发现,每次登录SSH时总是要停顿等待一下才能连接上,这是因为OpenSSH服务器有一个DNS查找选项UseDNS默认情况下是打开的。今天小编为大家带来的是Cent2016-12-26
- 逻辑卷管理器(LVM)是一种极其灵活的磁盘管理工具,它让用户可以从多个物理硬驱创建逻辑磁盘卷,并调整大小,根本没有停机时间;今天小编为大家带来的是CentOS7上借助系统2016-12-26
- 一些朋友反馈说不知道centos如何快速查找指定类型文件并删除;今天小编将为大家带来centos快速查找指定类型文件并删除的方法,希望可以帮助到大家,有需要的朋友一起去看看2016-12-25
- Linux系统下的Gcc是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。今天小编为大家带来的是CentOS查看当前系统下的gcc版本命令的方法,有需要的朋友一2016-12-25
- 今天小编为大家带来的是CentOS支持中文以及ssh支持中文输入的修改,希望可以帮助到大家,有需要的朋友一起去看看吧2016-12-25
- 很多朋友还不知道CentOS下如何备份与还原mbr?今天小编将为大家带来CentOS下备份与还原mbr的方法,有需要的朋友一起去看看吧2016-12-25
- 很多朋友反馈说不知道CentOS如何设置网卡成DHCP动态获取IP?今天小编将为大家带来CentOS设置网卡成DHCP动态获取IP的方法,一起去看看吧2016-12-23
- 今天小编为大家带来的是CentOS查看各种服务信息命令详解;希望可以帮助到大家,有需要的朋友一起去看看吧2016-12-23
最新评论