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

標準実装 編集

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

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

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

具体例 編集

以下の例は、個々のプログラム(およびそのバージョン)ごとにどのポートを使うかを示している。例えば、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のようなスーパーサーバが要求を待ちうけ、必要に応じて各種サービスを起動させるのが一般的である。

関連項目 編集

参考文献 編集

外部リンク 編集

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