複数のクライアントがサーバー上の 1 つのポート (たとえば 80) に同時に接続するにはどうすればよいですか? [重複] 質問する

複数のクライアントがサーバー上の 1 つのポート (たとえば 80) に同時に接続するにはどうすればよいですか? [重複] 質問する

ポートの仕組みの基本は理解しています。しかし、複数のクライアントが同時にポート 80 に接続できる理由がわかりません。各クライアントには (マシンごとに) 固有のポートがあることは知っています。サーバーは使用可能なポートからクライアントに応答し、応答が 80 から来たとだけ伝えるのでしょうか? これはどのように機能するのでしょうか?

ベストアンサー1

まず、「ポート」は単なる番号です。「ポートへの接続」が実際に表すのは、「宛先ポート」ヘッダー フィールドにその番号が指定されているパケットだけです。

さて、あなたの質問に対する答えは 2 つあります。1 つはステートフル プロトコル用、もう 1 つはステートレス プロトコル用です。

ステートレス プロトコル (UDP など) の場合、「接続」が存在しないため、問題はありません。複数の人が同じポートにパケットを送信でき、パケットはどのような順序でも到着します。誰も「接続」状態になることはありません。

ステートフル プロトコル (TCP など) の場合、接続は、送信元ポートと宛先ポート、および送信元 IP アドレスと宛先 IP アドレスで構成される 4 組によって識別されます。したがって、2 台の異なるマシンが 3 台目のマシンの同じポートに接続する場合、送信元 IP が異なるため、2 つの異なる接続が存在します。同じマシン (または NAT の背後にある 2 台、または同じ IP アドレスを共有する 2 台) が 1 つのリモート エンドに 2 回接続する場合、接続は送信元ポート (通常はランダムな高番号のポート) によって区別されます。

簡単に言えば、クライアントから同じ Web サーバーに 2 回接続すると、2 つの接続は、クライアントの観点からは送信元ポートが異なり、Web サーバーの観点からは宛先ポートが異なります。そのため、両方の接続の送信元 IP アドレスと宛先 IP アドレスが同じであっても、曖昧さはありません。

ポートは、異なるアプリケーションが同じ IP アドレス/プロトコル ペアをリッスンできるように、IP アドレスを多重化する方法です。アプリケーションが独自の上位レベルのプロトコルを定義しない限り、ポートを多重化する方法はありません。同じプロトコルを使用する 2 つの接続が同時に同一の送信元 IP と宛先 IP、および同一の送信元ポートと宛先ポートを持つ場合、それらは同じ接続である必要があります。

おすすめ記事