什么是RPC?为何如此重要?


15

从一开始,我就听说您从未在Windows中禁用过远程过程调用服务。这样做会导致过去难以克服的可怕事情(我相信这样做不再容易,但现在更容易解决)。但是,我不知道它做什么,或者为什么它对于整个操作系统基本上如此重要。

是否可以总结RPC服务的用途,为什么还有许多其他服务/应用程序/操作依赖于它来运行?

Answers:


24

Windows的设计者决定通过RPC进行许多对话,以便他们可以在本地或通过网络进行对话。

其中包括Active Directory,大多数MMC控制台,某些控制面板小程序(例如设备管理器)的功能,管理工具中的许多功能,以及可能的内部Windows组件。

我相信,即使您正在访问MMC控制台,例如compmgmt.msc要查看有关本地计算机的信息,也基本上是RPC到本地主机(尽管我可能错了)。

可以将RPC视为TCP / IP之上的一个级别,它被许多Windows组件用作低级(且不安全)的可联网通信框架。为什么不直接使用TCP / IP?在设计Windows NT(1993年发布的初始版本)时,除了TCP / IP以外,您还拥有其他网络协议,例如Netware(SPX / IPX),NetBIOS,AppleTalk(我想Windows早就支持此协议)。 ,可能是错误的...)等。因此,这是Windows组件能够与本地计算机或远程计算机上的其他组件通信的一种与网络无关的方式。


2
认真吗 没有投票?这是一个很好的答案+1
Dave

6

事实是:RPC在LOCAL机器中被广泛使用,但是对于HOST到HOST的使用,它主要由Microsoft内部使用,很少由第三方使用


本地 RPC的主要用法:

  • 原始RPC组件,例如注册表,Netlogon,防火墙,服务控制,SQL Server ...,您可以在“主机到主机”部分的列表中看到其中的一些组件。

  • 许多DCOM组件(基于RPC,例如C的C ++包装器)都包含COM +组件。

您可以运行dcomcnfg来查看您的计算机上有多少个DCOM组件:

Excel,Internet Explorer,Visual Studio ...可以自动化,因为它们是DCOM组件:

在此处输入图片说明

甚至资源管理器的“文件属性”对话框也是DCOM组件,有趣吗?如果从DCOMCNFG的启动权限的“编辑限制”中删除所有ACL,则不仅管理工作!!!甚至在资源管理器中显示文件属性!

在此处输入图片说明


从主机到主机的 RPC主要用法:

  • 诸如“计算机管理”,“注册表编辑器”之类的远程管理内容时,可以让它连接到远程计算机!下划线是RPC over SMB协议(TCP端口445,称为文件共享)。

    在此处输入图片说明

您可以使用rpcdump或ifids工具在远程计算机上转储所有RPC接口,请参见以下结果,您可以看到许多系统管理接口(它们当然也可以在本地使用):

[MS-RSP]: Remote Shutdown Protocol 
[MS-TSCH]: Task Scheduler Service Remoting Protocol 
[MS-TSCH]: Task Scheduler Service Remoting Protocol 
[MS-TSCH]: Task Scheduler Service Remoting Protocol 
[MS-EVEN6]: EventLog Remoting Protocol 
Adh APIs
AppInfo
Base Firewall Engine API
DHCP Client LRPC Endpoint
DHCPv6 Client LRPC Endpoint
DfsDs service
EFSK RPC Interface
Event log TCPIP
Fw APIs
Group Policy RPC Interface
IP Transition Configuration endpoint
IdSegSrv service
Impl friendly name
KeyIso
LicenseManager
NRP server endpoint
NSI server endpoint
NetSetup API
Ngc Pop Key Service
Proxy Manager client server endpoint
Proxy Manager provider server endpoint
Secure Desktop LRPC interface
Security Center
UserMgrCli
WM_WindowManagerRPC\Server
WinHttp Auto-Proxy Service
Witness Client Test Interface
Witness Client Upcall Server
XactSrv service
...

Received 499 endpoints.

为什么RPC很重要?仅仅因为每个成熟的系统都需要跨进程的通信机制,所以一个工具集可以生成存根/代理(打包/解压缩对象的标准)。每个系统都有相似的东西。您必须知道Android,其Binder与DCOM的设计非常相似。

实际上,HOST-to-HOST RPC并未广泛传播,主要是因为它们复杂且不透明,由于经常阻塞445或135端口,因此对Internet不友好,并且身份验证体验很差。人们更喜欢选择HTTPS服务器来调用远程组件,它更直接,更可控。


2

远程过程调用(RPC)

来源:http//searchsoa.techtarget.com/definition/Remote-Procedure-Call

远程过程调用(RPC)是一种协议,一个程序可以使用该协议来向位于网络中另一台计算机上的程序请求服务,而无需了解网络详细信息。(过程调用有时也称为函数调用或子例程调用。)RPC使用客户端/服务器模型。请求程序是客户端,服务程序是服务器。像常规或本地过程调用一样,RPC是一种同步操作,需要暂停请求的程序,直到返回远程过程的结果为止。但是,使用共享相同地址空间的轻量级进程或线程可以同时执行多个RPC。

当将使用RPC的程序语句编译为可执行程序时,在已编译的代码中将包含一个存根,该存根充当远程过程代码的代表。当程序运行并发出过程调用时,存根将接收请求并将其转发到本地计算机中的客户端运行时程序。客户端运行时程序了解如何寻址远程计算机和服务器应用程序,以及如何通过网络发送请求远程过程的消息。同样,服务器包括一个运行时程序和与远程过程本身接口的存根。结果以相同的方式返回。

有几种RPC模型和实现。流行的模型和实现是开放软件基金会的分布式计算环境(DCE)。电气和电子工程师协会在1991年11月ISO / IEC CD 11578 N6561,ISO / IEC的ISO远程过程调用规范中定义了RPC。

RPC跨越网络通信的开放系统互连(OSI)模型中的传输层和应用程序层。RPC使开发包含包含分布在网络中的多个程序的应用程序变得更加容易。

客户端/服务器通信的替代方法包括消息队列和IBM的高级程序到程序通信(APPC)。


Microsoft提供的更多信息:http : //msdn.microsoft.com/zh-cn/library/windows/desktop/aa378651(v=vs.85).aspx

目的
Microsoft远程过程调用(RPC)定义了用于创建分布式客户端/服务器程序的强大技术。RPC运行时存根和库管理与网络协议和通信有关的大多数过程。这使您可以专注于应用程序的细节,而不是网络的细节。
在适用的情况下,
RPC可以用于所有基于Windows操作系统的客户端/服务器应用程序中。它还可以用于为包括Unix和Apple这样的操作系统的异构网络环境创建客户端和服务器程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.