CLOSE_WAITおよびTIME_WAIT状態とは何ですか?


166

netstat -aWindowsマシンで実行すると、次の4つの状態のいずれかを持つポートのリストが表示されます。

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

CLOSE_WAITTIME_WAIT意味しますか?



「man netstat」を参照して、状態セクションまでスクロールします:linux.die.net/man/8/netstat
MaQleod


クロスサイトデュープ:askubuntu.com/questions/538443/...
Mokubai

回答:


179

TCP / IPの機能により、接続をすぐに閉じることはできません。パケットは順不同で到着するか、接続が閉じられた後に再送信される場合があります。CLOSE_WAITは、リモートエンドポイント(接続の反対側)が接続を閉じたことを示します。TIME_WAITは、ローカルエンドポイント(こちら側)が接続を閉じたことを示します。遅延パケットが接続に一致し、適切に処理されるように、接続は維持されています。接続は、4分以内にタイムアウトになると削除されます。詳細については、http://en.wikipedia.org/wiki/Transmission_Control_Protocolを参照してください。


しかし、これは、関数が返された後にパケットが到着したとしても、アプリケーションによって破棄されることを意味するのではないでしょうか?
MonsterMMORPG

@MonsterMMORPG接続が閉じられた後に順不同で到着したパケットは、ネットワークスタックによって処理されます。これらは通常、通常の重複パケットルールに従って安全に破棄できます。未知のアクティブな接続に関連しているように見えるパケットは通常破棄され、応答を生成します。WAIT状態は、このトラフィックから保護します。
BillThor

29

基本的に、「WAIT」状態は、一方が接続を閉じたが、終了の最終確認が保留中であることを意味します。

たとえば、詳細については、次のTCP状態の図を参照してください。

http://www.jxos.org/Projects/TCP/tcpstate.html


14
これは、TIME_WAITではなくCLOSE_WAITを正確に記述します。TIME_WAITは、ローカルアプリケーションが接続を閉じ、反対側が確認して独自のFINを送信したことを示します。現在、同じポートの新しいユーザーを混乱させる可能性のある、重複したパケットの紛失を待っています。
クリススモートン14

1
@ChrisSmowton、だから誰が正しい用語を使っているのでしょうか?ダイアグラムまたはnetstat?(cf.
Pacerier

@Pacerier私は彼らが一致すると思う-どこで意見が違うと思いますか?
クリススモートン

@ChrisSmowtonつまり、次のポート所有者が余分なバイトを取得する可能性があり、TIME_WAIT = 0に設定すると応答が中断される可能性があることを意味しますか?
MonsterMMORPG

可能ですが、非常に考えにくいのは、アプリケーションがストリームにスプライスされた不正なパケットを見るためにシーケンス番号を一致させる必要があるか、受信者が正しい順序番号が現れるまで、見た目が狂ったパケットをバッファリングする必要があるためです 実際の実装については、後者が実際に行われているかどうかを知るのに十分ではありません。
クリススモートン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.