CentOS下TCP斷線(xiàn)監(jiān)測(cè)詳解
TCP正常的斷開(kāi),通信雙方(服務(wù)端和客戶(hù)端)都是能知道的。但是非正常的斷開(kāi),比如直接拔掉了網(wǎng)線(xiàn),就只能靠如下兩種方法,實(shí)現(xiàn)短時(shí)間內(nèi)的檢測(cè)。
一,心跳包機(jī)制
心跳包機(jī)制,是網(wǎng)游設(shè)計(jì)中的常用機(jī)制。從用戶(hù)層面,自己發(fā)包去判斷對(duì)方連線(xiàn)狀態(tài)??梢愿鶕?jù)情況,很靈活的使用。比如,20秒發(fā)送一個(gè)最小的數(shù)據(jù)包(也可以根據(jù)實(shí)際情況稍帶一些其他數(shù)據(jù))。如果發(fā)送沒(méi)有回應(yīng),就判斷對(duì)方掉線(xiàn)了。
二,利用tcp_keepalive機(jī)制
利用TCP的機(jī)制,通過(guò)設(shè)置系統(tǒng)參數(shù),從系統(tǒng)層面,監(jiān)測(cè)tcp的連接狀態(tài)。以下為linux下的方法:
1,首先查看系統(tǒng)tcp_keepalive相關(guān)參數(shù)(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
分別說(shuō)一下這三個(gè)參數(shù):
tcp_keepalive_time 參數(shù):
是指TCP發(fā)送keepalive消息的頻度,默認(rèn)為7200秒,也就是兩個(gè)小時(shí)。
keepalive_intvl 參數(shù):
當(dāng)探測(cè)沒(méi)有確認(rèn)時(shí),重新發(fā)送探測(cè)的頻度。默認(rèn)是75秒。
keepalive_probes 參數(shù):
在認(rèn)定連接失效之前,發(fā)送多少個(gè)TCP的keepalive探測(cè)包。默認(rèn)值是9次。
--------------------------------------------------------------------
2,修改系統(tǒng)的tcp_keepalive相關(guān)參數(shù)
在知道以上三個(gè)系統(tǒng)參數(shù)的定義和作用之后,我們來(lái)修改一下這三個(gè)參數(shù):
修改/etc/sysctl.conf文件:
# vi /etc/sysctl.conf
在打開(kāi)的文件中,加入如下三行:
net.ipv4.tcp_keepalive_intvl = 1
net.ipv4.tcp_keepalive_probes = 1
net.ipv4.tcp_keepalive_time = 5
保存文件。
--------------------------------------------------------------------
3,重啟服務(wù)器。
# reboot
附注:或者臨時(shí)使系統(tǒng)設(shè)置生效也行:# sysctl -p
--------------------------------------------------------------------
4,修改程序代碼部分。
注意:僅僅配置內(nèi)核參數(shù)是不夠的,還必須在編程的時(shí)候設(shè)置套接字的選項(xiàng),調(diào)用函數(shù)是
socket.setsockopt(level, optname, value)
示例:
level為SOL_SOCKET的話(huà),選項(xiàng)為SO_KEEPALIVE,值為布爾。
socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, True)
此外還可以設(shè)置TCP選項(xiàng)(設(shè)置的level為SOL_TCP而不是SOL_SOCKET)覆蓋系統(tǒng)全局設(shè)置
TCP_KEEPCNT 與tcp_keepalive_probes 對(duì)應(yīng)
TCP_KEEPIDLE 與tcp_keepalive_time 對(duì)應(yīng)
TCP_KEEPINTVL 與tcp_keepalive_intvl 對(duì)應(yīng)
--------------------------------------------------------------------
相關(guān)文章
- 很多朋友在Centos7安裝時(shí)很多細(xì)節(jié)不注意,今天小編將為大家分享Centos7安裝時(shí)注意事項(xiàng)的詳解;希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧2016-12-26
CentOS下如何查看多核負(fù)載?CentOS下查看多核負(fù)載的方法
一些朋友還不知道CentOS下如何查看多核負(fù)載?今天小編將為大家分享CentOS下查看多核負(fù)載的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧2016-12-26CentOS關(guān)閉UseDNS加速SSH登錄的方法
經(jīng)常登陸SSH的朋友可以發(fā)現(xiàn),每次登錄SSH時(shí)總是要停頓等待一下才能連接上,這是因?yàn)镺penSSH服務(wù)器有一個(gè)DNS查找選項(xiàng)UseDNS默認(rèn)情況下是打開(kāi)的。今天小編為大家?guī)?lái)的是Cent2016-12-26
CentOS7上如何借助系統(tǒng)存儲(chǔ)管理器管理LVM卷?
邏輯卷管理器(LVM)是一種極其靈活的磁盤(pán)管理工具,它讓用戶(hù)可以從多個(gè)物理硬驅(qū)創(chuàng)建邏輯磁盤(pán)卷,并調(diào)整大小,根本沒(méi)有停機(jī)時(shí)間;今天小編為大家?guī)?lái)的是CentOS7上借助系統(tǒng)2016-12-26- 一些朋友反饋說(shuō)不知道centos如何快速查找指定類(lèi)型文件并刪除;今天小編將為大家?guī)?lái)centos快速查找指定類(lèi)型文件并刪除的方法,希望可以幫助到大家,有需要的朋友一起去看看2016-12-25
CentOS如何查看當(dāng)前系統(tǒng)下的gcc版本命令?
Linux系統(tǒng)下的Gcc是GNU推出的功能強(qiáng)大、性能優(yōu)越的多平臺(tái)編譯器,是GNU的代表作品之一。今天小編為大家?guī)?lái)的是CentOS查看當(dāng)前系統(tǒng)下的gcc版本命令的方法,有需要的朋友一2016-12-25
今天小編為大家?guī)?lái)的是CentOS支持中文以及ssh支持中文輸入的修改,希望可以幫助到大家,有需要的朋友一起去看看吧2016-12-25- 很多朋友還不知道CentOS下如何備份與還原mbr?今天小編將為大家?guī)?lái)CentOS下備份與還原mbr的方法,有需要的朋友一起去看看吧2016-12-25

CentOS如何設(shè)置網(wǎng)卡成DHCP動(dòng)態(tài)獲取IP?
很多朋友反饋說(shuō)不知道CentOS如何設(shè)置網(wǎng)卡成DHCP動(dòng)態(tài)獲取IP?今天小編將為大家?guī)?lái)CentOS設(shè)置網(wǎng)卡成DHCP動(dòng)態(tài)獲取IP的方法,一起去看看吧2016-12-23- 今天小編為大家?guī)?lái)的是CentOS查看各種服務(wù)信息命令詳解;希望可以幫助到大家,有需要的朋友一起去看看吧2016-12-23




