首页 > 其他分享 >RPC协议综述

RPC协议综述

时间:2023-10-15 14:32:13浏览次数:38  
标签:返回 协议 调用 综述 Stub RPC 本地 服务端

RPC 框架标准模式。

RPC协议综述_网络协议

当客户端的应用想发起一个远程调用时,它实际是通过本地调用本地调用方的 Stub。它负责将调用的接口、方法和参数,通过约定的协议规范进行编码,并通过本地的 RPCRuntime 进行传输,将调用网络包发送到服务器。

服务器端的 RPCRuntime 收到请求后,交给提供方 Stub 进行解码,然后调用服务端的方法,服务端执行方法,返回结果,提供方 Stub 将返回结果编码后,发送给客户端,客户端的 RPCRuntime 收到结果,发给调用方 Stub 解码得到结果,返回给客户端。

这里面分了三个层次,对于用户层和服务端,都像是本地调用一样,专注于业务逻辑的处理就可以了。对于 Stub 层,处理双方约定好的语法、语义、封装、解封装。对于 RPCRuntime,主要处理高性能的传输,以及网络的错误和异常。

NFS(Network File System)就是网络文件系统。要使 NFS 成功运行,要启动两个服务端,一个是 mountd,用来挂载文件路径;一个是 nfsd,用来读写文件。NFS 可以在本地 mount 一个远程的目录到本地的一个目录,从而本地的用户在这个目录里面写入、读出任何文件的时候,其实操作的是远程另一台机器上的文件。

操作远程和远程调用的思路是一样的,就像操作本地一样。所以 NFS 协议就是基于 RPC 实现的。当然无论是什么 RPC,底层都是 Socket 编程。

RPC协议综述_网络协议_02

XDR(External Data Representation,外部数据表示法)是一个标准的数据压缩格式,可以表示基本的数据类型,也可以表示结构体。

RPC协议综述_网络协议_03

在 RPC 的调用过程中,所有的数据类型都要封装成类似的格式。而且 RPC 的调用和结果返回,也有严格的格式。

  • XID 唯一标识一对请求和回复。请求为 0,回复为 1。
  • RPC 有版本号,两端要匹配 RPC 协议的版本号。如果不匹配,就会返回 Deny,原因就是 RPC_MISMATCH。
  • 程序有编号。如果服务端找不到这个程序,就会返回 PROG_UNAVAIL。
  • 程序有版本号。如果程序的版本号不匹配,就会返回 PROG_MISMATCH。
  • 一个程序可以有多个方法,方法也有编号,如果找不到方法,就会返回 PROC_UNAVAIL。
  • 调用需要认证鉴权,如果不通过,则 Deny。
  • 最后是参数列表,如果参数无法解析,则返回 GABAGE_ARGS。

但是错误、重传、丢包、性能等问题还没有解决,这些问题我们统称为传输问题。这个就不用 Stub 操心了,而是由 ONC RPC 的类库来实现。这是大牛们实现的,我们只要调用就可以了。

RPC协议综述_网络协议_04

在这个类库中,为了解决传输问题,对于每一个客户端,都会创建一个传输管理层,而每一次 RPC 调用,都会是一个任务,在传输管理层,你可以看到熟悉的队列机制、拥塞窗口机制等。

由于在网络传输的时候,经常需要等待,因而同步的方式往往效率比较低,因而也就有 Socket 的异步模型。为了能够异步处理,对于远程调用的处理,往往是通过状态机来实现的。只有当满足某个状态的时候,才进行下一步,如果不满足状态,不是在那里等,而是将资源留出来,用来处理其他的 RPC 调用。

RPC协议综述_网络协议_05

标签:返回,协议,调用,综述,Stub,RPC,本地,服务端
From: https://blog.51cto.com/key3feng/7872144

相关文章

  • DNS协议及其工作原理
    DNS是域名系统(DomainNameSystem)的缩写,它是一种用于将域名转换为IP地址的分布式数据库系统。它是因特网的基石,能够使人们通过域名方便地访问互联网,而无需记住复杂的IP地址。DNS的历史可以追溯到1983年,当时因特网开始采用层次树状结构的命名方法,并使用分布式的域名系统DNS。DNS的设......
  • 一文读懂HTTP协议
    1.HTTP1.0和HTTP1.1之间有哪些区别连接方面,http1.0默认使用非持久连接,而http1.1默认使用持久连接。http1.1通过使用持久连接来使多个http请求复用同一个TCP连接,以此来避免使用非持久连接时每次需要建立连接的时延。资源请求方面,在http1.0中,存在一些浪费带宽的现象,例......
  • grpc服务报错: http2 frame too large
    报错如下:14xxBadRequesterrorreadingserverpreface:http2:frametoolarge其中4xx为客户端报错中的一个具体数字。比如:404/415,仅以报错举例,且出现报错码不固定。但是errormsg的核心内容不变:frametoolarge...这个是因为客户端在没有TLS加密的情况下发送HTT......
  • RIP协议
    动态路由静态路由,由网络管理员手工配置,只适用于小型网络。静态路由的缺点:在复杂的网络环境,配置量大自身不能随着网络的结构变化完成收敛动态路由:由运行同一种动态路由协议的设备通过沟通协商最终自行计算得出路由,是一种根据网络拓扑和链路状态动态调整路由表的路由协......
  • 从数据链路到神秘的MAC地址和ARP协议
    引言链路是指从一个结点到相邻结点的一段物理线路。数据链路是在链路的基础上增加了一些必要的硬件和软件。这些硬件包括网络适配器,而软件则包括协议的实现。在网络中,主机、路由器等设备都必须实现数据链路层。在局域网中,主机、交换机等网络设备都必须实现数据链路层,以便实现数......
  • java实现朴素rpc
    五层协议中,RPC在第几层?五层协议应用层传输层网络层链路层物理层我不知道,我要去大气层!远程过程调用(RPC),比较朴素的说法就是,从某台机器调用另一台机器的一段代码,并获取返回结果。这之前的一个基层问题就是进程间通信方式(IPC),从是否设计网络通信分为:......
  • 植物基因组组装综述
    目录基因组特征评估Survey简单植物基因组组装高杂合基因组组装高重复基因组组装高倍性基因组组装植物泛基因组组装测序技术发展与组装质量基因组特征评估Survey基因组大小、杂合度和重复序列含量是决定测序成本、组装难度和最终组装效果的最重要的几个特征。全部测序read中K-m......
  • 锐捷交换机MSTP(多实例生成树协议)配置
    一、组网需求内网有4个vlan,vlan10和20的生成树根桥在核心交换机A上,vlan30,40的vlan根桥在核心交换机B上。 二、组网拓扑:   三、配置要点:开启生成树功能创建不同的实例为实例配置优先级 四、配置步骤:注意:配置之前建议使用Ruijie#showinterfacestatus查看接口......
  • Loadrunner12 在谷歌浏览器录制https协议的脚本时,提示不是私密链接-解决办法
    在谷歌浏览器下,录制https协议网址的脚本时,会出现如下提示:   接下来,教大家一招黑操作: 1、鼠标点击屏幕,聚焦在当前页面2、输入thisisunsafe,点击回车,奇迹的事情发生了,可以打开https协议的网页正常录制了!!!   3、接下来就根据你的测试需求,来进行操作。(只要提示不是私密......
  • DHCP协议
    DHCP动态主机配置协议DHCP(DynamicHostConfigurationProtocol)是用于集中对用户IP地址和其他网络配置信息进行动态管理和配置的协议。DHCP协议使用UDP协议工作,主要作用是集中的管理、分配IP地址、使设备动态的获得IP地址、网关地址、DNS服务器地址等信息。由客户端(DHCPClien......