1、linux網絡內核調優:三次握手

TCP 三次握手過程以下:服務器

三次握手圖

與三次握手的系統參數有(系統默認值):網絡

  • net.ipv4.tcp_syn_retries = 6
  • net.ipv4.tcp_synack_retries = 5

/etc/sysctl.conf 中添加或修改,執行sysctl -p 便可生效。tcp

tcp_syn_retries

tcp_syn_retries 與 TCP 三次握手的第一步相關,也就是客戶端向服務器發送一個 SYN 數據包。函數

在沒有接收到服務器響應的狀況下,SYN 數據包的會嘗試發送 tcp_syn_retries 次。測試

查看系統設置優化

cat /proc/sys/net/ipv4/tcp_syn_retries 
6

測試

測試代碼:http://my.oschina.net/lowkey2046/blog/716557.net

服務端(192.168.1.24),客戶端(192.168.1.21)code

  1. 正常狀況下執行一次程序,主要是爲了產生相應的路由數據
  2. 直接斷開服務端網絡
  3. 啓動客戶端
./client 192.168.1.24
connect: Connection timed out
connect_server 192.168.1.24 error

wireshark 抓包

測試截圖

客戶端的在 connect 函數上進行三次握手。客戶端在發出 SYN 數據包後,等待服務器的響應。若是沒有收到服務端響應,會嘗試重發 SYN 數據包。總共嘗試了6次,也就是 tcp_syn_retries 的數值。默認狀況下,時間超過了60s。server

優化方案

能夠經過減少該數值提早結束鏈接,減小重試次數。blog

tcp_synack_retries

tcp_synack_retries 與 TCP 三次握手的第二步相關。也就是服務器向客戶端發送一個 SYN-ACK 數據包。

服務器在接收到客戶端發送的 SYN 數據包後,會發送 SYN-ACK 數據包進行響應。若是沒有收到客戶端對該 TCP 報文的響應,服務器會嘗試從新發送 SYN-ACK 數據包,總共會嘗試 tcp_synack_retries 次。

cat /proc/sys/net/ipv4/tcp_synack_retries 
5

測試

這個要構建數據包才能夠測試,暫時省略。

優化方案

能夠經過減少該數值提早結束鏈接,減小重試次數。

參考資料

tcp_syn_retries等參數詳解

相關文章
相關標籤/搜索