Networking RPC&;TCP行为

Networking RPC&;TCP行为,networking,tcp,rpc,asa,dce,Networking,Tcp,Rpc,Asa,Dce,有人能从网络的角度描述什么是RPC(SUN和/或DCE)以及它为什么偏离标准TCP行为吗 我的理解是,客户机通过一个唯一的源端口连接到服务器,然后在TCP三方握手完成后切换源端口。我使用ASA防火墙,因此当未启用DCE RPC检查时,这种行为变得非常明显,因为防火墙会阻止它,因为它将其视为威胁。我已经阅读了一些MS TechNet文章和其他网站定义,包括观看了大约五个Youtube视频,这些视频似乎都是从程序员的角度来解释的,但我还没有完全理解这个概念,因为我不是程序员。请注意,关于RPC协议,

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


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

请注意,关于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交换的消息内容,以从RPC消息中提取IP地址和端口号(portmapper本身实现为RPC服务器)以便动态打开RPC服务器和客户端之间的端口