您好,登錄后才能下訂單哦!
本篇內容主要講解“CentOS下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 對應
--------------------------------------------------------------------
到此,相信大家對“CentOS下TCP斷線監測機制詳解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。