TCP 的 keeplive保活机制
生活随笔
收集整理的這篇文章主要介紹了
TCP 的 keeplive保活机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在一般情況下,TCP在網路為了避免半連接狀態(比如客戶端已經掉線服務器還在提供資源),會在長時間沒有數據傳輸時主動關閉連接,但很多應用場景下,如websocket,連接需要一直保持,以便于客戶端隨時能接收到服務器的消息。只要客戶端每隔一段時間向服務器發送一條保活數據,這樣服務器就不會主動關閉連接。
為了不影響業務數據,一方會發送與前一個seq相同的數據包,而另一方則會回復同樣的ack,如果另一方沒有回復,就說明連接有問題。這就是保活的原理。
TCP默認沒有數據情況下2小時后發送一次保活消息,在/proc/sys/net/ipv4目錄下的 tcp_keepalive_time 文件中可以設置。tcp_keepalive_intvl 文件表示保活消息的間隔,默認是75s,tcp_keepalive_probes 文件表示累計沒有收到的回復數算掉線。也可以針對某個socket來設置:
int keeplive = 1; // 打開keepkive屬性 int keepidle = 60; // 60s沒有數據keeplive激活 int keepinterval = 5; // keeplive間隔5s int keepcount = 3; // 探測失敗嘗試次數 setsocket(fd,SOL_SOCKET,SO_KEEPALIVE,(void*)&keeplive,sizeof(keeplive); setsocket(fd,SOL_SOCKET,SO_KEEPPIDLE,(void*)&keeppidle,sizeof(keeppidle); setsocket(fd,SOL_SOCKET,SO_KEEPINTVL,(void*)&keepintvl,sizeof(keepintvl); setsocket(fd,SOL_SOCKET,SO_KEEPCNT,(void*)&keepcount,sizeof(keepcount);在保活情況中,有三種情況
總結
以上是生活随笔為你收集整理的TCP 的 keeplive保活机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux eclipse 字体,lin
- 下一篇: 【小技巧】字符char与整型int的相互