ポート0は何のために使用されますか?

ポート0は実際のポート番号ではありませんが、目的があります

ほとんどのポート番号とは異なり、ポート0はTCP / IPネットワーキングの予約済みポートです。つまり、 TCPまたはUDPメッセージでは使用しないでください。

ポート0は、システム割り当ての動的ポートを要求するために、 ネットワークプログラミング、特にUNIXソケットプログラミングにおいて特別な意味を持ちます。 ポート0は、システムに適切なポート番号を見つけるように指示するワイルドカード・ポートに似ています。

TCPおよびUDPのネットワークポートは、0から65535までの範囲です。0〜1023の範囲のポート番号は、システムポートまたはよく知られているポートとして定義されています。 IANA(Internet Assigned Numbers Authority)は、インターネット上のこれらのポート番号の意図された使用法の公式リストを維持し、システムポート0は使用されない。

ネットワークプログラミングでポート0がどのように機能するか

新しいネットワークソケット接続を設定するには、送信元と宛先の両方に1つのポート番号を割り当てる必要があります。 送信元(送信元)が送信したTCPまたはUDPメッセージには両方のポート番号が含まれているため、メッセージ受信者(宛先)は正しいプロトコルエンドポイントに応答メッセージを発行できます。

IANAは、Webサーバー(ポート80)などの基本的なインターネットアプリケーション用の指定されたシステムポートをあらかじめ割り当てていますが、多くのTCPおよびUDPネットワークアプリケーションは独自のシステムポートを持たず、起動するたびにデバイスのオペレーティングシステムから取得する必要があります。

ソースポート番号を割り当てるために、アプリケーションはbind()のようなTCP / IPネットワーク関数を呼び出して要求します。 特定の番号を要求したい場合、アプリケーションはbind()に固定(ハードコード)された番号を提供できますが、システム上の他の実行中のアプリケーションが現在その番号を使用している可能性があるため、

代わりに、接続パラメータとしてbind()にポート0を提供することもできます。 これにより、オペレーティングシステムはTCP / IP動的ポート番号範囲内の適切な使用可能ポートを自動的に検索して返すようになります。

アプリケーションは実際にはポート0ではなく、他のダイナミックポートとして許可されることに注意してください。 このプログラミング規約の利点は効率です。 各アプリケーションは、有効なポートを取得するまで複数のポートを試すためのコードを実装して実行する必要はありませんが、アプリケーションはオペレーティングシステムを使用してそのようにすることができます。

Unix、Windows、およびその他のオペレーティングシステムはポート0の処理方法が多少異なりますが、同じ一般的な規則が適用されます。

ポート0とネットワークセキュリティ

ポート0でリッスンしているホストにインターネット経由で送信されたネットワークトラフィックは、ネットワーク攻撃者から生成されるか、間違ってプログラムされたアプリケーションによって誤って生成される可能性があります。 ホストがポート0トラフィックに応答して生成する応答メッセージは、攻撃者がこれらのデバイスの動作や潜在的なネットワーク脆弱性についてより多くの情報を得るのに役立ちます。

多くのインターネットサービスプロバイダ(ISP)は 、これらの悪用を防ぐために、ポート0(受信メッセージと送信メッセージの両方)のトラフィックをブロックします。