networking - RPC 和 TCP 行为

标签 networking tcp rpc asa dce

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

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

最佳答案

请注意,关于 RPC 协议(protocol),没有任何偏离标准 TCP 的地方。

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

通常,为了让 RPC 客户端联系/调用 RPC 服务器,它首先联系某种查找服务器(在 SunRPC 中称为 portmapper 或 rpcbind),它会回复 RPC 的位置(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 服务器和客户端之间的端口。

关于networking - RPC 和 TCP 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35392812/

相关文章:

c - 将 getaddrinfo 绑定(bind)到特定接口(interface)(源 IP)

networking - SSL Pinning 后如何以及在何处检测和解析域名

python-3.x - 将 docker 容器环回绑定(bind)到主机环回

sockets - 当其中一个数据包被丢弃时,TCP 协议(protocol)将如何延迟数据包传输?

mysql - Perl Web 应用程序问题 : DBI connect failed: Can't create TCP/IP socket (10106)

firebase - 如何通过RPC监听Firestore

java - 如何正确序列化/反序列化Java Object[]?

c# - 如何从任何ip和任何端口接收UDP数据包?

objective-c - NSString isEqualTo 数据包不起作用?

没有 services-config.xml 的 Flash RemoteObject Weborb 连接(无 Flex)