如果乙個tcp連線長期沒有資料傳輸,tcp可以通過keep alive機制來控制和斷開連線。
在設定之前我們先來看看keepalive都支援哪些設定項
keepalive預設情況下是關閉的,可以被上層應用開啟和關閉
tcp_keepalive_time: keepalive的空閒時長,或者說每次正常傳送心跳的週期,預設值為7200s(2小時)
tcp_keepalive_intvl: keepalive探測包的傳送間隔,預設值為75s
tcp_keepalive_probes: 在tcp_keepalive_time之後,沒有接收到對方確認,繼續傳送保活探測包次數,預設值為9(次)
開啟tcp keepalive需要通過應用層序開啟socket的keepalive功能。而keepalive的三個引數既可以通過系統命令sysctl進行設定,也可以通過設定socket屬性進行設定。
# 'keep':
# set tcp keep-alive options
cnt = self._plugin.config["keep"]["cnt"]
intvl = self._plugin.config["keep"]["intvl"]
idle = self._plugin.config["keep"]["idle"]
self._client.set_keep_alive(cnt, intvl, idle)
在linux核心設定
keepalive預設不是開啟的,如果想使用keepalive,需要在你的應用中設定so_keepalive才可以生效。
檢視當前的配置:
cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_intvl
cat /proc/sys/net/ipv4/tcp_keepalive_probes
在linux中我們可以通過修改 /etc/sysctl.conf 的全域性配置:
net.ipv4.tcp_keepalive_time=7200
net.ipv4.tcp_keepalive_intvl=75
net.ipv4.tcp_keepalive_probes=9
新增上面的配置後輸入sysctl -p
使其生效,你可以使用sysctl -a | grep keepalive
命令來檢視當前的預設配置
如果應用中已經設定so_keepalive
,程式不用重啟,核心直接生效
ps:這篇博文有乙個簡單的例子來說明 tcp keep-alive 的機理
網路設定的一些說明
Vlan相關知識雜記
劃分vlan的目的 很多人還真就以為劃分vlan的目的就是為了隔離不同vlan不讓他們互訪 其實這是非常多人的誤區,當然這可以通過acl做到,但並不是劃分vlan的目的,這個最多可以理解成這是劃分vlan之後的一種應用並不是最終目的 其實劃分vlan的目的就兩個 1.提高安全性 舉個例子 沒有劃分v...
spark相關知識雜記
工作中經常用到hadoop和spark的相關操作,大資料的知識點很多,想要全部掌握爛熟於心很困難,將一些比較重要或經常忘記的點記錄一下 1.saprk與hadoop的關係 hadoop是乙個完善的大資料生態系統,包含了底層的檔案系統hdfs,計算引擎mapreduce,大資料查詢引擎hive,實時流...
網路協議相關
應用層 telnet pop 郵件 http 表示層會話層 傳輸層 tcp udp 網路層 ip icmp 鏈路診斷 arp 為鏈路層獲得目標位址的mac位址 dhcp 動態位址配置協議,不用管理員配位址 nat translator,位址轉換,私有位址對外的轉換,節約位址和網路安全考慮ipv6也有...