1

ループバックインターフェイスへのTCP接続が終了するTIME_WAIT(ソケットがSO_DONTLINGERsetで閉じられる)のに、別のホストへの同一の接続が終了しないTIME_WAIT(すぐにリセット/破棄される)のはなぜですか?

説明するシナリオは次のとおりです。

(A)クライアントとサーバーの2つのアプリケーションが、両方とも同じWindowsマシンで実行されています。クライアントは、サーバーのループバックインターフェイス(127.0.0.1、ポートxxxx)を介してサーバーに接続し、データを送信し、データを受信し、ソケットを閉じます(SO_DONTLINGER設定されています)。

接続が非常に短命であるため、クライアントアプリが毎秒多数の接続を確立および破棄しているとしましょう。最終的に、ソケットはTIME_WAITになり、クライアントは最終的に最大数のソケットを使い果たします(Windowsでは、これはデフォルトで最大3900であり、この値はレジストリで変更されないと想定しています)。

(B)シナリオ(A)と同じ2つのアプリケーションですが、サーバーは別のホスト上にあります(クライアントは引き続きWindowsで実行されています)。接続は、127.0.0.1宛てではなく、代わりに他のIP宛てである点を除いて、すべての点で同一です。ここでは、クライアントマシンの接続はに移行せTIME_WAITず、クライアントアプリは無期限に接続を継続できます。

なぜ矛盾があるのですか?

4

1 に答える 1

3

TIME_WAIT 状態は、接続の一方の端 (最初に閉じた端) でのみ発生します。ループバック インターフェイスの場合、両端が同じマシン上にあるため、常に TIME_WAIT が表示されます。

他の場合は、他のマシンを見てみてください。そこに TIME_WAIT ソケットが表示されると思います。

于 2008-11-21T19:12:27.483 に答える