tcp_tw_reuse パラメータを有効にすると、TIME_WAIT 状態の TCP 接続をすぐに再利用できます。これは、TIME_WAIT 状態の期間を短縮することと同じです。
tcp_tw_reuseとは何ですか?
TIME_WAIT 状態の継続時間は 60 秒です。これは、クライアントが 60 秒以内に常にこのポートを占有することを意味します。ポート リソースは限られており、通常、開くことができるポートは 32768 ~ 61000 です。
クライアントの TIME_WAIT 状態 (接続をアクティブに閉じている) が多すぎて、ポートのすべてのリソースを占有している場合、同じ「宛先 IP + 宛先ポート」を持つサーバーへの接続を開始することはできません。
Linux オペレーティング システムには、TIME_WAIT 状態の接続を迅速に回復するための 2 つのシステム パラメータが用意されています。どちらもデフォルトでは無効になっています。
tcp_tw_reuse がデフォルトで無効になっているのはなぜですか?
- TIME_WAIT 状態のポートを急速に再利用すると、シーケンス番号をラップする RST メッセージによって新しい接続が切断される可能性があります。TIME_WAIT 状態がスキップされずに 2MSL の間留まる場合、次の新しい RST メッセージは表示されません。。
- tcp_tw_reuse を有効にして、TIME_WAIT 状態の接続をすぐに再利用します。4 番目のウェーブの ACK メッセージが失われた場合、サーバーはタイムアウト再送信をトリガーし、3 番目のウェーブ メッセージを再送信し、syn_sent 状態のクライアントがサーバーを受信します。3 番目のウェーブを再送信します。メッセージを送信し、RST をサーバーに返します。
tcp_tw_reuse の機能は、クライアントが TIME_WAIT 状態のポートを迅速に再利用できるようにすることです。これは、TIME_WAIT 状態をスキップするのと同じであり、次の 2 つの問題が発生する可能性があります。
- 過去の RST パケットは、同じ 4 タプルの接続を後で終了する可能性があります。これは、RST の有効期限が切れた場合でも、PAWS は RST が破棄されないことをチェックするためです。
- 4 番目の波の ACK メッセージが失われた場合、接続を受動的に閉じた側が正常に閉じることができない可能性があります。
TIME_WAIT 状態は少し長く続くため非常に不親切に見えますが、面倒なことを避けるために設計されています。