📄 rfc1057.txt
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:spacelu(spacelu wuchun_lu@163.net)
译文发布时间:2001-8-14
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须
保留本文档的翻译及版权信息。
Network Working Group Sun Microsystems, Inc.
Request For Comments: 1057 June 1988
Obsoletes: RFC 1050
RFC:远程过程调用协议说明第二版
(RPC: Remote Procedure Call Protocol Specification Version 2)
备忘录状态
该备忘录表书了Sun为系统和其它系统用应用的标准,和我们期望因特网应用的一个考
虑.现在该备忘录还不是一个因特网标准.该备忘录的发布不受限制.
1.简介 2
2.术语学 2
3. RPC模式 2
4. 传送和语义 3
5. 绑定和集合独立 3
6. 鉴定 4
7. RPC协议要求 4
7.1 RPC程序和过程 4
7.2 鉴定 5
7.3 程序号委派 5
7.4 RPC协议的其它使用 6
8. RPC信息协议 6
9. 鉴定协议 9
9.1 空鉴定 9
9.2 Unix鉴定 9
9.3 DES 鉴定 10
10. 记录记号标准 13
11. RPC语言 13
11.1 RPC语言描述的例子: 14
11.2 RPC语言说明 14
11.3 语法注意事项: 15
附录:程序协议端口映射 15
A.1 端口映射协议说明(用RPC语言) 15
A.2 端口映射操作: 17
参考资料: 17
1.简介
文档详细说明了用在Sun远程过程调用(RPC)包的信息协议第二版.这个信息协议用外部
数据表示(XDR)语言来说明.该文档假设读者对XDR熟悉.它不尽力证明远程过程调用系统或
描述它们的应用.由Birrell和Nelson[1]写的文档推荐成为远程过程调用概念的最好背景知
识.
2.术语学
文档讨论了客户,调用,服务器,应答,服务,程序,过程和版本.每一个远程调用有两方:
积极的客户方发送调用请求到服务器,服务器发回应答信息.一个网络服务是一个或多个远程
程序的集合.一个远程程序执行一个或多个远程过程;过程,参数和结果都在特殊程序协议说
明(看附录A的例子)里记录.为了和改变的协议兼容,一个服务器可能支持多个版本的远程程
序.
例如,一个网络文件服务由两部分组成.一个程序可能处理高层应用(如文件系统访问控
制和锁控.另外有些处理低层如文件输入输出和象读和写过程.网络文件服务的客户将调用代
表该客户与对应服务的两类程序相关的过程.
术语客户和服务器只是适用于特殊的传输;一个特定硬件实体(主机)或软件实体(过程
或程序)能够在不同时间执行两种角色.例如,提供远程执行服务的程序可能也是一个网络文
件服务的客户端.另外,它可能把软件根据服务器和客户端功能分成分开的库或程序.
3. RPC模式
Sun RPC协议基于远程过程调用模式,它类似于本地过程调用模型.在本地调用方式中,
调用者把参数放在公众指定地点(如注册窗口),然后发送控制到过程,最后重新获得控制.接
着,从指定地点取出过程结果,调用者继续执行.
远程过程调用相类似.控制线程在两个过程中逻辑转换:调用过程和服务过程.调用过程
首先发送一个调用信息到服务过程然后等待应答信息.调用信息包括过程参数,应答信息包括
过程结果.一旦接收到应答信息,就取得过程结果,然后调用执行继续进行.
在服务器端,过程保持睡眠状态到调用信息的到达.当一个调用信息到达,服务器获得过
程参数,计算结果,发送应答信息,然后等待下一个调用信息.
在这种模型中,任何时间里两个过程只有一个激活.但是,该模型只是作为一个例子.Sun
RPC协议对并行模型执行没有限制,但是其它的有可能不一样.例如,一个应用程序可能选择
RPC调用为异步的,因此客户端只有等到服务器端的应答才做有效工作.另外一个可能是使服
务器端生成一个新的任务来处理进来的调用,因此最初的服务器可以处理其他请求. 远程调
用和本地过程调用有几个重要区别:
1.错误处理:在远程过程调用中,网络或远程服务器的失败必须处理.
2.全局变量和副作用:因为服务器没法访问客户地址空间,隐藏的参数不能用全局变量传递或
返回副作用.
3.表现:远程过程操作比本地过程调用慢一到几个数量级.
4.鉴定:因为远程过程可以在不安全的网络中传输,必须采用鉴定.
结论是即使有工具自动为给定服务产生客户或服务器库,仍然必须仔细设计协议.
4. 传送和语义
RPC协议能够执行在几种不同传输协议上.RPC协议除了信息的规定和解释外,不关心信
息是如何从一个过程到另外一个过程,另外,应用想通过文档中没有指定的接口来获得传输层
的信息(可能是控制层).例如,传输协议可能对RPC信息的尺寸大小进行限制,或可能是基于
流的无大小限制的如TCP.客户或服务器通过在附录A中的机制,必须在传输协议达成一致.
RPC不会执行任何可靠性和应用应该注意在RPC下层的传输协议类型是很重要的.如知道
运行在可靠传输协议如TCP上面,大部分工作TCP已经替做了.
另外,如果它运行在不可靠传输如UDP[7]上,它必须执行自己的时间检测,重传,和复制检测,
因为RPC层没有提供这些服务.
因为传输独立,所以RPC协议没有捆绑特殊的语义到远程过程或它们的执行要求上.可以
从下层传输协议中推得语义(但是得明确指定).例如,考虑RPC运行在不可靠传输如UDP上.
如果一个应用再时间终止后重传RPC调用信息而没有收到应答,那么它不能从过程执行的时
间数量推出任何信息.如果它没有收到应答,它能够推出这个过程至少执行了一次.
服务器尽可能记住前面同意客户端请求而不必重新批准,为了保证首次执行语义.服务
器可以利用通过传输装载每一个RPC信息ID来完成这项任务.这个传输的主要应用是通过客
户RPC层使应答和调用相符.但是,当重传调用时,一个客户应用可能选择重用原来的传输ID.
为了获得一次执行语义,在执行了一个调用后,服务器选择记住这个ID而不执行有相同ID
的调用。除了检测是否相等外,服务器不允许用任何其它方式检查这个ID。
另外,如果用可靠传输如TCP,应用可以从应答信息推算出每个过程恰好执行一次,但是
如果它没有收到应答信息,则不能假设远程过程没有执行.注意即使使用一个基于连接的协议
如TCP,应用仍然需要超时和处理服务器崩溃的重新连接操作。
对于传输除了数据报或面向连接协议还有其它很多可能。例如,请求-应答协议如VMTP[2]
可能是RPC的自然传输。现在Sun RPC数据报用TCP和UDP两种传输协议,还有现在还在实
验中的其它协议如ISP IP4 和IP0。
5. 绑定和集合独立
绑定一个特定哭户到特定服务器和传输参数动作不是RPC协议说明的一部分。这个重要
的和必要功能是为更高层软件预留。(软件用RPC自身;看附录A)
执行者把RPC协议想成网络的跳跃子程序指令(“JSR”);装货人(绑定者)使JSR有用,
绑定软件使RFC游泳,用RPC来实现这个任务。
6. 鉴定
在每个调用和应答信息中,RPC协议为客户端提供必须的向服务端验证域,和反之亦然。
安全和访问控制机制能够在该信息鉴定上建立。支持多个不同的鉴定协议。在RPC报头上的
鉴定域表明用哪一个协议。关于特殊鉴定协议的更多信息看第9部分:“鉴定协议”。
7. RPC协议要求
RPC协议必须提供下面条件:
(1)调用过程的唯一描述
(2)为请求信息提供一致应答信息
(3)为服务提供鉴定调用者和反之亦然。
除了这些要求,因为滚动错误,执行错误,用户错误和网络管理等,所以检测这些特性也应
该支持。
(1).RPC协议不匹配.
(2).远程过程协议版本不一致.
(3).协议错误(如过程参数的错误配置).
(4).远程鉴定失败原因.
(5).其它所要过程没有调用的任何原因.
7.1 RPC程序和过程
RPC调用信息有3个无符号正数域--远程程序号,远程程序版本号和远程过程浩-它们唯
一的指明了调用的过程.程序数量由某个中央认证机构管理(象SUN).一旦执行者有一个程序
号,它们就可以执行远程程序;第一个执行程序一般具有版本号1.因为大部分新协议的发展,
调用协议的版本号指明了调用者正在使用哪个版本的协议.版本号使相同服务处理分辨新旧
协议成为可能.
过程号标志调用过程.这些数字在特定程序的协议规范中记录.例如,文件服务协议说明
可能表明它的过程号5表示"读"和过程号12表示写.
正如远程程序协议可能改变好几个版本,实际的RPC信息协议也可能改变.因此,调用信
息也有它自己的RPC版本号,对于在这描述的RPC的值总是为2.
请求的应答信息有足够信息来分辨下面的错误情况:
(1)RPC的远程执行不分辨协议版本.
2 返回支持RPC的最低和最高版本号.
(2)远程程序在远程系统中无效.
(3)远程程序不支持请求版本号.
支持最程序的最低和最高版本号返回.
(4)请求过程号不存在.(这个一般是客户端协议或程序错误).
(5)远程过程参数对服务器端来说是不认参数.(再有,这个经常由于客户端和服务器端
协议的不一致性引起.
7.2 鉴定
提供调用者到服务器的鉴定和反之亦然,这是RPC协议的一部分。调用信息有两个鉴定
域,信任域和校验域。应答信息有一个鉴定域,应答校验域。RPC协议规范按下面定义所有3
个不透明类型(用外部表示语言(XDR)[9])
enum auth_flavor {
AUTH_NULL = 0,
AUTH_UNIX = 1,
AUTH_SHORT = 2,
AUTH_DES = 3
/* 和其它类型定义 */
};
struct opaque_auth {
auth_flavor flavor;
opaque body<400>;
};
也就是说,任何"opaque_auth"结构是一个"auth_flavor"枚举类型加上RPC协议执行的
不透明类型。
鉴定域里的数据解释和语义是个人设定,独立于鉴定协议规范。(第9部分定义了不同
鉴定协议)。如果鉴定参数被拒绝,应答信息包含拒绝原因信息。
7.3 程序号委派
程序号根据下列表给成16进制20000000(十进制536870912):
0 - 1fffffff Sun定义
20000000 - 3fffffff 用户定义
40000000 - 5fffffff 暂时
60000000 - 7fffffff 预留
80000000 - 9fffffff 预留
a0000000 - bfffffff 预留
c0000000 - dfffffff 预留
e0000000 - ffffffff 预留
第一组是由sun微系统管理的数字范围,所有站点应该一样。第二组是对特殊站点的特
定应用。当一个站点开发大众感兴趣的应用,那么该应用应该分配一个在第一个区域的号码
值。第三组是动态分配给应用的程序号。最后几组为将来使用预留,应该还没有用上。
7.4 RPC协议的其它使用
该协议的扩展使用是为调用远程过程。通常,每个调用信息和一个应答信息匹配。但是,
协议自己是其它协议(非过程调用)能够执行的信息传输协议.sun当前用的,或可能滥用的,
批处理的(或流水线的)RPC信息协议和广播远程过程调用.
7.4.1 批处理
当客户想发送任意数量的调用信息给服务器,可以用批处理方式.典型的批处理用可靠
类型流协议(象TCP)来传输.在批处理中,客户端从来不等待服务器的应答,服务器也不给批
调用发送应答.为了疏通通路和让正常调用获得正常确认,一系列的批处理调用通常被合法远
程过程调用操作终止.
7.4.2 远程过程调用广播
在广播协议中,客户发送广播调用到网络中然后等待无数应答.这种方法要求基于数据
报传输方式(如UDP)作为它的传输协议.当调用成功到达时,支持广播协议的服务器方给以应
答,错误时保持它的状态.广播调用用RPC服务端口来获得它们的语义.更多信息看附录A.
8. RPC信息协议
这个部分定义了用XDR数据描述语言的RPC信息协议.
enum msg_type {
CALL = 0,
REPLY = 1
};
调用信息应答采用两种方式:信息或者被接受或者被拒绝.
enum reply_stat {
MSG_ACCEPTED = 0,
MSG_DENIED = 1
};
假设调用信息被接受,下面就是调用远程过程的状态.
enum accept_stat {
SUCCESS = 0, /* RPC成功执行 */
PROG_UNAVAIL = 1, /* 远程没有输出过程 */
PROG_MISMATCH = 2, /* 不支持远程版本 # */
PROC_UNAVAIL = 3, /* 程序不支持远远程过程 */
GARBAGE_ARGS = 4 /* 过程不能解参数 */
};
调用信息被拒绝的原因:
enum reject_stat {
RPC_MISMATCH = 0, /* RPC版本!=2 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -