3. Background (背景)
3. Background (背景)
伝送制御プロトコル (Transmission Control Protocol, TCP) [RFC0793] とユーザデータグラムプロトコル (User Datagram Protocol, UDP) [RFC0768] は, インターネット上で最も広く使用されている 2 つのトランスポートプロトコルとして, 数十年にわたって顕著な成功を収めてきました。これらはインターネット通信の論理的エンティティとして "ポート" (ports) の概念に依存してきました。ポートには 2 つの目的があります: 第一に, 同じエンドポイントのペア間のトランスポートセッションを区別するための逆多重化識別子を提供し, 第二に, プロセスが接続するアプリケーションプロトコルと関連サービスを識別することもできます。ストリーム制御伝送プロトコル (Stream Control Transmission Protocol, SCTP) [RFC4960] やデータグラム輻輳制御プロトコル (Datagram Congestion Control Protocol, DCCP) [RFC4342] などの新しいトランスポートプロトコルも, 通信セッションにポートの概念を採用し, TCP および UDP (および UDP の変形である UDP-Lite [RFC3828]) と同じ方法で 16 ビットのポート番号を使用しています。
ポート番号は, インターネット上のアプリケーションとサービス識別の元祖であり最も広く使用されている手段です。ポートは 16 ビットの数値であり, 送信元ポート番号と宛先ポート番号の組み合わせが通信エンドシステムの IP アドレスと共に, 特定のトランスポートプロトコルのセッションを一意に識別します。ポート番号は, ポート番号 23 の "telnet" やポート番号 80 の "http" ("www" および "www-http" も含む) など, 関連するサービス名でも知られています。
すべての関係者 —— サービスを実行するホスト, 他のホスト上のサービスにアクセスするホスト, およびサービスを制限する中間デバイス (ファイアウォールや NAT など) —— は, 特定の宛先ポートにどのサービスが対応するかについて合意する必要があります。これは最終的には接続のエンドポイント間でのみ意味を持つローカルな決定ですが, 多くのサービスでは, 可能な場合にサーバーが通常リッスンするデフォルトポートを持つことが一般的であり, これらのポートはインターネット割当番号機関 (Internet Assigned Numbers Authority, IANA) によってサービス名とポート番号レジストリ [PORTREG] を通じて記録されます。
時間の経過とともに, 特定のポート番号が必ずしも特定のサービスを意味するという仮定は, より真実でなくなる可能性があります。たとえば, 同じホスト上の同じサービスの複数のインスタンスは通常同じポートでリッスンできず, 同じ NAT ゲートウェイの背後にある複数のホストは, ユーザーが手動で設定した静的ポートマッピングを使用する場合でも, NAT ポートマッピングプロトコル [NAT-PMP] やインターネットゲートウェイデバイス [IGD] などのポートマッピングプロトコルを使用して自動的に設定された動的ポートマッピングを使用する場合でも, NAT ゲートウェイの外部側の同じポートへのマッピングをすべて持つことはできません。
アプリケーションは, ポート番号を直接使用したり, UNIX の getservbyname() などのシステムコールを介してサービス名に基づいてポート番号を検索したり, DNS SRV レコード [RFC2782] [DNS-SD] のクエリを実行してポート番号を検索したり, TCP ポートサービスマルチプレクサ (TCP Port Service Multiplexer, TCPMUX) [RFC1078] などのさまざまな他の方法でポート番号を決定したりできます。
アプリケーションおよびアプリケーションレベルプロトコルの設計者は, 特定のアプリケーション用の割り当てられたサービス名とポート番号を IANA に申請でき, 割り当て後は他のアプリケーションがそのサービス名またはポート番号を通信セッションに使用しないと仮定できます。アプリケーション設計者には, アプリケーションが必要としない場合, 対応する固定ポート番号なしで割り当てられたサービス名のみを要求するオプションもあります, たとえば実行時に DNS SRV レコードを使用してポート番号を動的に検索するアプリケーションなどです。ポート番号空間は有限であるため (したがって保護は重要な目標です), 可能な限りポート番号の代わりにサービス名を使用する代替案が推奨されます。