【问题标题】:When you're using rpcgen, how does the caller find the callee?使用rpcgen时,调用者如何找到被调用者?
【发布时间】:2009-03-23 21:53:47
【问题描述】:

这是我对它的理解:

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

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

【问题讨论】:

    标签: rpc


    【解决方案1】:

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

    详情请见RFC 1833 - Binding Protocols for ONC RPC Version 2

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      此时,端点映射器可以让开,让客户端直接打开与 MULT 服务本身的会话。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多