ポートマップ

ポートマップまたはポートマッパー（portmap、rpc.portmap、portmapper、rpcbindなどと実装によって名前は異なる）とは、ONC RPC プログラム番号をポート番号に対応付けるサービスを行うデーモン。

 標準実装 
ポートマップは、Unix系システムで動作するデーモンであり、RPCプログラム番号をDARPAプロトコルのポート番号に変換する。使用するポート数をなるべく最小化することを意図しているが、実際にはそれほどよく使われるものではないため、多数のポートを使うことはない。RPC を行う際には必ずなければならない。

RPCサーバが起動すると、ポートマップに対して、待ち受けるべきポート番号と対応すべきRPCプログラム番号が通知される。クライアントがあるプログラム番号に対してRPCを行う場合、最初にサーバ上のポートマップに対してプログラム番号を送信し、RPCを行うべきポート番号を得る。従って、ポートマップはRPCサーバプログラムが起動される前に動作していなければならない。

ポートマップは BSD 4.3 で最初に実装された。NIS、NFS、FAM 以外ではほとんど使われない。

 具体例 
以下の例は、個々のプログラム（およびそのバージョン）ごとにどのポートを使うかを示している。例えば、NFSとしてバージョン 2 と 3 と 4 が動作しており、TCPのポート 2049 とUDPのポート 2049 を通してアクセス可能である。クライアントはTCPとUDPのどちらかを選んで通信する。

  $ rpcinfo -p 
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100024    1   udp  32770  status
    100021    1   udp  32770  nlockmgr
    100021    3   udp  32770  nlockmgr
    100021    4   udp  32770  nlockmgr
    100024    1   tcp  32769  status
    100021    1   tcp  32769  nlockmgr
    100021    3   tcp  32769  nlockmgr
    100021    4   tcp  32769  nlockmgr
    100005    1   udp    644  mountd
    100005    1   tcp    645  mountd
    100005    2   udp    644  mountd
    100005    2   tcp    645  mountd
    100005    3   udp    644  mountd
    100005    3   tcp    645  mountd

 代替手法 
UNIXおよびLinux系システムでは、/etc/services というファイルにサービス/プロトコル名称とポート番号の対応表がある。これを使った静的なポートマッピングでは、inetdのようなスーパーサーバが要求を待ちうけ、必要に応じて各種サービスを起動させるのが一般的である。

関連項目
 Network File System
 ネットワーク・インフォメーション・サービス
 遠隔手続き呼出し (RPC)
 TCP Wrapper

参考文献
Ethan McCallum The Watchful Eye of FAM Linuxdevcenterの2004年12月16日の記事

外部リンク
 portmap(8) FreeBSD一般コマンドマニュアル
  - ONC RPC ポートマッピング・プロトコルの仕様

Category:インターネットのプロトコル
Category:インターネット標準
Category:分散処理
Portmap