TCP/IP詳解 第十二章(12) 優化 TCP 三次握手的幾個 TCP 參數。

客戶端的優化

當客戶端發起 SYN 包時,可以通過 tcp_syn_retries 控制其重傳的次數。

服務端的優化

當服務端 SYN 半連接隊列溢出後,會導致後續連接被丟棄,可以通過 netstat -s 觀察半連接隊列溢出的情況,如果 SYN 半連接隊列溢出情況比較嚴重,可以通過tcp_max_syn_backlog、somaxconn、backlog 參數來調整 SYN 半連接隊列的大小。

服務端回覆 SYN+ACK 的重傳次數由 tcp_synack_retries 參數控制。如果遭受 SYN 攻擊,應把 tcp_syncookies 參數設置爲 1,表示僅在 SYN 隊列滿後開啓 syncookie 功能,可以保證正常的連接成功建立。

服務端收到客戶端返回的 ACK,會把連接移入 accpet 隊列,等待進行調用 accpet() 函數取出連接。

可以通過 ss -lnt 查看服務端進程的 accept 隊列長度,如果 accept 隊列溢出,系統默認丟棄 ACK,如果可以把 tcp_abort_on_overflow 設置爲 1 ,表示用 RST 通知客戶端連接建立失敗。

如果 accpet 隊列溢出嚴重,可以通過 listen 函數的 backlog 參數和 somaxconn系統參數提高隊列大小,accept 隊列長度取決於 min(backlog, somaxconn)。

繞過三次握手

TCP Fast Open 功能可以繞過三次握手,使得 HTTP 請求減少了 1 個 RTT 的時間,Linux 下可以通過 tcp_fastopen 開啓該功能,同時必須保證服務端和客戶端同時支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章