TCP 三次握手過程以下:服務器
與三次握手的系統參數有(系統默認值):網絡
在 /etc/sysctl.conf
中添加或修改,執行sysctl -p
便可生效。tcp
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
./client 192.168.1.24 connect: Connection timed out connect_server 192.168.1.24 error
客戶端的在 connect 函數上進行三次握手。客戶端在發出 SYN 數據包後,等待服務器的響應。若是沒有收到服務端響應,會嘗試重發 SYN 數據包。總共嘗試了6次,也就是 tcp_syn_retries 的數值。默認狀況下,時間超過了60s。server
能夠經過減少該數值提早結束鏈接,減小重試次數。blog
tcp_synack_retries 與 TCP 三次握手的第二步相關。也就是服務器向客戶端發送一個 SYN-ACK 數據包。
服務器在接收到客戶端發送的 SYN 數據包後,會發送 SYN-ACK 數據包進行響應。若是沒有收到客戶端對該 TCP 報文的響應,服務器會嘗試從新發送 SYN-ACK 數據包,總共會嘗試 tcp_synack_retries 次。
cat /proc/sys/net/ipv4/tcp_synack_retries 5
這個要構建數據包才能夠測試,暫時省略。
能夠經過減少該數值提早結束鏈接,減小重試次數。