什么是 RPC,为什么它如此重要?

red*_*lex 18 windows services

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

是否可以总结一下 RPC 服务的用途以及为什么这么多其他服务/应用程序/操作依赖它来运行?

Law*_*ceC 28

Windows 的设计者决定通过 RPC 使许多事物相互通信 - 这样他们就可以在本地或通过网络进行通信。

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

我相信即使当您访问 MMC 控制台时,喜欢compmgmt.msc查看有关本地计算机的内容,它也基本上是 RPC 到 localhost(不过我可能是错的)。

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

  • 严重地?没有点赞?这是一个很好的答案+1 (2认同)

小智 6

真相是:RPC在LOCAL机器上被广泛使用,但是对于HOST-to-HOST的使用,主要是微软内部使用,第三方很少使用


LOCAL RPC主要用途:

  • 原始 RPC 组件,例如 Registry、Netlogon、Firewall、Service Control、SQL Server……您可以在“HOST-to-HOST”部分的列表中看到其中的一些。

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

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

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

在此处输入图片说明

连资源管理器的文件属性对话框也是DCOM组件,好笑吗?如果您从 DCOMCNFG 的启动权限的“编辑限制”中删除所有 ACL,您将无法做任何事情,不仅管理工作!,甚至在资源管理器中显示文件属性!

在此处输入图片说明


HOST-to-HOST 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.
Run Code Online (Sandbox Code Playgroud)

为什么 RPC 很重要?正因为每个成熟的系统都需要一个跨进程的通信机制,一个生成存根/代理的工具集,一个打包/解包对象的标准。每个系统都有类似的东西。你一定知道Android,它的Binder和DCOM的设计非常相似。

事实上,HOST-to-HOST RPC并没有普及,主要是因为它们复杂不透明,445或135端口经常被阻塞,对互联网不友好,认证体验不好。人们更喜欢选择HTTPS服务器来调用远程组件,它更直接和可控。


Dev*_*vid 2

远程过程调用 (RPC)

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

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

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

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

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

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


这里有来自微软的更多信息:http://msdn.microsoft.com/en-us/library/windows/desktop/aa378651 (v=vs.85).aspx

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