TCP參數tcp_tw_recycle調整

   最近一直在開發移動端的接口,在內部測試的時候發現這麼個奇怪現象:linux

 

   現象:服務器

   一部Android手機訪問服務器響應沒什麼問題,當使用兩部Android手機同時訪問的時候會出現有一部手機訪問不了接口的現象。tcp


    解決思路:ide

    遇到這種問題首先想到的是使用linux命令查看下TCP鏈接數量,netstat -n|grep 8888測試

發現每當兩部手機同時打開APP時只有一個TCP鏈接,那問題應該是在創建TCP鏈接上,因而帶着疑問百度了一下,果真網上有不少這個樣的解決方案:
設計

關閉服務器的tcp_tw_recycle,
接口

修改下TCP的參數:echo 0 > /proc/sys/net/ipv4/tcp_tw_recycle,ip

而後繼續測試,問題解決。開發


  總結:這個總結是說明下出現該問題的場景以及解決方法,這個問題大多數出如今nat上網的場景下,緣由跟TCP的設計與實現有關係:TCP協議中有個TimeStamp選項,在timewait時間裏,若是還有該ip syn包到達服務器,並且timestamp是以前的間,linux會認爲是重試的syn包,故而會直接drop掉。it

相關文章
相關標籤/搜索