组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:邵毅(epl   shaoyi@163.net)
译文发布时间:2001-11-7
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须
保留本文档的翻译及版权信息。


Network Working Group                           James E. White
Request for Comments: 105 Computer Research Lab.
Category: Information University of California
Santa Barbara, California
March 1971

通过 UCSB 进行远程登录和远程输出返回的网络说明书


目  录
一、远程登录(RJE) 2
1.1 RJE登入 2
1.2 RJE联接 2
1.2.1 A类(面向流的传输方式)输入 3
1.2.2 B类(不定长记录)输入 3
1.2.3 C类(定长记录)输入 4
二、 远程输出返回(RJOR) 4
2.1 RJOR登入 4
2.2 输入联接 5
2.3 输出联接 6


在下述讨论中,'byte'意指8位、并从左至右以0-7编号。


一、远程登录(RJE)
UCSB将在位于地址三的套接字号码x'200'处接收用于批处理伪卡片文件。网络用户应
该从UCSB的计算机中心处获得一个账号。账号#_1025,程序员名称'UCLA','SRI','UTAH'等
可在校验时使用。 360/75于OS MVT和HASP中运行。 用户向HASP提交任务以便制订进度
表,并由OS通过一个称为RJE的中间进程执行。这一中间进程用套接字号码x'200'寻址,
并可通过日志记录器激发。本节的意图是为程序员提供与RJE通讯的必要信息;并假定其熟
悉计算机中心提供的批量服务,以及服务的作业控制语言要求。
RJE依据1970年8月3日的主机--主机传输协议,通过网络控制程序传递全部的网络
报文。 它期待第一个接收到的消息报文为类型0,丢弃前八位(消息类型)并假定他们为
零,并且在其后的连接期限内不考虑IMP消息报文的边界。

1.1 RJE登入
为了向批处理提交一个或多个任务,网络用户必须建立一个与RJE的单一连接。 RJE
仅当建立一个这样的单一联接时驻留核心(即当一个用户发送文档的时候)。 其他时间里,
它保存在直接存取存储器,并必须由日志记录器触发。 一个登录序列总可以通过向套接字
x'200'发送联接请求报文来初始化。 RJE从不同时服务于多用户。 如果当RJE正在使用时
向套接字发送一个连接申请,则网络控制程序将该信息排队。 等到当前文件传输完成时,
RJE会监听并接受它的信息队列中的下一个请求报文(如果存在的话);如果信息队列中没
有它的请求报文,它就会终止执行、释放它占领的主存储器。 当RJE不在内核中的时候,
日志记录器监听套接字x'200',剔除它收到的第一个调用,将RJE读入内核,并停止监听,
由RJE继续在该套接字上监听。 因此要初始化一个登录序列,用户向套接字x'200'发送联
接请求。 如果请求被接受,则他跟与RJE建立了联系。 如果请求被拒绝,则他应该重新发
送发连接请求;一旦请求被接受,他将被连接到RJE。 再次拒绝意味着网络控制程序的资
源告罄。一旦联接建立,RJE将认为该用户已登入。
为了防止RJE被单个用户垄断,在软件中做了规定:如果一个RJE被来自连接用户方请
求传输的等待超过一定时间,则终止该联接。 现在,这一时间极限已经被定为每个记录一
分钟,但其可以在将来根据需要被缩短或延长。 除了这样的终止外,RJE会无限地保持它
与用户间的联接。 卡片映象将在连接中被接受,并且每个卡片都将按照原样转送给HASP。 
当文档发送结束后,要求用户结束该联接。 RJE将把这一动作解释为文件末尾的标记,并
且认为用户已注销。

1.2 RJE联接
RJE期待它收到的来自与它建立的连接的数据的第一个字节的为0,即标记消息类型0;
它将这个字节丢弃而不去检验,并随后在IMP消息报文边界无效数字。 收到的第二个字节
被翻译为确定其后数据格式的标记。
字节翻译如下:
     Bits 0-1 = 00:  后续文档为A类输入(面向流的输入)。
              = 01:  未定义,不应出现。
              = 10:  后续文档为B类输入(变量长度记录)。
              = 11:  后续文档为C类输入(定长记录)。
     Bits 2-7     :  为检验,应为零。
一旦给出,这一声明在整个联接过程中均有效。
用户将其文档以卡片映象的形式发送,而不考虑指定的输入类别。必要时,每个文档将
在右边通过补空格或截断的方式增删至80位。被发送的文档必须严格按照计算机中心读卡
机中放置的格式组织。 文档中的每个任务都必须分别提交一个任务卡片及其所有常见的作
业控制语言(可允许批量作业,并且对RJE透明)。 对于任一要求加载特殊(非驻留的)
磁盘及磁带的任务,必须在该任务卡片后紧接着插入一个特殊的作业控制语言卡片,格式为:
        /*SETUP        vol-ser , vol-ser ,...
                              1         2
这里“vol-ser”为请求加载卷的卷序列号。 “/*SETUP”开始于第一列,“vol-ser”
必须开始于第16列。该任务将以一个HASP持有状态进入系统,直到请求卷可被操作机构加
载。 如果该用户忘记声明所有这样的请求卷,他的任务将被立即取消。 文档中未包含在系
统输入数据的全部卡片必须由有效的扩充的二进制--十进制交换码组成。

1.2.1 A类(面向流的传输方式)输入
如果RJE输入被声明为A类,则RJE通过联接收到的数据的第三个字节被解释为一个空
格字符声明。 其后每一个接收到的字节都与那个字符进行比较。 任何一个不同的字符都被
当作当前卡片映象的下一个字节。 每当遇到该个空格符,前一字节即作为当前卡片映象的
最末字节,然后按照规定填补或截取字符,并传给HASP。 在两个空格符之间可以存在零或
更多的或非空格符。 因此当输入被说明为A类时,被传输到RJE的数据应该具有如下格式:

    1       1       1            variable         1
+-------+-------+-------+  / +------//--------+-------+ \
|       |       | BREAK | /  |                | BREAK |  \
| x'00' | x'00' | CHAR. | \  |  CARD  IMAGE   | CHAR. |  / ...
+-------+-------+-------+  \ +------//--------+-------+ /

这里每一个字段的长度都已经在字节中加以说明。 括号[尖括号]中的零或具体数字可
以在联接被用户关闭之前发送。

1.2.2 B类(不定长记录)输入
如果RJE的输入被声明为B类,那么在初始两个字节之后的全部输入都应该包含一个相
邻的变量长度记录串。每个记录由一个单字节op码(op码应为x'01'),及一个用于说明
随后的正文字段变量长度数位中的无符号长度的两字节长数字段组成。
正文字段的长度应为零或正字节数长度字段必须包含一个整数,这一整数应该为8的倍
数。该正文字段代表一个卡片影象,由RJE按照规定填补或截取字符,并传给HASP。因此
当输入被说明为B类时,被传输到RJE的数据应该具有如下格式:

    1       1            1       2      L bits
+-------+-------+  / +-------+-------+-----//-----+ \
|       |       | /  |       |       |    TEXT    |  \
| x'00' | x'80' | \  | x'01' |   L   | card image |  / ...
+-------+-------+  \ +-------+-------+-----//-----+ /

这里每一个字段的长度除另有描述之外都已经在字节中加以说明。 括号[尖括号]中的
零或具体数字可以在联接被用户关闭之前发送。

1.2.3 C类(定长记录)输入
如果RJE的输入被声明为C类,那么在初始两字节之后的全部输入都应该由一相邻的定
长、80字节卡片映象串组成。 因此,当输入被说明为C类时,被传输到RJE的数据应该具
有如下格式:

    1       1                  80
+-------+-------+  / +--------------------+ \
|       |       | /  |                    |  \
| x'00' | x'C0' | \  |     card image     |  / ...
+-------+-------+  \ +--------------------+ /

这里每一个字段的长度都已经在字节中加以说明。 括号[尖括号]中的零或具体数字可
以在联接被用户关闭之前发送。

二、 远程输出返回(RJOR)
只要当任务提交后,任务卡片上记数参数的第八位为字符'T',则来自由RJE提交的,
在UCSB处批处理的任务的A类SYSOUT输出总可以通过与点三的套接字x'300'联系来获取。 
输出根据请求进行检索,并通过其后的一个编址为套接字x'300'的称为RJOR的进程向网络
用户转播。 RJOR可以通过日志记录器触发。 本节旨在为程序员提供与RJOR通讯的必要信
息。
RJOR依据1970年8月3日的主机-主机传输协议,通过网络控制程序传递全部的网络
报文。 RJOR期待第一个接收到的消息报文是类型0,丢弃第一位并假定它为零,并且在其
后的连接期限内不考虑IMP消息报文的边界。 同样地,RJOR发送的第一个消息报文类型为
0:第一个字节由零组成,并且其后该联接周期内,IMP消息报文边界不是重要的。

2.1 RJOR登入
为了从批模式任务中获得计算输出,网络用户必须建立一个与RJOR之间全双工的联接。 
RJOR仅当使用时存在于核心存储器常驻区(即当一个用户正在接收或发送控制信息或一个
文档时,或当RJOR等待之前的一个被请求的输出文档(或一些文档)时)。 其他时间里,
它保存在直接存取存储器,并必须由日志记录器触发。 一个登录序列总可以通过向套接字
x'300'发送联接请求报文来初始化。 如果当另一个用户正在登录时想套接字发送一个连接
申请,则网络控制程序将该信息排队。 在当前联接终止之后,RJOR将监听并接受它的信息
队列中的下一个请求报文(如果有的话);如果信息队列中没有它的请求报文,并且它已经
完成了它所有的输出文件请求报文,则它就会终止执行、释放它占领的主存储器。 当RJOR
不在内核中的时候,日志记录器监听从套接字x'300',剔除它收到的第一个调用,将RJOR
读入内核,并停止监听从,由RJOR继续在该套接字上监听从。 因此要初始化一个登录序列,
用户向套接字x'300'发送联接请求。 如果请求被接受,则他就与RJOR建立了联系。 如果
请求被拒绝,则他应该重新发送发连接请求;一旦请求被接受,他将被连接到RJOR。 再次
拒绝意味着网络控制程序的资源告罄。 一旦被请求的双工连接的前半部分被建立,RJOR就
认为该用户已经登录。
在第一个联接中(此后称为输入联接),用户发送标记指定由RJOR执行的函数,同时
函数要应用的任务名也被指定。 RJOR随后关闭这个联接。 RJOR发送控制信息,对用户请
求报文的配置和涉及位于点三、号码为x'301'的RJOR套接字的辅助联接的输出文件加以说
明。同时还对用户方套接字号码比与该用户连接的RJOR套接字号码小一的那些套接字进行
说明。 用户的请求报文不一定被立即执行。 如果是前一种情况,RJOR则向指定随用户接
收套接字发出一个联接请求,并如果需要的话,可以当联接建立起来以后,与用户输出一同
发送任何适当的控制信息。然后RJOR关闭该联接并且认为该用户已经注销。 如果该用户的
请求报文不能被立刻满足(例如,所寻找的任务输出尚未提交或还没有结束执行),则由
RJOR创建第二个足够长的联接,向该用户通知延迟信息,并随即关闭。 然后当请求报文可
用时,该联接被重新开放,发送所需数据,然后关闭该联接。用户即被认为已经注销。
为了防止RJOR被单个用户垄断,在软件中做了规定:如果该连接用户请求关闭,或者
一个RJOR等待的时间超过 传输完成的时限一定量时,则终止该联接。 现在,这一时间极
限已经被定为每个记录一分钟,但其可以在将来根据需要被缩短或延长。

2.2 输入联接
RJOR期待它收到的来自输入联接的数据的第一个字节的为0,即标记消息类型0;它将
这个字节丢弃而不去检验,并随后在IMP消息报文边界无效数字。 接收到数据的第二个字
节被解释为说明待执行函数的标识。 遵循该标记字节,RJOR期望一个八字节扩充的二进制
--十进制交换码任务名,并在必要时在右方填补空白字符。 标记字节翻译如下:
     Bit 0 = 1:  发送由指定任务生成的输出。
     Bit 1 = 1:  清除指定任务创建的输出文档。
     Bit 2 = 1:  根据需要延迟,以执行于0-1位上标明的函数。
           = 0:  如果0-1位上标明的函数不能被立刻执行,返回一简单消息,对该情况加
以说明。
     Bit 3 = 1:  早前的一个属于指定任务的具有等待输出(位2)选项的请求将被取消。
     Bits  4-7:  为检验,应为零。
0-2位的任一组合都是允许的。 如果第三位为1,则不继续检验其它数位。 如果第零
位等于1且第一位也等于一,则输出文档在发送,然后再将其清除。 如果二个同名的任务
顺次执行,则来自第二个任务的输出将会覆盖由第一个任务生产的输出。 在这种情况下,
用户应该在第一个任务发送完毕之后将输出从任务中清除,以使得来自第二个任务的请求不
会仅简单地返回第一个任务输出的另一份拷贝。

2.3 输出联接
RJOR可以开启输出联接一或两次,作为输出联接中的单个传输的结果。  在这两中情
况中的任意一种中,传输的第一个字节将由零组成,用以表明消息类型0,
并且其后该联接周期内,IMP消息报文边界不是重要的。 遵循第一个字节、RJOR将向
那些适用的响应发送任务名。 与用户通过输入联接所提供的一致,该任务名将存在与一个
8字节数字段内。 遵循该任务名,RJOR将发送可变长度的逻辑记录。<*每一个照理应该由
一个单字节操作码、一个说明随后的可变长度正文字段的无符号长度位的双字节长度字段组
成。正文字段的长度应为零或正字节数;该长度字段应该包含一个8的倍数的整数。
当前定义的操作码如图1所示。位于x'01'的一个操作码表明该正文字段包含一个由被
请求输出的任务创建的SYSOUT数据集之一的记录。 所有具有操作码x'01'的逻辑记录的字
段长度都是相同的。 对于那些记录长度不同于这一值的数据集,则在其标准记录长度右边
填补空字符或进行截取以满足要求。 通常出现在第一列的用于指定打印机的计算输出已被
丢弃而不复出现。记录按照它们在打印机上打印同样的顺序被传输到用户。总起来说,这些
记录包括了所有可能出现在打印输出中的信息,HASP分隔表单除外。
除了具有操作码x'01'之外的所有逻辑记录中,长度字段包含值零,并且该操作码传达
该逻辑记录的全部信息。*

操作码(十六进制数)      名  称                   解    释
-----------------     ------------    -------------------------------

  00                   文档末尾       所有来自该任务的输出都已发送(最后是一个操
作码为x'01'的逻辑记录)。
  01                   输    出       文本字段包含一个由该任务生成的SYSOUT数据
记录。
  02                 输出文档已清除。  来自该任务的输出已经按照请求被清除。
  03              缓冲区内核空间不足。 用于传送该任务的输出的主存储空间不足。传
送任务被取消,并禁止任何清除请求。
  04                 文件I/O错误。     在读输出文档时遇到了一个不可恢复的I/O错
误。传送任务被取消,并禁止任何清除请求。
  05               清除文件I/O错误。   在清除输出文档时出现了一个不可恢复的I/O
错误。传送任务被取消,并禁止任何清除请求。
  06              请求队列空间已满。   来自任务的输出不存在,并已指定等待输出选
项,但RJOR的请求队列空间已满,已被禁止。
  07                  等候输出。       来自任务的输出不存在,并已指定等待输出选
项,RJOR在等候任务输出。
  08             未发现被取消的请求    用户请求取消之前发送的指定等候输出选项的
请求命令。但RJOR未发现这样的请求。
  09                 请求被取消。      根据用户的请求,之前发送的指定等候输出选
项的请求命令被取消。
  0A              搜索文档I/O错误。     试图定位任务的输出文档时发生了一个不可恢
复的I/O错误。用户请求被取消。
  0B                未找到输出。       未找到来自该任务的输出。用户未指定等候输
出选项。
图 1.  输出联接操作码

[ 本RFC文档由Randy Dunlap于97年4月 ]
[ 编为机器可读形式录入RFC在线档案 ]
*本限制仅是暂时的,我们正在进行补丁工作。该补丁不久将发布。
RFC105——Network Specifications for Remote Job Entry andRemote Job Output Retrieval at UCSB
通过 UCSB 进行远程登录和远程输出返回的网络说明书


1
RFC文档中文翻译计划