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

📄 rfc3018.txt

📁 本程序为在linux下实现FTP传输文件的实现
💻 TXT
📖 第 1 页 / 共 5 页
字号:

5.2.3     TASK_REJECT
指令“任务拒绝”(TASK_REJECT)作为JCP对TASK_REQ指令的负响应发出,格式
如下:
      OPCODE = 10
      PCK = %b00
      CHN = 0
      ASK = 1. ;该指令不需要应答,这个标志仅仅说明必有REQ_ID字段。
      EXT = 0/1
      OPR_LENGTH = 1
      REQ_ID – 取自CONTROL_REQ指令
      操作数:
         2 字节:基本错误码,不能为0。
         2 字节:附加的错误码。
      可选的扩展首部:
         _INACT_TIME –非活动状态时间(见第5.7节)
         _MSG – 任意的错误说明。

5.2.4     TASK_CHK
为了保证安全,即使任务启动后,收到打开会话连接请求的节点也可能要到JCP上对
启动连接的节点进行核实。“任务检查”(TASK_CHK)指令由收到建立会话连接指令
SESSION_OPEN的节点 JCP向发出。拥有该GJID的任务必须已经在该节点上存在。该指
令格式与TASK_REG类似,操作码是11,JCP同样使用TASK_REG指令应答。如果收到
的任务GTID和LTID已经在JCP上注册则发出确认指令。该指令是可选的。

5.3   建立会话连接
会话连接在同一工作的两个任务之间建立。会话连接由虚拟机自发建立,用于在虚拟机
之间交换指令。一个会话连接只能与节点上的一项任务有关,该任务可能与不同的节点建立
多个连接,对于每个GJID两个节点之间只能由一个会话连接。建立会话连接的请求命令包
含工作的全局标识符GJID。如果收到建立连接指令的节点上还没有该GJID,虚拟机就创建
新的任务,如果GJID所标识的任务已经启动,则不创建新任务。
会话连接必须通过TCP建立,但是连接建立后,如果指令的发送方不需要应答,也可
使用UDP。多个会话连接可以使用同一个TCP连接,一个会话连接也可使用多个TCP连接。
协议允许不建立会话连接的工作方式,但是节点必须有默认的虚拟机,并且虚拟机部通过连
接也可执行指令。
在建立会话连接时,双方就使用的虚拟机类型和实现的协议功能子集达成一致。会话连
接UMSP可以是不对称的,就是说连接的上方可以采用不同类型的虚拟机,提供不同的功
能子集。如果建立的会话连接中虚拟机类型为0,则表示成组虚拟机(见第9章),实际的
虚拟机类型不能是0。建立会话连接可能需要2到8次握手。

5.3.1     SESSION_OPEN
指令“打开会话”(SESSION_OPEN)用于启动会话连接并设置我手中使用的连接参数。
格式如下:
      OPCODE = 12
      PCK = %b00/11  .第一个指令(启动)取%b00,以后都是%b11。
      CHN = 0
      ASK = 1
      EXT = 0/1
      OPR_LENGTH = 6 - 10  ;取决于GJID和LTID的长度。
      SESSION_ID – 第一条指令该字段为空, 此后是接收方指定的会话标识符。
      REQ_ID – 指令发送方指定的会话连接标识符。
      操作数:
         2 字节:接收方需要的虚拟机类型。
         2 字节:接收方需要的虚拟机版本。
         4 字节:接收方需要的连接文档。
         2 字节:发送方的虚拟机类型。
         2 字节:发送方的虚拟机版本。
         4 字节:发送方给出的连接文档。
         2 字节:发送方为会话分配的缓冲区大小(以256字节组成的块为单位),0
表示没有缓冲区。
         4-16 字节:GJID。
         4/8 字节:发送方节点指定的任务(在发送方上)LTID,作为GTID字段的
一部分用于指令TASK_REG。
如果接受方所要求的虚拟机类型和版本是0,接收方节点自行选择选择虚拟机类型并在
应答中给出说明,连接的建立必须绑定某个虚拟机或者虚拟机组。
在连接的建立中最多一共可以传输7个SESSION_OPEN指令,指令SESSION_ACCEPT
作为建立连接请求的应答指令,如果拒绝建立连接则使用SESSION_REJECT指令。其中的
任何一个步骤都可拒绝连接的建立,但是要么批准连接,要么在第8次请求之前明确拒绝。
连接过程中部分参数可能改变:虚拟机类型和版本,连接文档。如果反复收到来自某个节点
的打开会话连接的请求,而请求中的GJID已经被原来建立的连接使用,那么可以视情况作
以下处理:
1)	如果请求来JCP,则必须:紧急结束原来的任务并时占用的动态资源;无需请
求JCP确认启动新的任务;同意建立连接。
如果请求来自其他的节点则应拒绝建立新的会话连接,不必改变现有的任务。

5.3.2     SESSION_ACCEPT
指令“接收会话”(SESSION_ACCEPT)是建立会话连接请求的正响应,格式如下:
      OPCODE = 13
      ASK = 1
      PCK = %11
      EXT = 0/1
      CHN = 0
      OPR_LENGTH = 0
      SESSION_ID – 接收方指定的会话连接标识符。
      REQ_ID – 发送方分配的会话连接标识符。

5.3.3     SESSION_REJECT
指令“拒绝连接”(SESSION_ACCEPT)是建立会话连接请求的负响应,格式如下:
      OPCODE = 14
      ASK = 0
      PCK = %b11
      EXT = 0/1
      CHN = 0
      OPR_LENGTH = 1
      SESSION_ID – 接收方指定的会话连接标识符。
      操作数:
         2字节:基本错误码,不能是0。
         2 字节:附加错误码。
      可选的扩展首部:
         _MSG – 任意的错误说明。
5.3.4   连接文档(Profile)
链接文档用4字节的标志字段定义,该标志分为32个标识符S0-S31,标识符中的数字
表示位的序列号。如果设为1则提供对应的功能,否则不(或者不一定)提供对应的功能。
会话连接中所建立的功能列表详述如下:
与链有关的:
      S0 – 使用分段指令
      S1 – 使用序列
      S2 – 使用事务
与建立连接有关的:
      S3 – 使用无连接的数据交换
      S4 – 使用建立连接的数据交换
指令格式:
      S5  - 保留,必须是0
      S6  - 交换指令中使用16字节地址
      S7  - 允许使用压缩的指令首部(OPR_LENGTH < > %b111)
      S8  - 允许使用扩展格式的指令首部 (OPR_LENGTH = %b111)
      S9  - 对于数据字段不超过254字节的指令使用扩展首部
      S10 – 对于数据字段不超过4*10^9字节的指令使用扩展首部
      S11-S15  操作数种数据字段的最大长度(4字节字),这些位是公用的。如果用
字节计算,等与该字段的值加1再乘上4。如果这4位是1111,则数据字段的最大长度由指
令格式定义。
      S16-S19  这些位是通用的。如果表示指令受方的需求连接文档,这些位保存
UMSP版本号(必须是%b0001)。如果表示发送方的连接文档,该字段保存工作的优先级。。
工作优先级用于:工作指令发送到传输层的队列;设置在传输层上的优先级;设置任务计算
的优先级。
      S20 – 指明是否采用4字节定界方式,如果S16 = 1,则:
         (1)  OPR_LENGTH = %b111
         (2)  所有的扩展首部和操作数字段都从4的倍数开始。
         (3)  如果需要每个首部的后面填0。
      S21 – 使用对象的过程名。
      S22 – 使用对象名。
可以执行那些指令:
      S23 – 可以响应虚拟机上执行的操作(指令RSP)。
      S24 – 使用数据读取和比较指令。
      S25 – 使用数据写入指令。
      S26 – 使用控制传输指令。
      S27 – 使用同步指令。
      S28 – 使用操作对象的指令。
      S29 – 直接访问对象内存指令。如果该标志置0,只能通过对象方法访问对象。
如果S28是0,则该位也必须是0。
      S30 – 在0会话中使用MVRUN指令。
      S31 – 保留,必须是0。

5.4   关闭会话
只有已经建立会话连接后节点才能关闭会话连接,关闭会话连接使用SESSION_CLOSE 
指令。断开连接需要执行3次握手。必须保证在无法控制的紧急情况下也能断开连接。该指
令可由任何一方发出。 假定A是建立连接的启动方,,B是连接的另一方。要关闭连接A
必须发出SESSION_CLOSE指令。发出该指令后A可以重新发送原来的指令,这意味着它
取消了关闭连接指令。应答指令(见第6章)不会影响连接的关闭。发出SESSION_CLOSE
指令的节点不再使用超时限制,可以一直等下去。
节点B在收到SESSION_CLOSE指令后发出RSP_P指令响应。如果应答指令中的基本
返回码是0就表示同意关闭连接,否则表示拒绝。在作出肯定性的响应后,节点在30秒内
不能使用连接。如果在这段时间内,没有从节点A收到除了应答指令以外的   
SESSION_ABEND或其他指令,节点B就发出SESSION_ABEND指令并认为该会话连接已
经关闭。
如果收到的SESSION_CLOSE指令作出了肯定答复,节点A就发出SESSION_ABEND
指令,然后就认为该连接已经关闭了。节点A可能要中止关闭连接,为此只要发出一个其
他命令(也可以是NOP)就可以了。这样关闭过程就终止了,会话连接重新切换到工作状
态。
5.4.1   SESSION_CLOSE
指令“关闭会话”(SESSION_CLOSE)启动会话连接的关闭过程,格式如下:
      OPCODE = 15
      PCK = %b01/11
      CHN = 0
      ASK = 0
      EXT = 0/1
      OPR_LENGTH = 0/1
      SESSION_ID – 受方指定的会话标识符。
      操作数:
         2字节:基本终止码
         2字节:附加终止码
      可选的扩展首部:
         _MSG – 任何信息。
可以没有操作数,相当于0退出码。

5.4.2     SESSION_ABEND
指令“中止会话”(SESSION_ABEND)用于无条件结束会话。发出该指令的节点结束
连接双方的数据交换,不等待对方的响应。格式如下:
      OPCODE = 16
      PCK = %b01/11
      CHN = 0
      ASK = 0
      EXT = 0/1
      OPR_LENGTH = 0/1
      SESSION_ID – 受方指定的会话标识符
      操作数:
         2字节:基本终止码
         2字节:附加终止码
      扩选的扩展首部:
         _MSG – 任意信息
可以没有操作数,相当于0退出码。

5.5   终止任务
用户程序正常结束工作完成任务也就完成了,这个过程在后面描述。下面的情况要求不
考虑整个工作的进展而结束任务:节点上没有足够的资源继续任务的执行;结点已经完成了
工作;由于内部原因虚拟机没有受到结束的命令。任务分配的资源可能位于任何一个节点上,
因此任务结束时必须通知所有的节点。结束任务的节点必须异常关闭与参与该项任务的所有
节点之间的会话连接(发出SESSION_ABEND指令)。

5.5.1     TASK_TERMINATE
指令“终止任务”(TASK_TERMINATE)由结束任务的节点向JCP发出,格式如下:
      OPCODE = 17
      PCK = %b00
      CHN = 0
      ASK = 0
      EXT = 0/1
      OPR_LENGTH = 2/3  ;依赖于CTID的长度。
      操作数:
         2字节:基本终止码
         2字节:附加终止码
         4/8 字节: CTID.
      可选的扩展首部:

⌨️ 快捷键说明

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