では、今日も授業を始める。今日のテーマはエフェメラルポートだ。
エフェメラルポートって、何それ!?
エフェメラルポートは、一時的に動的に使用されるポートのことだ。
サーバ側のポートはあらかじめ決められているウェルノウンポート番号などを利用するが、
クライアント側のポートは特に用途の決まっていないエフェメラルポートの中から適当に1つのポート番号を
一時的な利用のために動的に決めている。
動的に決めるってどういうこと!?
クライアントが通信するときに、今回はクライアントのポート番号として、何番を利用して、
次に通信するときには、別のポート番号を利用するというように、都度、動的(dynamic)にポート番号を決めている。
ポート番号が固定されず、都度、ポート番号が何番になるか決まるってことね。
エフェメラルポートはIANAでは49152~65535番を利用することを推奨している。
エフェメラルには、「短命な」という意味がある。エフェメラルポートは動的ポート(ダイナミックポート)ともいわれる。
エフェメラルポートはクライアント側で利用されるのね。
クライアントからサーバに通信するとき、
一般的にサーバ側のポートはウェルノウンポート番号になっているが、
このとき、クライアント側はエフェメラルポートの中から適当なポート番号を割り当てる。
クライアント側は、通信が終了するとそのポート番号は解放される(利用不可になる)。
クライアントが通信する度に、クライアント(送信元)が利用するポート番号が変わるから動的ポートといわれるのね。
サーバ側のポートで、25番はSMTPポートというように決まっていて、常に25番ポートを使う場合は静的ポートというのね。
エフェメラルポートは何番から何番なの?
エフェメラルポート番号はOSによって異なる。
例えば、Windows 2000、Windows XP、Windows Server 2003の動的ポート番号(エフェメラルポート)は、
1025番~5000番になっていた。
Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、
Windows 10、Windows 8、Windows 7、Windows Vistaの動的ポート番号(エフェメラルポート)は、
49152番~65535番になっている。
(参考)
https://support.microsoft.com/ja-jp/help/832017/service-overview-and-network-port-requirements-for-windows
https://support.microsoft.com/ja-jp/help/929851/the-default-dynamic-port-range-for-tcp-ip-has-changed-in-windows-vista
マイクロソフトは以前1025番~5000番を使用していたが、49152番~65535番に仕様変更したってこと?
うむ。ポート番号はInternet Assigned Numbers Authority (IANA)という組織が管理していて、
ウェルノウンポートやレジスタードポートなどが決まっている。
マイクロソフトはIANAに準拠するために、動的なポート番号(エフェメラルポート)を49152番~65535番に変更した。
コマンドとかで動的ポートがいくつになっているか確認できないの?
Windowsでクライアント側で使用される動的ポート番号は、以下のコマンドで確認ができる。
コマンドプロンプトを起動して、以下のnetshコマンドで確認してみよう。
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp
参考:
https://docs.microsoft.com/ja-jp/windows/client-management/troubleshoot-tcpip-port-exhaust
>netsh int ipv4 show dynamicport tcp
プロトコル tcp の動的ポートの範囲
---------------------------------
開始ポート : 49152
ポート数 : 16384
>netsh int ipv4 show dynamicport udp
プロトコル udp の動的ポートの範囲
---------------------------------
開始ポート : 49152
ポート数 : 16384
>netsh int ipv6 show dynamicport tcp
プロトコル tcp の動的ポートの範囲
---------------------------------
開始ポート : 49152
ポート数 : 16384
>netsh int ipv6 show dynamicport udp
プロトコル udp の動的ポートの範囲
---------------------------------
開始ポート : 49152
ポート数 : 16384
クライアント側で使用されるポート番号は49152番からで、ポート数が16384個だから、
49152番~65535番ってことね。
Linuxのエフェメラルポートは何番なの?
CentOS6やCentOS7の場合は、
32768番~60999番ポートがエフェメラルポート(動的ポート)になっている。以下のコマンドで確認できる。
このデフォルト値は設定変更で、ポート番号を変えることもできる。
cat /proc/sys/net/ipv4/ip_local_port_range
# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
#
60999 - 32768 + 1 = 28232個が使用可能なポート数ね。
CentOSは32768番~60999番を使っていて、最近のWindowsではIANA(Internet Assigned Number Authority)に準拠して、49152番~65535番を使っている。
では、今日はここまで。
は~い。
1.エフェメラルポートは、一時的に動的に使用されるポート
2.動的とはポート番号が固定されず、都度ポート番号が決まる
3.エフェメラルポートはIANAでは49152~65535番を利用することを推奨
4.エフェメラルには、「短命な」という意味がある
5.エフェメラルポートはクライアント側で利用されるポート番号
6.CentOS6、CentOS7のエフェメラルポートは32768番~60999番
7.Windows Server 2012、Windows10のエフェメラルポートは49152番~65535番