web-dev-qa-db-ja.com

TCPおよびUDPの基本:Webサイトへの接続

私はコンピュータネットワークを学習しているだけなので、この質問が初心者でも許してください。 TCPプロトコルは、メッセージの転送が終了するまで(ポート80)、UDPがベストエフォートになるまで(つまり、バインドされないまで)、ポートにバインドされます。両方のウェブサイトがウェブサーバーであると仮定すると、私のウェブサイトは同時に(私のブラウザには複数のタブがあります)、私の質問は

  1. 私のコンピューターは最初に1つのWebサービス(Webサイト)と通信し、次に他の(シリアル)と通信しますか?また、この場合、時間差が小さすぎて同時にロードされると感じますか?

  2. 自分のWebサーバー(Tomcat)をポート80で実行している場合、同じポートで発生した場合に他のWebサイトと通信するにはどうすればよいですか?

  3. Webサイトはどのプロトコルを使用するかを決定しますかTCPまたはUDP?

7
Rahul Kumar

TCPプロトコルは、メッセージの転送が終わるまでポートにバインドします(ポート80)

A TCP接続は、4タプル(送信元アドレス、送信元ポート、宛先アドレス、宛先ポート)によって一意に識別されます。送信元IPアドレスと宛先IPアドレスは自分で処理しますが、ポートについて少し混乱しています。

ポートは16ビット整数であり、同じホスト上の複数のアクティブなソケットを区別するために使用されますが、それらの割り当てを管理する特定の規則があります( 参照:wikipedia ):

  1. 「既知の」ポートは1024未満です。

    これらのポートは一般にOSによって保護されているため、非特権プロセスは1つをバインドできないため、既知のサービスになりすますことができません。

    お気づきのように、80はHTTPの「既知の」ポートです。つまり、URLで特に指定されていない限り、80がデフォルトです。

  2. 権限のないプロセスがサービスを提供するために使用できる「登録された」ポートは、1024から49152の間です。たとえば、8080は通常、権限のないHTTPサーバーに使用されます

  3. 49152から65535の残りの値は、ephemeralポートに使用されます。ソケットを作成してサーバーに接続するとき、ソケットを特定のローカルポートにバインドしないと、カーネルは一時的な範囲から空きポートを割り当てます。これは、接続を識別する一意の4タプルを作成するためのものであり、通常、値が何であるかを気にすることはありません。
    • NB。エフェメラルポートに使用される実際の範囲は、OSによって異なり、構成可能である場合もあります。ただし、常に1024を超える値から始まります。

そして、UDPはベストエフォートです(すなわち、拘束力はありません)。

UDPはUser Datagram Protocolの略です。それはベストエフォートですが、ポートとは何の関係もありません。 TCPとUDPの両方が、まったく同じIPアドレス指定スキームを使用し、同じ4タプルを使用します。ただし、HTTPには使用しないでしょう(最後の質問に対する回答を参照)。

私の質問は、両方のWebサイトがWebサーバーであると仮定して、2つのWebサイトに同時にアクセスして(ブラウザに複数のタブがある)場合、私の質問は

  1. 私のコンピューターは最初に1つのWebサービス(Webサイト)と通信し、次に他の(シリアル)と通信しますか?また、この場合、時間差が小さすぎて同時にロードされると感じますか?

はいといいえ。 2つのソケットを作成し、両方を接続します。ソースIPはそれぞれ同じです(同じマシン上にあり、おそらくそのマシンで同じネットワークインターフェイスを使用しているため)。宛先IPとポートは同じになります(同じHTTPサーバーに接続します)。ただし、OSは各ソケットに異なる一時ポートを割り当てているため、ソースポートは異なります。

各ソケットは、異なるTCP接続(異なる一意の4タプルがある)のエンドポイントであるため、並列に実行できます。ただし、上記のように、2つの接続が同じ物理ネットワーク上にあると仮定しますインターフェースでは、物理パケットを同時に送受信することはできませんが、OSがパケットを物理ネットワークにインターリーブするため、実際にはこれは問題になりません。

接続は一般に非同期であるため、両方のソケットが同時に処理中の要求を持つことができ、応答もインターリーブできます。

  1. 自分のWebサーバー(Tomcat)をポート80で実行している場合、同じポートで発生した場合に他のWebサイトと通信するにはどうすればよいですか?

あなたのウェブサイトはIP、ポートタプル(localhost、80)で待ち受けます。同じマシンから接続する場合、接続は(localhost、ephemeral1、localhost、80)のようになります。別のマシンのWebサーバーに接続する場合、接続は(localhost、ephemeral2、remotehost、80)のようになります。 4つの値のいずれかに80が含まれている場合でも、それらはまだ異なります。

実行できない唯一のことは、同じマシンのポート80をリッスンする2つの異なるWebサーバーを使用することです。

  1. TCPまたはUDPのどちらを使用するかをWebサイトが決定しますか?

あなたはいつでも自分でこれをチェックすることができます:標準は here です。関連セクションは次のとおりです。

HTTP通信は通常、TCP/IP接続を介して行われます。デフォルトのポートはTCP 80 [19]ですが、他のポートを使用できます。これにより、インターネットまたは他のネットワーク上の他のプロトコルの上にHTTPが実装されることを妨げません。HTTP信頼できるトランスポートのみを想定しています。このような保証を提供するプロトコルはすべて使用できます。問題のプロトコルのトランスポートデータユニットへのHTTP/1.1要求および応答構造のマッピングは、この仕様の範囲外です。

つまり、HTTPはTCPを使用するしないが、する )信頼性の高い(および接続指向の)プロトコルを想定しているため、UDPは廃止されています。

10
Useless

ここでは、学習の指針となる基本事項をいくつか示します。

Webサーバーへの接続は常にTCP接続であり、ポート番号は接続を行うクライアントではなく、接続を受信するサーバーのポート番号です。

そう:

  1. WebブラウザーがWebサーバーに同時に複数の接続を行うことは一般的です。同じクライアントから同じサーバーに一度に2つを超える接続を行わないことは良い方法と考えられていますが、ビジー状態のWebサーバーには数百(さらには数千)の同時クライアント接続があります。

    1. リモートサーバーへの接続に使用されるローカルポートは、OSによってランダムに生成されます。これは、接続先のリモートポートと同じポート番号ではないため、ローカルでWebサーバーを実行しているときに、複数のWebサーバーに同時に接続しても問題はありません。

    2. Webサーバーが話すプロトコルは HTTP/1. および HTTP/1.1 で定義されており、具体的にはTCP接続です。

2
Michael Shaw

各TCP接続には、それを識別するための4つの値があります:IP1(自分のIPアドレス)、port1(私の端のポート)、IP2(他のコンピューターのアドレス)、port2(他のポート)終わり)。

これらのいずれかが異なるとすぐに、別の接続について話します。これにより、理論的には40億個のTCP任意の2台のコンピュータ間の接続が作成されます。これを覚えておいてください。

  1. コンピューターは同時に複数の接続をアクティブにすることができます(ほとんどの場合、使用可能な65kから別のローカルポートを選択します)。

    ローカルで選択されたポートが異なる限り、同じポートの同じサーバーに2回接続することもできます。

  2. 上記と同じように、ローカルポートの範囲には、複数の接続を開くのに十分な余裕があります(ただし、発信接続のローカルポートとして80を使用することはできません)。

  3. http(すべてのインターネットトラフィックの90%など)はTCPを経由します。

    UDPは、一部のデータを失うことが許可されている専門的なアプリケーションにのみ使用されます

1
ratchet freak