正しく理解できれば、アプリケーションはHTTPを使用してメッセージを送信することがあります。他のポートを使用するとファイアウォールの問題が発生する可能性があるためです。しかし、Webブラウザーなどの他のアプリケーションと競合することなく、どのように機能しますか?実際、一度に実行される複数のブラウザーはどのように競合しませんか?それらはすべてポートを監視し、通知を受けますか?この方法でポートを共有できますか?
これは馬鹿げた質問だと感じていますが、以前は考えたこともありませんでした。また、2つのアプリが同じポートを使用するように構成されている場合に問題が発生したこともあります。
2つのポートがあります:ソースポート(ブラウザ)と宛先ポート(サーバー)。ブラウザはOSに利用可能なソースポートを要求し(12を受け取ったとしましょう)、宛先ポートへのソケット接続を確立します(通常80/HTTP、443/HTTPS)。
Webサーバーが回答を受信すると、送信元ポートとして80、宛先ポートとして33123を含む応答を送信します。
したがって、stackoverflow.comに同時にアクセスする2つのブラウザーがある場合、次のようになります。
Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80)
Chrome (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80)
送信HTTP要求はポート80では発生しません。アプリケーションがソケットを要求すると、通常はランダムにソケットを受信します。これは送信元ポートです。
ポート80は、HTTPコンテンツを提供するためのものです(クライアントではなくサーバーによって)。これは宛先ポートです。
各ブラウザは異なるソースを使用してリクエストを生成します。これにより、パケットは正しいアプリケーションに戻ります。
接続を識別するのは、5つのタプル(IPプロトコル、ローカルIPアドレス、ローカルポート、リモートIPアドレス、リモートポート)です。複数のブラウザー(または実際には複数のページを同時に読み込む単一のブラウザー)はそれぞれ宛先ポート80を使用しますが、ローカルポート(O/Sによって割り当てられる)はそれぞれ異なります。したがって、競合はありません。
通常、クライアントは1024〜65535のポートを選択します。これは、オペレーティングシステムの処理方法によって異なります。 Windowsクライアントは新しい接続ごとに値を増やし、Unixクライアントはランダムなポート番号を選択すると思います。
一部のサービスは、NTP(123 UDP)などの静的クライアントポートに依存しています
ブラウザーは、通常は別のマシンにあるWebサーバーでコンテンツを表示するために使用するクライアントアプリケーションです。 Webサーバーはポート80でリッスンしているサーバーであり、クライアントのブラウザーではありません。
「ポート80でリッスンする」と「ポート80に接続する」を区別する際には注意が必要です。
「他のポートを使用するとファイアウォールの問題が発生する可能性があるため、アプリケーションはHTTPを使用してメッセージを送信することがある」と言うとき、実際には「アプリケーションはポート80にメッセージを送信する」ことを意味します。
サーバーはポート80でリッスンしており、そのポートで複数の接続を受け入れることができます。
ここで話しているポート80は、サーバー上のリモートポートです。ローカルブラウザーは、確立された接続ごとに高いポートを開きます。
各接続のポート番号はbothで終わり、1つはローカルポート、もう1つはリモートポートと呼ばれます。
ファイアウォールは、コンピューターからの接続が確立されていることを知っているため、ブラウザーの高ポートへのトラフィックを許可します。