⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc3018.txt

📁 本程序为在linux下实现FTP传输文件的实现
💻 TXT
📖 第 1 页 / 共 5 页
字号:
符REQ_ID字段是协议定义的,后者则是虚拟机定义的;收到第一类指令的响应后,协议
必须分析其REQ_ID,与前面发送的指令相比较,对于后者则无须如此,因为这些指令只是
发送给虚拟机的。
响应指令的ASK字段设为1,就是说其首部必有REQ_ID字段,REQ_ID字段的值取
自该指令所响应的原指令,响应指令不需要响应。
节点山可能有几个虚拟机连接到协议,每个虚拟机都有自己的工作地址空间。对不同虚
拟机的请求有可能同时发生,因此指令要通过两个字段来识别:连接到确定虚拟机的会话标
识符SESSION_ID和请求标识符REQ_ID。
4.1  RSP, RSP_P
“应答”(RSP)和“协议应答”(RSP_P)指令的格式是相同的,区别只是操作码不同。
      OPCODE = 129/1   ;分别是RSP和RSP_P的操作码
      ASK = 1
      PCK = %b01/11
      EXT = 0/1
      CHN = 0
      OPR_LENGTH = 0/1
      SESSION_ID 和REQ_ID – 值取自响应的原指令。
      操作数:
         2字节:基本返回码。
         2 字节:附加的返回码。
      可选的扩展首部:
         _MSG – 包含任何出错信息的描述。
该指令如果没有操作数则表示正响应,相当于基本返回码和附加返回码的值都是0。取
0值的基本返回码表示正响应,正响应的附加返回码不一定是0。基本返回码如果取非0值
表示负响应,基本返回码定义了错误的类型,附加返回码则指明什么错误。
RSP指令用于虚拟机响应,返回码必须从虚拟机得到,如果协议无法传送所需的虚拟机
响应指令,则单独构造一个负响应RSP。指令RSP_P总是在UMSP层构造的,如果协议不
能定义RSP_P在什么指令上传输,则不执行任何动作。

4.2  SND_CANCEL
发送很长的分段指令或者事务时,可能在部分数据已经发出并存储到接收方的缓冲区后
需要取消发送,为此,协议提供了“取消发送”(SND_SEND)指令,格式如下:
      OPCODE = 2
      ASK = 0
      PCK = %b01/10/11
      EXT = 0/1
      CHN = 1
      OPR_LENGTH = 1
      SESSION_ID – 该值取自取消链。
      CHAIN_NUMBER – 链序号,指明要取消哪次发送。
      INSTR_NUMBER – 总是为0。
      操作数:
         2字节:基本返回码。
         2 字节:附加的返回码。
      可选的扩展首部:
         _MSG – 包含任何出错信息的描述。
指令SND_CANCEL用于取消部分已经传输的事务或者片段指令,收到该命令后,传送
链中已经收到的数据全部丢弃。

5  工作管理
工作管理的功能包括:初始化和完成工作;初始化和完成任务;打开/关闭会话连接;
控制激活节点。操作码在1-112之间的指令用于工作管理,这些指令必须通过TCP传输,
即使不需要响应也不能使用UDP。
UMSP采用任务集中控制的工作模型,因为在分散系统中显然不能使用指示字控制。任
务完成的时间是不确定的,结点也随时可能重载,无法保证指示字能够传达到执行工作的分
散系统的所有其它节点上。由于工作仍在继续,与该项工作相关的任务可能又在同一节点上
启动。新的任务可能要分配新的动态资源。新分配的资源地址可能与该任务启动之前已经分
配的资源地址发生交叉。已经过时的指示字可能还保存在其他的节点上,但是尽管形式上正
确,却实际指向了其他的节点。如果无法控制程序的工作就可能造成这种情况。
为了完成交付的工作,UMSP必须:明确定义任务结束的节点;如果某个节点上的任务
在整个工作完成之前已经结束,那么必须通知执行该工作的所有节点;同一个节点上可以多
次初始化任务,但是第一个任务完成时必须通知所有的节点。协议不控制指示字,虚拟机负
责保证指示字的正确性。为此,虚拟机必须有某种结构能够把128位的指示字保存在特殊的
内存区域。在某项任务结束整个工作时协议须通知节点周围的虚拟机,虚拟机则把与该任务
有关的指示字都设为无效,因此对这些指示字的访问是独占的。如果应用程序提供了例外处
理机制,则或者维持工作的能力,或者结束事故状态。这种决策方式可以排除不能控制的程
序。
为了处理UMSP层的具体问题,协议为每项工作定义了控制工作的节点,称为控制工
作节点JCP。JCP既可以是工作启动的节点,也可以是其他的专用节点。JCP的主要功能是
跟踪工作任务的初始化和结束。此外,专用JCP还用于统一的用户验证和防范攻击。
对于工作和任务控制以下标识符是确定的:
1)本地任务标识符(LTID),分配给节点每个活动任务。LTID的长度等于该节点定义
的本地内存地址长度,任何时候节点上所有LTID的值必须是唯一的。已经完成的任务,期
LTID可以赋给新启动的任务。
2)JCP为工作的各项任务分配一个控制任务标识符(CTID),其长度等于JCP节点的
本地内存地址的长度。任何时候JCP定义的所有CTID都必须是唯一的。与LTID相比,CTID
的选择有一些限制。
3)分配给每项任务的全局任务标识符(GTID),格式与节点内存的128位地址相同,
在LTID上代替本地内存地址。
4)分配给各项工作的全局工作标识符(GJID),GJID在JCP节点上定义,格式与JCP
节点上的128位内存地址相同。工作的第一项任务的CTID中本地内存地址被替换。GJID
用于所定义的控制工作的会话连接的打开过程。
LTID和CTID写入指令中长为2/4/8字节的字段,如果指令中的标识符字段比这些标识
符长则,标识符写在后面的字节中。这些字节的最高位必须是0。如果收到的LTID(CTID)
比本地内存地址短,则需要在高位字节填充0。GTID和GJID写入指令中长为4到16字节
的字段,这些标识符中不含FREE字段,FREE字段中的所有字节都被视作0。标识符的长
度在地址首部定义。
发送指令CONTROL_REQ、TASK_REG和SESSION_OPEN时,协议采用超时机制。
超时值由节点设定,但是至少为传输层的最大传输时间间隔的三倍,超时值不影响传输层队
列的等待时间。

5.1   工作初启
工作与虚拟机上执行的用户程序有关,UMSP工作的初始化可以在程序用户开始时或者
运行中进行。工作相关的任务与工作同时在节点上初始化,并指定相应的LTID。如果装载
用户程序的节点被选作JCP,那么工作初始化的问题就超出了网络协议的范围。考虑到以下
原因,可以选择其他的节点作JCP:工作初始化节点通过低速或者超载的通道连接网络,该
通道不适于传输管理信息;节点没有传输管理表的计算能力;必须逐个验证所有的节点。如
果选择其它节点作JCP,那么工作启动的节点必须到JCP上登记该工作。
5.1.1   CONTROL_REQ
指令“请求控制”(CONTROL_REQ)从工作启动的节点发送到作为JCP的其它节点,
格式如下:
      OPCODE = 3
      PCK = %b00
      CHN = 0
      ASK = 1
      EXT = 0/1
      OPR_LENGTH = 2/3  ;依赖于LTID的长度。
      REQ_ID – 由发送方节点协议指定,在应答中发送。
      操作数:
         4 字节:控制参数文档,格式如下:
             0     1     2     3     4     5     6     7
            +-----+-----+-----+-----+-----+-----+-----+-----+
            |                                               |
            +                 JOB_LIFE_TIME                 +
            |                                               |
            +-----+-----+-----+-----+-----+-----+-----+-----+
            | CMT |    Reserved     |        VERSION        |
            +-----+-----+-----+-----+-----+-----+-----+-----+
            |                   Reserved                    |
            +-----+-----+-----+-----+-----+-----+-----+-----+
JOB_LIFE_TIME:2字节,工作的生存期(以秒计),如果为0表示不使用工作生存期
限制。
CMT:1位,多JCP标志,保留作以后的协议扩展使用。
VERSION:1字节,UMSP版本号,必须是1。
Reserved:3+8位,都必须置0。
         4或8字节,工作启动节点(该指令的发送方)所分配的任务LTID。
可选的扩展首部:
_JOB_NAME  - 该首部保存工作名称,只能指定一次以后不可改变。
_INACT_TIME – 保存不活动时间(参见第5.7节)。
收到CONTROL_REQ指令后,JCP首先从接收的指令中检查LTID并作如下处理:
1)	如果发送CONTROL_REQ的节点已经使用那个LTID在JCP上进行了注册,则
发出注册工作非正常结束的消息,参见第5.5.2节(即认为该节点已经重启),
然后批准启动新的工作。
2)	如果没有使用收到的LTID注册的节点,立即允许启动新工作。
如果JCP确认该项控制,则发送CONTROL_CONFIRM指令,否则发送 
CONTROL_REJECT指令。

5.1.2     CONTROL_CONFIRM
指令“确认控制”(CONTROL_CONFIRM)作为JCP对CONTROL_REQ指令的正响
应发出,格式如下:
      OPCODE = 4
      PCK = %b00
      CHN = 0
      ASK = 1  ;该指令不需要应答,这个标志仅仅说明必有REQ_ID字段。
      EXT = 0/1
      OPR_LENGTH = 1-4  ;取决于GJID的长度。
      REQ_ID – 取自CONTROL_REQ指令。
      操作数:
         4-16字节:JCP分配的工作GJID
发送CONTROL_REQ指令意味着控制请求和任务请求的开始,分配的任务CTID是
GJID的一部分(本地内存地址字段)。

5.1.3     CONTROL_REJECT
指令“拒绝控制”(CONTROL_REJECT)作为JCP对CONTROL_REQ指令的负响应
发出,格式如下:
      OPCODE = 4
      PCK = %b00
      CHN = 0
      ASK = 1.  ;该指令不需要应答,这个标志仅仅说明必有REQ_ID字段。
      EXT = 0/1
      OPR_LENGTH = 1/2  ;取决于是否包含控制参数文档字段。
      REQ_ID –取自CONTROL_REQ指令。
      操作数:
         2字节:基本错误码,不能是0。
         2 字节:附加错误码。
         4 字节:控制参数文档(参见第5.1节),可选。
可选扩展首部:
         _INACT_TIME – 保存不活动时间(见第5.7节)。
         _MSG – 任意的错误描述。
5.2    启动任务
工作同时在多个节点上执行,相应的任务必须在每个节点上初始化,对于每项工作一个
节点上只能有一个与其相关的任务,一个任务只能与一个工作相关。创建工作的节点上任务
和工作的初始化同时进行,其它节点在第一次收到与该工作相关的会话连接请求后初始化任
务。打开会话连接的请求包含GJID字段,该字段含有JCP地址。启动任务必须得到JCP的
认可,但如果启动会话连接的请求来自JCP就不要请求批准。

5.2.1     TASK_REG
指令“注册任务”(TASK_REG)由启动任务的节点向远程的JCP节点发出,格式如下:
      OPCODE = 6/7/8 ; 对应于2/4/8字节的CTID 
      PCK = %b00
      CHN = 0
      ASK = 1
      EXT = 0/1
      OPR_LENGTH = 2-8  ;取决于GTID和LTID的长度。
      REQ_ID – 由发送方节点协议分配并在应答中发送。
      操作数:
         2/4/8字节:工作启动任务的CTID,是指令SESSION_OPEN中LTID的部分。
         4-16 字节:GTID,由启动会话连接的节点分配。GTID由发送方地址(传输
层上的地址)和指令SESSION_OPEN中的LTID字段组成。
         2/4/8 字节:LTID,由启动任务的节点分配(该指令的发送方)
      可选的扩展首部:
         _INACT_TIME – 保存不活动时间(见第5.7节)。
只有给定GJID的任务还没有在节点上启动时才能发送TASK_REG命令。JCP根据以
下条件决定是否启动任务:收到的GTID任务已经在JCP上注册;节点请求启动的任务LTID
还没有注册。如果不满足这两个条件,JCP就不能批准该项任务。如果JCP批准了任务启动,
就发送TASK_CONFIRM指令,否则发出TASK_REJECT指令。

5.2.2     TASK_CONFIRM
指令“任务确认”(TASK_CONFIRM)作为JCP对TASK_REQ指令的正响应发出,格
式如下:
      OPCODE = 9
      PCK = %b00
      CHN = 0
      ASK = 1. ;该指令不需要应答,这个标志仅仅说明必有REQ_ID字段。
      EXT = 0/1
      OPR_LENGTH = 1/2  ;取决于CTID的长度。
      REQ_ID – 取自TASK_REG指令。
      操作数:
         4/8 字节:JCP为该任务分配的CTID。
      可选的扩展首部:
         _JOB_NAME – 工作名。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -