ポート番号は、IANA (Internet Assigned Numbers Authority) によって 割り当てられており、現在はポート番号を割り当てる際に TCP と UDP の両方のプロトコルを割り当てることになっている。 そのため、ほとんどのサービスに対して、 たとえ TCP だけのサービスの場合であっても、対応する項目が二つあることになる。
1024 より小さいポート番号 (いわゆる 'low numbered' ポート) は 管理者 (root) 権限によってのみ使用することができる (bind(2), tcp(7), udp(7) 参照)。 これは、これらのポートに接続するクライアントに対して、 そのポートで動いているサービスが標準的な実装であり、 その計算機のユーザーが動かしている 不正なサービスではないことを保証するためである。 IANA に明記されているよく使用されるポート番号は、 通常このような管理者だけが使用できる範囲に配置される。
services ファイルにあるサービスに対する項目があっても、必ずしもそのサービスが現 在その計算機で動いている訳ではない。利用可能なインターネットサービスの設定に ついては inetd.conf(5) に記述されている。ただし、すべてのサービスが inetd(8) によって起動されるわけではないので、 inetd.conf(5) には書かれていないサービスもあることに注意する必要がある。 特に、ネットニュース (NNTP) や メール (SMTP) のサーバーは、システム起動時の スクリプトから起動されることが多い。
services ファイルの場所は、 /usr/include/netdb.h 中の _PATH_SERVICES によって定義されている。 この値は通常 /etc/services に設定されている。
1 行につき 1 サービスが記述されており、その形式は以下の通りである。
それぞれの欄の区切りには、スペースまたはタブが使用される。
コメントはシャープ (#) で始まり、その行の終わりまでがコメントとみなされる。 空行は飛ばされる。
行の始めのスペースは無視されないので、 service-name は、行頭から書かなければならない。 service-names は、スペースとタブ以外の印字可能な文字なら何でもよいが、しかしながら プログラムの実行時の問題を少なくするような文字を選択すべきである。 例えば、a-z 、0-9 、ハイフォン (-) を使用するのが無難と思われる。
指定された形式に合わない行はあってはならない (現在は、そのような行は getservent(3), getservbyname(3), getservbyport(3) によって無視される。しかし、その場合の挙動は信頼できない)。
古いバージョンとの整合性の問題から、実際には port 番号と protocol の間のスラッシュ (/) は、スラッシュかコンマ (,) のどちらでも構わない。 しかしながら、今なおコンマを使用するのは望ましいことではない。
このファイルは、Yellow Pages/NIS や BIND/Hesiod のようなネットワーク上の名前 サービスを用いて、ネットワークを通じて配布される可能性もある。
services ファイルの見本を以下に示す。
netstat 15/tcp qotd 17/tcp quote msp 18/tcp # message send protocol msp 18/udp # message send protocol chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp 21/tcp # 22 - unassigned telnet 23/tcp
BUFSIZ (現在は 1024) 文字より長い行は、 getservent(3), getservbyname(3), getservbyport(3) により無視される。さらに、このことは次の行が正しく解釈されない原因となる。
ポート番号の割り当てを定めている RFC (最新版は RFC 1700、別名 STD0002)
Yellow Pages Service / NIS のドキュメント
BIND/Hesiod Service のドキュメント