当前位置: 首页 > news >正文

远程过程调用协议(RPC)

 
RPC(Remote Procedure Call Protocol)—— 远程过程调用协议,它是一种通过 网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 RPC协议假定某些 传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI 网络通信模型中,RPC跨越了 传输层和 应用层。RPC使得开发包括网络 分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复 信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算 环境(DCE)。
 

  工作原理(以Windows下为例)

运行时,一次客户机对服务器的RPC调用,其内部操作大致有如下十步:
1.调用客户端句柄;执行传送参数
2.调用本地系统 内核发送网络消息
3. 消息传送到远程 主机
4.服务器句柄得到消息并取得参数
5.执行远程过程
6.执行的过程将结果返回服务器句柄
7.服务器句柄返回结果,调用远程系统 内核
8.消息传回 本地主机
9.客户句柄由内核接收消息
10.客户接收句柄返回的数据
RPC OVER HTTP
Microsoft RPC-over-HTTP 部署(RPC over HTTP)允许RPC客户端安全和有效地通过Internet 连接到RPC 服务器程序并执行 远程过程调用。这是在一个名称为RPC-over-HTTP 代理,或简称为RPC 代理的 中间件的帮助下完成的。
RPC 代理运行在IIS计算机上。它接受来自Internet 的RPC 请求,在这些请求上执行认证,检验和访问检查,如果请求通过所有的测试,RPC 代理将请求转发给执行真正处理的RPC  服务器。通过RPC over HTTP,RPC客户端不和服务器直接通信,它们使用RPC 代理作为中间件。

  协议结构

远程过程调用(RPC)信息协议由两个不同结构组成:调用信息和答复信息。信息流程如下所示:
RPC:远程过程调用流程
RPC 调用信息:每条远程过程调用信息包括以下无符号整数字段,以独立识别远程过程:
程序号(Program number)
程序版本号(Program version number)
过程号(Procedure number)
RPC 调用信息主体形式如下:
struct call_body {
unsigned int rpcvers;
unsigned int prog;
unsigned int vers;
unsigned int proc;
opaque_auth cred;
opaque_auth verf;
1 parameter
2 parameter . . . };
RPC 答复信息:RPC 协议的答复信息的改变取决于 网络服务器对调用信息是接收还是拒绝。答复信息请求包括区别以下情形的各种信息:
RPC 成功执行调用信息。.
RPC 的远程实现不是协议第二版,返回 RPC 支持的最低和最高版本号。
在远程系统中,远程程序不可用。
远程程序不支持被请求的版本号。返回远程程序所支持的最低和最高版本号。
请求的过程号不存在。通常是呼叫方协议或程序差错。
RPC答复信息形式如下:
enum reply_stat stat
{MSG_ACCEPTED = 0,
MSG_DENIED = 1 };
 

转载于:https://www.cnblogs.com/wangcp-2014/p/6214389.html

相关文章:

  • Linux命令-自动挂载文件/etc/fstab功能详解[转]
  • maven 子项目 deploy 到私服
  • jQuery拖动剪裁图片作为头像
  • 用python模仿c#的List一组list筛选扩展方法
  • [NodeJS] 关于Buffer
  • GVIM中文乱码问题(文本及菜单乱码)
  • 从地狱到天堂,Node 回调向 async/await 转变
  • Android 5.0 全新的动画
  • tomcat报错
  • shell 循环语句应用实例
  • accept_mutex与性能的关系 (nginx)
  • MGW——美团点评高性能四层负载均衡
  • vue-router2.0 组件之间传参及获取动态参数
  • 电脑端下载今日头条的短视频
  • 分方式缓存常用的一致性hash是什么原理
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Java 内存分配及垃圾回收机制初探
  • JavaScript设计模式系列一:工厂模式
  • Linux快速复制或删除大量小文件
  • MySQL数据库运维之数据恢复
  • Mysql优化
  • Vue2.0 实现互斥
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 阿里研究院入选中国企业智库系统影响力榜
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 深入浅出webpack学习(1)--核心概念
  • 使用 QuickBI 搭建酷炫可视化分析
  • 双管齐下,VMware的容器新战略
  • 我的zsh配置, 2019最新方案
  • MyCAT水平分库
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (27)4.8 习题课
  • (7)STL算法之交换赋值
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (TOJ2804)Even? Odd?
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (算法设计与分析)第一章算法概述-习题
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)Linux 多线程条件变量同步
  • (转载)OpenStack Hacker养成指南
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .net CHARTING图表控件下载地址
  • .NET Framework .NET Core与 .NET 的区别
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .Net中ListT 泛型转成DataTable、DataSet
  • .NET中winform传递参数至Url并获得返回值或文件
  • @我的前任是个极品 微博分析
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [BetterExplained]书写是为了更好的思考(转载)
  • [C\C++]读入优化【技巧】
  • [C++] 统计程序耗时