web-dev-qa-db-ja.com

3つの道ハンドシェイク難問

私は3つの方法を理解しようとしていますが、これが現実世界のシナリオにどのように適用されるかを難散乱にしています。たとえば、Mozilla FirefoxなどのWebブラウザを使用してWebサイトwww.superuser.comを参照している場合は、次のようになります。

  1. 私はFirefoxを起動し、アプリケーションにランダムなプロセス識別子が割り当てられています。空白のページで起動すると仮定すると、これはすべて起こることです。

  2. Www.superuser.comを参照している場合、私のPCはSYNパケットを送信することによってサーバーと連絡を取ります。

  3. サーバーは、ACKパケットを独自のSYNパケットとともに送信することによって要求によって応答します。

  4. 私のコンピュータはACKパケットで応答し、接続が確立されます。

今混乱、

  1. まさに確立されたことは何を意味しますか?たとえば、www.superuser.comの別のページに閲覧することになっていたら、3つの方法はそれ自体を繰り返しますか?

  2. 私のPCはFINフラグを送信し、サーバーはそれ自身のFINパケットで応答しますか?

  3. サーバーからの要求をするときにアプリケーションが複数のスレッドを持つことができることを理解している、これは各スレッドが独自の3つの方法を持っていることを意味しますか?これらは互いに独立していますか?

  4. FIN_WAITのさまざまな状態はどういう意味ですか?

  5. サーバーがクライアントによって開始されずに接続を終了させることも、常にクライアントから開始されなければならないのですか?

3
PeanutsMonkey

まさに確立されたことは何を意味しますか?たとえば、www.superuser.comの別のページに閲覧することになっていたら、3つの方法はそれ自体を繰り返しますか?

「確立」とは、三方ハンドシェイクが完了したことを意味し、接続はデータを転送するために利用可能である(閉じるまで)。

要求の数はプロトコルに依存します。 HTTP 1.0では、接続ごとに1つだけの要求が行われた - TCPハンドシェイク、HTTPリクエスト、HTTP応答、TCP近いハンドシェイクスタイルシートを取得します。または画像は、より多くの接続が(同時におそらく複数)行わなければなりませんでした。

HTTP 1.1では、最初の要求の後に接続が開かれている(アイドル)永続的な接続が許可されており、ブラウザがより多くのリソースをロードする必要がある場合(イメージ、その他のページ)は、同じ接続をより多くの要求を送信します。

他のプロトコルはしばしば単一の接続で長い会話を実行します。一方、FTPは、プライマリ「コントロール」CONNに加えて、複数の短命の「データ」接続を使用します。

私のPCはFINフラグを送信し、サーバーはそれ自身のFINパケットで応答しますか?

ブラウザが接続を閉じることを決めたり、「ハングアップ」したりすると、コンピュータはフィンパケットを送信し、サーバーはFIN ACKで返信し、コンピュータはACKで返信します。

サーバーからの要求をするときにアプリケーションが複数のスレッドを持つことができることを理解している、これは各スレッドが独自の3つの方法を持っていることを意味しますか?これらは互いに独立していますか?

スレッドは無関係です。唯一のコンセプトは、TCPコネクションです。各個別の接続には別のハンドシェイクがあります。

各スレッドは、複数接続を確立することができます。複数のスレッドが接続を共有する可能性があります。さらには数プロセスは、いくつかの状況で接続を共有することができます。

FIN_WAITのさまざまな状態はどういう意味ですか?

  1. クライアントが確立されている→サーバーの送信FIN→クライアントはfin_wait1にあります
  2. サーバーが確立されている→Server Recvs Fin→Serverはclose_waitにあります
  3. ...認めます、私は知りません。 (誰かが編集すること自由に感じます。 この図を見つけました

サーバーがクライアントによって開始されずに接続を終了させることも、常にクライアントから開始されなければならないのですか?

接続はどちらかの端によって閉じることができます。 HTTPデーモンがそれを閉じた場合、それは同じように機能しますが反対方向に機能します - サーバーはフィンを送り、あなたのコンピュータはフィンACKで返信します...


TCPが RFC 79 に指定されています。 TCP上のウィキペディアの記事 プロトコルハンドシェイクがどのように行われるかを説明します。

3
user1686