当你使用rpcgen时,调用者如何找到被调用者?

时间:2009-03-23 21:53:48

标签: rpc

这就是我对它的理解:

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

我明白他们介于2之间的沟通,但是如何呢?此外,我看到运行的示例有你指定要连接的机器的IP地址(在示例中它使用相同的,127.0.0.1),但是您没有指定端口。它有保留端口吗?

2 个答案:

答案 0 :(得分:5)

该程序有两个步骤。端口映射器在端口111上运行,RPC服务通过此服务进行注册并被此服务发现,但本身可以在任意端口上运行。

有关详细信息,请参阅RFC 1833 - Binding Protocols for ONC RPC Version 2

答案 1 :(得分:1)

在RPC服务器计算机上,有一个运行的进程称为终结点映射程序(这特别适用于ONC RPC,但其他RPC机制将类似)。此过程在已知的端口上运行,因此任何人都可以连接到它(安全性和存在允许,当然)。

RPC服务器将启动并向端点映射器注册自己,提供其代码(例如,MULT)和端口号,端点映射器将尽职地存储该信息以供以后使用:

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

当客户端随后使用IP地址连接到端点映射器时,它会提供所需的代码(MULT),然后端点映射器提供最终目标 - 现在客户端知道IP地址MULT服务的端口:

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

此时,端点映射器可以逐步退出并让客户端直接使用MULT服务本身打开会话。

+--------+                       +--------+
| Client | -- Connect to MULT -> | Server |
|        | <-     Do stuff    -> | for    |
|        |                       | MULT   |
+--------+                       +--------+