为什么需要rpc

2024-04-28

1. 为什么需要rpc

 首先要明确两个概念,rpc的中文全称是远程进程调用,意思就是一个机器调用另外一个机器的进程。更像是操作系统里的概念,而http是网络传输协议。
   所以这个问题应该是,为什么用自定义的tcp而不是http?
    rpc只是对底层协议的封装,对具体使用什么通信协议没有太多的要求 
   rpc主要包含两个方面,一个是传输协议,一个是序列化协议。
   关于序列化协议,其实大家说的rpc支持的二进制编码的序列化,用http也能实现,当然http头还是需要字符编码,但body可以用二进制编码。
   所以主要的原因在传输协议上。http传输有一个缺陷就是header在一个包中的占比会大,并且是字符编码的,所以会增加了很多无用的噪比。而tcp的报文头只有16byte相对来说要更小一些。
   rpc更像是一个操作系统的概念,或者说是一个思想,那就是程序员只管像调用本地的函数一样取调用一个远程函数,而不用管IO。
   至于负载均衡和服务发现,其实用http也可以实现。但单纯地使用http调用则少了这些特性。

为什么需要rpc

2. rpc是什么?如何处理?

远程过程调用 (RPC) 是一种协议,程序可使用这种协议向网络中的另一台计算机上的程序请求服务。由于使用 RPC 的程序不必了解支持通信的网络协议的情况,因此 RPC 提高了程序的互操作性。在 RPC 中,发出请求的程序是客户程序,而提供服务的程序是服务器。 \x0d\x0aRPC 中处理 TCP/IP 上的消息交换的部分存在一个缺陷。错误地处理格式不正确的消息会导致出现错误。这种特定的错误会影响底层的 DCOM 接口,此接口侦听 TCP/IP 端口 135。通过发送格式不正确的 RPC 消息,攻击者可以使一台计算机上的 RPC 服务出现问题,进而使任意代码得以执行。 \x0d\x0a远程过程调用 (RPC) 是 Windows 操作系统使用的一个协议。RPC 提供了一种进程间通信机制,通过这一机制,在一台计算机上运行的程序可以顺畅地执行某个远程系统上的代码。该协议本身是从 OSF(开放式软件基础)RPC 协议衍生出来的,只是增加了一些 Microsoft 特定的扩展。 \x0d\x0a\x0d\x0aRPC 中处理通过 TCP/IP 的消息交换的部分有一个漏洞。此问题是由错误地处理格式不正确的消息造成的。这种特定的漏洞影响分布式组件对象模型 (DCOM) 与 RPC 间的一个接口,此接口侦听 TCP/IP 端口 135。此接口处理客户端计算机向服务器发送的 DCOM 对象激活请求(例如通用命名约定 (UNC) 路径)。 \x0d\x0a\x0d\x0a为利用此漏洞,攻击者可能需要向远程计算机上的 135 端口发送特殊格式的请求。 \x0d\x0a\x0d\x0a减轻影响的因素: \x0d\x0a\x0d\x0a为利用此漏洞,攻击者可能需要拥有向远程计算机上的 135 端口发送精心编造的请求的能力。对于 Intranet 环境,此端口通常是可以访问的;但对于通过 Internet 相连的计算机,防火墙通常会封堵 135 端口。如果没有封堵该端口,或者在 Intranet 环境中,攻击者就不需要有任何其他特权。 \x0d\x0a\x0d\x0a最佳做法是封堵所有实际上未使用的 TCP/IP 端口。因此,大多数连接到 Internet 的计算机应当封堵 135 端口。RPC over TCP 不适合在 Internet 这样存在着危险的环境中使用。像 RPC over HTTP 这样更坚实的协议适用于有潜在危险的环境。 \x0d\x0a这是一个缓冲区溢出漏洞。成功利用此漏洞的攻击者有可能获得对远程计算机的完全控制。这可能使攻击者能够对服务器随意执行操作,包括更改网页、重新格式化硬盘或向本地管理员组添加新的用户。 \x0d\x0a\x0d\x0a要发动此类攻击,攻击者需要能够向 RPC 服务发送一条格式不正确的消息,从而造成目标计算机受制于人,攻击者可以在它上面执行任意代码。 \x0d\x0a\x0d\x0a防范来自 Internet 的远程 RPC 攻击的最佳方法是:将防火墙配置为封堵 135 端口。RPC over TCP 不适合在 Internet 这样存在着危险的环境中使用。 \x0d\x0a\x0d\x0a此漏洞是由于 Windows RPC 服务在某些情况下不能正确检查消息输入而造成的。如果攻击者在 RPC 建立连接后发送某种类型的格式不正确的 RPC 消息,则会导致远程计算机上与 RPC 之间的基础分布式组件对象模型 (DCOM) 接口出现问题,进而使任意代码得以执行。

3. RPC服务是什么东东

Remote
Procedure
Call
(RPC)
Microsoft
Remote
Procedure
Call
(RPC)
服务是一种安全的进程间通信
(IPC)
机制,它允许数据交换以及对驻留在另一进程中的功能的调用。不同进程可以在同一台计算机上、局域网内或整个
Internet
中。Remote
Procedure
Call
(RPC)
服务充当
RPC
终结点映射程序和
COM
服务控制管理器
(SCM)。超过
50
种服务都依赖于
RPC
服务才可以成功启动。
无法停止或禁用
Remote
Procedure
Call
(RPC)
服务。如果此服务不可用,操作系统将不会加载.
微软官方文档:
http://www.microsoft.com/china/technet/security/topics/serversecurity/tcg/tcgch07n.mspx

RPC服务是什么东东

4. 【浅谈RPC】

 简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
   个基本的RPC架构里面应该至少包含以下4个组件:
    具体调用过程: 
   1、服务消费者(client客户端)通过调用本地服务的方式调用需要消费的服务;
   2、客户端存根(client stub)接收到调用请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体;
   3、客户端存根(client stub)找到远程的服务地址,并且将消息通过网络发送给服务端;
   4、服务端存根(server stub)收到消息后进行解码(反序列化操作);
   5、服务端存根(server stub)根据解码结果调用本地的服务进行相关处理;
   6、本地服务执行具体业务逻辑并将处理结果返回给服务端存根(server stub);
   7、服务端存根(server stub)将返回结果重新打包成消息(序列化)并通过网络发送至消费方;
   8、客户端存根(client stub)接收到消息,并进行解码(反序列化);
   9、服务消费方得到最终结果;
   而RPC框架的实现目标则是将上面的第2-8步完好地封装起来,也就是把调用、编码/解码的过程给封装起来, 让用户感觉上像调用本地服务一样的调用远程服务。 
                                           序列化:把对象转换为字节序列的过程称为对象的序列化,也就是编码的过程。
   反序列化:把字节序列恢复为对象的过程称为对象的反序列化,也就是解码的过程。

5. 什么是RPC,作用是什么?

RPC(Remote Procedure Call Protocol),是远程过程调用的缩写,简单说就是调用远端(跨进程)的一个函数。在微服务中,通常需要不限定服务提供方使用的技术选型,实现跨团队技术解耦。这就需要统一的服务框架 --RPC框架。
如果各团队服务提供方各自实现一套序列化、反序列化、网络框架、连接池、收发线程、超时处理、状态机等业务之外的重复技术劳动,那么整体效率低下。所以,RPC框架将上述 “业务之外” 的技术劳动统一处理,是服务化首要解决的问题。
在学习C语言时,这些都会学到,目前我正在传智播客学习,学习氛围挺不错的,老师讲的挺好的。

什么是RPC,作用是什么?

最新文章
热门文章
推荐阅读