CentOS下TCP断线监测详解

  发布时间:2016-12-26 11:40:42   作者:佚名   我要评论
TCP正常的断开,通信双方(服务端和客户端)都是能知道的。但是非正常的断开呢?该如何解决?今天小编为大家带来的是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安装时很多细节不注意,今天小编将为大家分享Centos7安装时注意事项的详解;希望对大家会有帮助,有需要的朋友一起去看看吧
    2016-12-26
  • CentOS下如何查看多核负载?CentOS下查看多核负载的方法

    一些朋友还不知道CentOS下如何查看多核负载?今天小编将为大家分享CentOS下查看多核负载的方法,希望对大家会有帮助,有需要的朋友一起去看看吧
    2016-12-26
  • CentOS关闭UseDNS加速SSH登录的方法

    经常登陆SSH的朋友可以发现,每次登录SSH时总是要停顿等待一下才能连接上,这是因为OpenSSH服务器有一个DNS查找选项UseDNS默认情况下是打开的。今天小编为大家带来的是Cent
    2016-12-26
  • CentOS7上如何借助系统存储管理器管理LVM卷?

    逻辑卷管理器(LVM)是一种极其灵活的磁盘管理工具,它让用户可以从多个物理硬驱创建逻辑磁盘卷,并调整大小,根本没有停机时间;今天小编为大家带来的是CentOS7上借助系统
    2016-12-26
  • centos快速查找指定类型文件并删除的方法

    一些朋友反馈说不知道centos如何快速查找指定类型文件并删除;今天小编将为大家带来centos快速查找指定类型文件并删除的方法,希望可以帮助到大家,有需要的朋友一起去看看
    2016-12-25
  • CentOS如何查看当前系统下的gcc版本命令?

    Linux系统下的Gcc是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。今天小编为大家带来的是CentOS查看当前系统下的gcc版本命令的方法,有需要的朋友一
    2016-12-25
  • CentOS支持中文和ssh支持中文输入的修改

    今天小编为大家带来的是CentOS支持中文以及ssh支持中文输入的修改,希望可以帮助到大家,有需要的朋友一起去看看吧
    2016-12-25
  • CentOS下如何备份与还原mbr?

    很多朋友还不知道CentOS下如何备份与还原mbr?今天小编将为大家带来CentOS下备份与还原mbr的方法,有需要的朋友一起去看看吧
    2016-12-25
  • CentOS如何设置网卡成DHCP动态获取IP?

    很多朋友反馈说不知道CentOS如何设置网卡成DHCP动态获取IP?今天小编将为大家带来CentOS设置网卡成DHCP动态获取IP的方法,一起去看看吧
    2016-12-23
  • CentOS查看各种服务信息命令详解

    今天小编为大家带来的是CentOS查看各种服务信息命令详解;希望可以帮助到大家,有需要的朋友一起去看看吧
    2016-12-23

最新评论