3

这是我对它的理解:

.x 文件定义了服务器和客户端共享的接口和参数。当您使用 rpcgen 编译它时,它会生成 .h、_xdr.c、_clnt.c 和 _svc.c。_clnt.c 是存根,_svc.c 是骨架,对吧?

我知道他们是两者之间的沟通的中间人,但怎么会呢?此外,我看到运行的示例让您指定要连接的机器的 IP 地址(在示例中它使用相同的 IP 地址,127.0.0.1),但您没有指定端口。它有保留端口吗?

4

2 回答 2

5

该程序有两个步骤。有一个端口映射器在端口 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 回答