ちょっと認識が間違っていたので。メモ。
エフェメラルポートとは、プロトコルなどのように特定の用途が定められておらず、一時的な通信目的の際に利用できるポート。主にクライアント側で利用される。
クライアントからサーバにリクエストを送る際に、空いているポートを選んで通信を行う。通信が終わればそのポートは再び解放される。エフェメラルポートとされるポート番号は1024~65535番だが、基本的な割り当ては1024~5000番の間で行われることが多い
http://dic-it.fideli.com/dictionary/m/word/w/11001/index.html
と説明されることが多い。この解説文はおおむね問題ないが、「基本的な割り当ては1024~5000番の間で行われることが多い」という部分だけは若干問題がある。MacOS XやSoraris、FreeBSD では、49152~65535がエフェメラルポートの割り当て範囲である。現在、IANA は「49152~65535」の利用を推奨しており、各OSはそれに従っている格好だ。「1024~5000」はかつてBSDによって用いられていた割り当て範囲で、今それで割り当てているのは、XP 以前のWindows である。
Windows のTCP/IPまわりは、Windows 3.x の頃に開発されたものが基本となっているが、これはバークレーのものを忠実に守っているために、エフェメラルポートの割り当て範囲もまるで同じになっているようだ。*1 Vista になって、この部分にもメスが入り、全面的に書き換えられたようで、Vistaにおいてはエフェメラルポートは、「49152~65535」の範囲で割り当てられるように変更されている。
これまで49152から65535までが使われる・・・と思いこんでいたけど、
OSによって違いがあるようだ。
AIX,HP-UX,FreeBSD,OpenBSD : 49152-65535
IRIX : 1024-65535
Solaris : 32768-65535
Linux kernel 2.2 : 1024-4999
Linux kernel 2.4以降 : 32768-61000
Windows (~2003、XP) : 1024-5000
Windows (Vista) : 49152-65535
特異なのが、Windows(~2003)とLinuxのKernel2.2。
アプリケーション作成時にはこれらのことも考えておかねば。。
特に1024-5000のポートを待ち受けに使う場合、エフェメラルポートと競合する可能性が高くなるだろう。
コメント