TCPが接続を解放するときにtime_wait状態が2MSL時間待機する必要があるのはなぜですか?



Why Does Time_wait State Have Wait



画像
上の図のAがTIME-WAIT状態で2MSL時間待機する必要があるのはなぜですか?
まず、Aによって送信された最後のACKメッセージがBに到達できるようにするためです。このACKセグメントが失われる可能性があるため、LAST-ACK状態のBは送信されたFIN + ACKセグメントの確認応答を受信しません。 BはFIN + ACKセグメントを定期的に再送信し、Aは2MSL内で再送信されたFIN + ACKセグメントを受信します。 AがTIME-WAIT状態で一定時間待機せず、ACKセグメントが送信された直後に接続を解放した場合、AはB再送信のFIN + ACKセグメントを受信できないため、別の確認を送信しません。セグメント。このように、Bは通常の手順ではCLOSED状態に入ることができません。
次に、AがACKセグメントを送信した後、Aは2MSL時間を経過するため、接続の期間によって生成されたすべてのセグメントがネットワークから消えます。これにより、古い接続要求のセグメントが次の新しい接続に表示されなくなります。

2MSLとは



MSLは、Maximum Segment LifetimeEnglishの略語です。中国語は「最大生存時間」と翻訳できます。メッセージがネットワーク上に存在するのは最長の時間です。この時間の後、メッセージは破棄されます。 tcpメッセージはipデータグラムのデータ部分であるためです。具体的なタイトルについては、「ネットワークのレイヤー内のデータ」の記事を参照してください。ipヘッダーにはTTLフィールドがあります。 TTLは存続時間の略語です。中国語は「生存時間」と翻訳することができます。この生存時間は、特定の時間ではなく初期値を設定するためにソースホストによって設定されます。代わりに、IPデータグラムが通過できるルートの最大数を格納します。値は1ずつ減らされます。この値が0の場合、データグラムは破棄され、ICMPメッセージが送信されて送信元ホストに通知されます。 MSLはRFC793では2分であり、実際のアプリケーションでは30秒、1分、および2分が一般的に使用されます。

2MSLはMSLの2倍です。 TCPのTIME_WAIT状態は、2MSL待機状態とも呼ばれます。 TCPの一方の端がアクティブシャットダウンを開始すると、最後のACKパケットが送信された後、つまり3番目のハンドシェイクが完了した後に、4番目のハンドシェイクのACKパケットが送信されます。 TIME_WAIT状態に入った後、MSL時間の間この状態に2回滞在する必要があります。 2MSL時間待機するのは、主に、最後のACKパケットが相手に受信されないことを恐れて、タイムアウト後に相手が3回目のハンドシェイクのためにFINパケットを再送信するためです。アクティブなクローズ端末は、再送信されたFINパケットを受信した後、別のACK応答パケットを送信できます。 TIME_WAIT状態では、両端のポートは使用できず、2MSL時間の終了まで待機して使用を継続できます。接続が2MSL待機フェーズにある場合、遅延セグメントはすべて破棄されます。ただし、実際のアプリケーションでは、SO_REUSEADDRオプションを使用して、このポートを使用する前に2MSL時間の終了を待つ必要がないようにすることができます。



TTLはMSLに関連していますが、単純な同等の関係ではありません。 MSLがTTL以上です。

転載:https://www.cnblogs.com/huenchao/p/6266352.html