RPC和TCP的行为

3

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

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

1个回答

2
请注意,RPC协议没有任何偏离标准TCP的内容。SunRPC或DCE RPC基于UDP(至少SunRPC可以使用UDP)或TCP运行。通常,为了使RPC客户端能够联系/调用RPC服务器,它首先会联系某种查找服务器(在SunRPC的情况下称为portmapper或rpcbind),后者会回复实际服务器运行的位置(IP地址和端口号)。因此,从网络角度来看:
- RPC服务器监听一个随机端口号,每次该服务器程序(重新)启动时可能会更改。 - 在启动时,RPC服务器连接到运行在众所周知端口上的端口映射器,并向其注册自己正在侦听哪个IP地址和端口号。 - 通常,端口映射器服务运行在与RPC服务器程序相同的计算机上。
当客户端想要连接或调用RPC服务时,它执行以下操作:
  • 连接到端口映射器,使用已知/标准目标端口,并询问它要连接的特定服务在哪里。
  • 端口映射器回复客户端所请求的服务的IP地址和端口号。
  • 客户端关闭与端口映射器的连接。
  • 客户端使用端口映射器提供的IP地址和端口号建立到服务的新连接。
  • 客户端通过这个新连接调用RPC服务,客户端可以使用这个连接进行多次RPC调用。
  • 这些RPC调用只是在TCP连接之上交换的应用程序消息。

(如果使用UDP而不是TCP,则工作方式基本相同,但没有在网络上执行自然的连接设置/拆除)

这对于防火墙来说是一个问题,因为服务器侦听随机选择的端口号,无法行政地允许访问特定的端口号。相反,想要支持这种设置的防火墙需要打开端口映射器端口,捕获发送到端口映射器的那个众所周知的端口的RPC消息,检查与端口映射器交换的消息内容以从RPC消息中提取IP地址和端口号(端口映射器本身被实现为一个RPC服务器),以便动态地在RPC服务器和客户端之间打开一个端口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接