いくつか質問があります。私が見つけたポートの説明は次のとおりです。
アプリケーション層はポートを介してトランスポート層と通信します。ポートには番号が付けられており、標準アプリケーションは常に同じポートを使用します。
ポート番号を使用すると、トランスポート プロトコル (通常は TCP) はパケット内にどのような種類のコンテンツが含まれているかを認識し、受信側で受信したデータをどのアプリケーション プロトコルに配信するかを認識できるようになります。
絶対的な保証がないのに、内部にどのようなアプリケーション データ プロトコルが存在するかを判断するためにポート番号が使用されるのはなぜでしょうか?
私の理解では、ポート経由で送信するアプリケーション データの種類に制限はありません (これは単なる提案です)。さらに、この目的のために、プロトコル データは既にパケットのどこかに含まれているのではないでしょうか。
また、ポート 25 (SMTP を想定) の宛先に HTTP または他の種類のプロトコルを送信すると、データはどうなるでしょうか?
3 番目に、どのプログラムにもバインドされていない、つまり監視されていないポートにデータを送信した場合、そのデータはどうなるでしょうか?
**最後に、ポートを 1 つのプログラムにしかバインドできない場合、受信 HTTP データに依存する複数のプログラムをコンピューター上で同時に実行することは可能でしょうか?****
前もって感謝します!
答え1
絶対的な保証がないのに、内部にどのようなアプリケーション データ プロトコルが存在するかを判断するためにポート番号が使用されるのはなぜでしょうか?
推測で物事を進めるのは最悪の方法であり、たとえば悪意のある人が間違ったものを送信するのを止める方法はありません。したがって、誰もがうまくやっている場合には役立ち、何も悪化しません。
私の理解では、ポート経由で送信するアプリケーション データの種類に制限はありません (単なる提案です)。
正解です。実際、これは提案ではなく、多くの人がたまたま同意しているだけのことです。
さらに、この目的のためにプロトコル データは既にパケットのどこかに含まれているのではないでしょうか?
いいえ。少なくとも、ポートが通常示すレベルではわかりません。送信される上位レベルの IP プロトコルの種類 (例: TCP、UDP) はわかりますが、その内容 (例: HTTP、SMTP) はわかりません。
また、ポート 25 (SMTP を想定) の宛先に HTTP または他の種類のプロトコルを送信すると、データはどうなるでしょうか?
TCP はデータをアプリケーション層に渡すだけなので、アプリケーション層はデータに対して何でも好きなことができます。ほとんどの場合、エラーが発生するだけです。時には、悪用可能なセキュリティ ホールが発生することもあります。
場合によっては、ポートに SSL を使用しない場合に一部の HTTPS サーバーが返すプレーン テキストの HTTP エラーなど、不適切なクライアントに対して適切な動作が行われることがあります。
3 番目に、どのプログラムにもバインドされていない、つまり監視されていないポートにデータを送信した場合、そのデータはどうなるでしょうか?
受信システムから ICMP エラー メッセージが届きます。技術的には、受信側は好きなように操作できますが、実際には、このようなことが起こります。
最後に、ポートを 1 つのプログラムにしかバインドできない場合、受信 HTTP データに依存する複数のプログラムをコンピューター上で同時に実行することは可能でしょうか?
ブラウザがリモート サーバーに HTTP 接続する場合、ランダムなローカル ポートを使用し、リモート サーバーの既知のポート (80 または 443) と通信します。この場合、 は個別の送信接続ごとに一意です。(ただし、技術的には、サーバーの場合のように一意である必要はありません。)
サーバー側では、リッスンすると、ポート (Unix / BSD ソケット) で新しい接続を受け入れることができるのは 1 つのプロセスだけですが、確立された接続を他のプロセスに渡してサービスすることができます。セットは一意であるため、トラフィックを適切な接続にルーティングできます。