web-dev-qa-db-ja.com

着信TCP SYNの可能性

これは一般的なTCPの質問かもしれません。

SYN接続TCP TIME-WAIT状態の接続でOR ESTABLISHEDパケットを受信できますか?

これは可能ですか?

1
hari

SYN TCP接続で受信されたESTABLISHEDは発生しないはずです。遅延パケットである可能性があり、サイレントにドロップしても安全です。

接続が失われ、サーバーではなくクライアントでタイムアウトになった場合、またはクライアントが再起動された場合、サーバーがESTABLISHED状態になり、クライアントがCLOSED状態になる可能性があります。このシナリオで新しい接続を開こうとすると、SYNパケットがESTABLISHED状態で受信されます。望ましい結果は、古い接続が閉じられ、新しい接続が開かれることです。

この望ましい結果を達成する方法は次のとおりです。

  • クライアントはSYNを送信して、新しい接続を作成します。
  • サーバーは、ACK接続に対してESTABLISHEDを送信します。
  • クライアントはACKRSTパケットで応答し、ESTABLISHED接続が切断されます。
  • クライアントはSYNパケットを再送信して、新しい接続を作成します。

TIME_WAIT状態で受信されたSYNパケットは、サーバーが接続を閉じ、クライアントが同じポート番号で新しい接続を開いた後に発生する可能性があります。これにより、新しい接続が開かれます。

2
kasperd

どちらも...SYNは、接続が最初にセットアップされたとき(3ウェイハンドシェイク)、またはパケットが破棄されたときにのみ使用されます。

基本的に:

SYN (I want to start a connection) -> ACK/SYN (OK, I want to start a connection too) -> ACK (acknowledged connection, ready for data)

両方のホストから送信されたACKパケットを使用した会話フローは、お互いにパケットを受信したことを示しています。

最後に、FINがサーバーに送信され、TIME_WAITはソケットに設定されます。サーバーがFINパケットで応答すると、ソケットが解放されます。

0
Nathan C