エフェメラルポート: ephemeral port)とは、インターネットプロトコル (IP) を用いた通信を行うため、TCP/IPプロトコルスタックが事前に定義されている範囲内から自動的に割り当てるポートである。日本語に直訳すると「短命なポート」「一時的なポート」という意味になる。Transmission Control Protocol (TCP)、User Datagram Protocol (UDP)、Stream Control Transmission Protocol (SCTP) は典型的に、クライアントサーバ型通信において、クライアント側の一時的なポート番号としてエフェメラルポートを使用する[注釈 1]サーバ側での通信セッション終了時に、ウェルノウンポートを使ってリッスンしているサービスと最初に接続したクライアントとの通信を継続するためにエフェメラルポートが使われることもある。

エフェメラルポートは接続している間だけ一時的に割り当てられる。通信セッション終了後、ポートは再び利用可能な状態になる。

範囲

編集

RFC 6056 では、エフェメラルポートとしてポート番号1024から65535までの範囲を使うよう提言している (3.2. Ephemeral Port Number Range)。それ以前は、IANAがポート番号49152から65535までを"DYNAMIC AND/OR PRIVATE PORTS"(動的・私用ポート)と定めていたため、この範囲をエフェメラルポートとして使うものと認識されていた (同 2.1. Traditional Ephemeral Port Range)。

FreeBSDはバージョン5.0-RELEASE以降でIANAの提言する範囲(49152から65535まで)をエフェメラルポートとして使っている[1]。それよりも前のバージョンでは1024から5000までの範囲を使っていた。

多くのLinuxカーネルは32768から60999までの範囲をローカルポートとして使う[2]。割り当て範囲は/proc/sys/net/ipv4/ip_local_port_rangeに書かれており、ここを書き換えることで変更可能である。

IBMAIXでは、TCP/UDPともにデフォルトで32768から65535までの範囲をエフェメラルポートとして使う[3]

Microsoft Windowsの場合、Windows VistaWindows Server 2008以降はIANAの提言する範囲(49152から65535まで)を動的ポートとして使用している[4]。それよりも前のバージョン(Windows XPWindows Server 2003以前)はデフォルト設定で1025から5000までの範囲を動的ポートとして使用していた[4]

脚注

編集

注釈

編集
  1. ^ BSDソケットでは、サーバ側アプリケーションはbind()によってソケットを特定のポートに明示的にバインド(関連付け)する必要がある。クライアント側アプリケーションがbind()を使ってソケットを特定のポートに明示的にバインドすることはまれだが、connect()を使ってサーバに接続すると、ソケットはエフェメラルポートの中からOSが自動的に選択したポートにバインドされる。

出典

編集
  1. ^ FreeBSD/i386 5.0-RELEASE Release Notes”. The FreeBSD Project (2003年1月14日). 2021年11月7日閲覧。
  2. ^ IP Sysctl” (英語). The Linux Kernel documentation. 2021年6月27日閲覧。 “The default values are 32768 and 60999 respectively.”
  3. ^ Ephemeral ports - IBM Documentation
  4. ^ a b The default dynamic port range for TCP/IP has changed in Windows Vista and in Windows Server 2008 - Windows Server”. Microsoft Docs. 2021年8月21日閲覧。

関連項目

編集

参考文献

編集

この記事は2008年11月1日以前にFree On-line Dictionary of Computingから取得した項目の資料を元に、GFDL バージョン1.3以降の「RELICENSING」(再ライセンス) 条件に基づいて組み込まれている。

外部リンク

編集