事前に指定されていないポートを知るためには
固定のTSAPアドレスの利用は、少数で普遍の主要なサービス(Webサーバーなど)に関してはうまくいくかもしれない。しかしながら、
事前にわかるTSAPアドレスを持っていないプロセスや、一時的にしか存在しないプロセスに接続する場合も多い
。
代表的なポートにポートマッパーでlisten,その他のプロセスのコネクションを確立させる
これに対応するために他の手法、すなわち、
ポートアッパー(portmapper)と呼ばれる特別なプロセル
を利用する手法がよく使われる。ユーザーは、ある与えられたサービス名、例えば「BitTorrent」に対応するTSAPアドレスを見つけ出すために、周知のTSAP(well-know TSAP)でリッスン(listen)しているポートマッパーに接続
する。そして名前サーバーにサービス名の指定を含むメッセージを送ると、ポートマッパーは対応するTSAPアドレスを送り返してくれる。ユーザーはポートマッパーとのコネクションを開放し、所望のサービスとのコネクションを新規に確立
する
- ポートマッパーを介してサービスとのコネクションを確立する
ポートマッパー
ポートマッパーは、ポート番号を管理する機能
です。クライアントは、利用可能なポート番号を知らなくても、ポートマッパーが動作する代表ポート番号へコネクション要求を発行することで、メッセージブローカとのコネクションを獲得できます
。ポートマッパーは、デフォルトで動的にポート番号を割り当てます。
メッセージブローカ起動時にポート番号を指定して割り当てることができます。注意
静的にポート番号を割り当てた場合でも、各接続サービスを利用する場合は、ポートマッパーの代表ポート番号を使用してください。
portmap プロトコル
portmap プログラムは、RPC プログラムとバージョン番号を、トランスポート固有のポート番号にマップします。portmap プログラムは、リモートプログラムの動的結合を可能にします。
1.
サーバーが portmap に登録する
2.
クライアントは、サーバーのポートを portmap から得る
3.
クライアントが、サーバーを呼び出す
予約ポート番号は少ないのに対して、リモートプログラム数は非常に多くなる可能性があります。したがって、よく知られたポートでポートマッパーを実行しておけば、その他のリモートプログラムのポート番号はポートマッパーに問い合わせることによって得られます。図 E–1 では、 a、111、b、c はポート番号を表し、111 はポートマッパーに割り当てられたポート番号です。
初期コネクション・プロトコルのプロセスサーバーで待っているときは代替をする
マシン上に存在している多くのサーバー・プロセスはまれにしか使用されない。それゆえ全てのサーバー・プロセスをあらかじめ起動しておいて、TASPアドレスを一日中リッスンし続けるのは無駄が多い。図6−9に、
初期コネクション・プロトコル(initial connection protocol)
として知られる代替手法を示す。
同時に複数のポートを持つプロセスサーバー
全てのサーバー・プロセスが周知のTSAPで待ち受ける代わりに、遠隔のユーザーにサービスを提供する各マシンが、
頻繁には利用されないサーバー・プロセスのプロキシ(代理)として振る舞う特別なプロセス・サーバー(process server)
を持つ。このサーバーはUNIXシステム上ではinetd
と呼ばれている。プロセス・サーバーは同時にいくつかのポートを受け持ち、コネクション要求を待つ
。
プロセスサーバーがサーバー・プロセスを生成して要求に応じる
プロセス・サーバーは要求を受けとった後、
ユーザーの要求するサーバー・プロセスを生成
する。生成されたサーバー・プロセスは、ユーザーとのコネクションを継承し、要求された仕事を実行
する。プロセス・サーバーは新規の要求を待ち受けるために、再び待ち受ける状態に戻る
。この手法は、サーバー・プロセスが要求に応じて起動できる場合にのみ適用できる