2

有人可以从网络的角度描述 RPC(SUN 和/或 DCE)是什么以及它为什么偏离标准 TCP 行为吗?

我理解的方式是客户端使用唯一源端口连接到服务器,然后在 TCP 三向握手完成后切换源端口。我使用 ASA 防火墙,因此当 DCE RPC 的检查未启用时,这种行为变得非常明显,因为防火墙会阻止它,因为它将它视为威胁。我已经阅读了一些 MS TechNet 文章和其他网站定义,包括观看大约五个 Youtube 视频,这些视频似乎都从程序员的角度进行了解释,但由于我不是程序员,我还没有完全理解这个概念。

4

1 回答 1

1

请注意,关于 RPC 协议,没有任何东西偏离标准 TCP。

SunRPC 或 DCE RPC 工作在 UDP 之上(至少 SunRPC 可以使用 UDP)或 TCP 之上。

通常,为了让 RPC 客户端联系/调用 RPCserver,它首先联系某种查找服务器(在 SunRPC 的情况下称为 portmapper 或 rpcbind),该服务器回复实际位置(IP 地址和端口号)服务器正在运行。

所以从网络的角度来看:

  • RPC 服务器侦听随机端口号,每次(重新)启动服务器程序时,该端口号可能会发生变化。
  • 启动时,RPC 服务器连接到端口映射器,该端口映射器在一个众所周知的端口上运行,并使用它正在侦听的 IP 地址和端口号注册自己。

通常,portmapper 服务与 RPC 服务器程序在同一台机器上运行。

当客户端想要连接或调用 RPC 服务时,它会执行以下操作:

  • 在众所周知的/标准目标端口上连接到端口映射器,并询问它要连接的特定服务在哪里。
  • portmapper 回复客户端请求的服务的 IP 地址和端口号。
  • 客户端断开与端口映射器的连接
  • 客户端使用 pormapper 提供的 IP 地址和端口号与服务建立新连接。
  • 客户端通过这个新连接调用 RPC 服务,客户端可以将其用于多个 RPC 调用。
  • 这些 RPC 调用只是在 TCP 连接之上交换的应用程序消息。

(在使用 UDP 而不是 TCP 的情况下,它的工作原理大致相同,但自然不会通过网络执行连接设置/拆除)

这给防火墙带来了一个问题,因为服务器侦听随机选择的端口号,因此无法在管理上允许访问特定的端口号。相反,想要支持这种设置的防火墙需要打开 portmapper 端口,捕获到 portmapper 的知名端口的 RPC 消息,检查与 portmapper 交换的消息内容以从端口中提取 IP 地址和端口号。 RPC 消息(端口映射器本身实现为 RPC 服务器),以便在 RPC 服务器和客户端之间动态打开端口。

于 2016-02-14T14:37:26.877 回答