天天看點

TCP/IP詳解 第十二章(13) TCP 四次揮手的優化

TCP/IP詳解 第十二章(13) TCP 四次揮手的優化
主動方的優化

主動發起 FIN 封包斷開連接配接的一方,如果遲遲沒收到對方的 ACK 回複,則會重傳 FIN 封包,重傳的次數由 

tcp_orphan_retries

 參數決定。

當主動方收到 ACK 封包後,連接配接就進入 FIN_WAIT2 狀态,根據關閉的方式不同,優化的方式也不同:

  • 如果這是 close 函數關閉的連接配接,那麼它就是孤兒連接配接。如果 

    tcp_fin_timeout

     秒内沒有收到對方的 FIN 封包,連接配接就直接關閉。同時,為了應對孤兒連接配接占用太多的資源,

    tcp_max_orphans

     定義了最大孤兒連接配接的數量,超過時連接配接就會直接釋放。
  • 反之是 shutdown 函數關閉的連接配接,則不受此參數限制;

當主動方接收到 FIN 封包,并傳回 ACK 後,主動方的連接配接進入 TIME_WAIT 狀态。這一狀态會持續 1 分鐘,為了防止 TIME_WAIT 狀态占用太多的資源,

tcp_max_tw_buckets

 定義了最大數量,超過時連接配接也會直接釋放。

當 TIME_WAIT 狀态過多時,還可以通過設定 

tcp_tw_reuse

 和 

tcp_timestamps

為 1 ,将 TIME_WAIT 狀态的端口複用于作為用戶端的新連接配接,注意該參數隻适用于用戶端。

被動方的優化

被動關閉的連接配接方應對非常簡單,它在回複 ACK 後就進入了 CLOSE_WAIT 狀态,等待程序調用 close 函數關閉連接配接。是以,出現大量 CLOSE_WAIT 狀态的連接配接時,應當從應用程式中找問題。

當被動方發送 FIN 封包後,連接配接就進入 LAST_ACK 狀态,在未等到 ACK 時,會在

tcp_orphan_retries

 參數的控制下重發 FIN 封包。

TCP/IP詳解 第十二章(13) TCP 四次揮手的優化

繼續閱讀