3

これは私が理解していることです:

.x ファイルは、サーバーとクライアントによって共有されるインターフェースとパラメーターを定義します。rpcgen でコンパイルすると、.h、_xdr.c、_clnt.c、および _svc.c が生成されます。_clnt.c はスタブで、_svc.c はスケルトンですよね?

彼らが 2 人のコミュニケーションを仲介していることは理解していますが、どうしてですか? また、私が実行した例では、接続先のマシンの IP アドレスを指定していましたが (この例では、同じものを使用していましたが、127.0.0.1)、ポートを指定していません。予約済みのポートはありますか?

4

2 に答える 2

5

手順には 2 つのステップがあります。ポート 111 で実行されているポート マッパーがあり、RPC サービスが登録され、このサービスによって検出されますが、それ自体が任意のポートで実行される可能性があります。

詳細については、RFC 1833 - ONC RPC バージョン 2のバインディング プロトコルを参照してください。

于 2009-03-23T22:17:42.093 に答える
1

RPCサーバーマシンには、エンドポイントマッパーと呼ばれる実行中のプロセスがあります(これは特にONC RPCに適用されますが、他のRPCメカニズムも同様です)。このプロセスは既知のポートで実行されるため、誰でも接続できます(もちろん、セキュリティと存在が許可されます)。

RPCサーバーが起動し、エンドポイントマッパーに登録して、コード(MULTなど)とポート番号を指定します。エンドポイントマッパーは、後で使用するためにその情報を忠実に保存します。

+---------+                             +--------+
| Mapper, | <- Register MULT, port Y -- | Server |
| known   |                             | for    |
| port X  |                             | MULT   |
+---------+                             +--------+

その後、クライアントがIPアドレスを使用してエンドポイントマッパーに接続すると、目的のコード(MULT)が提供され、エンドポイントマッパーが最終的な宛先を提供します。これで、クライアントはMULTサービスのIPアドレスとポートの両方を認識します。

+--------+                     +---------+
| Client | -- Request MULT  -> | Mapper, |
|        | <- Return port Y -- | known   |
|        |                     | port X  |
+--------+                     +---------+

その時点で、エンドポイントマッパーは邪魔にならないようにして、クライアントにMULTサービス自体とのセッションを直接開かせることができます。

+--------+                       +--------+
| Client | -- Connect to MULT -> | Server |
|        | <-     Do stuff    -> | for    |
|        |                       | MULT   |
+--------+                       +--------+
于 2009-03-23T23:12:55.190 に答える