1、 h ICS 33.040.40 M32 中 华 人 民 共 和 国 通 信 行 业 标 准 YD/T XXXX-XXXX 延迟容忍网络 bundle 协议技术要求 Technical requirements of Delay Tolerant Networking Bundle Protocol (报批稿) 20XX-XX-XX 发布 20XX-XX-XX 实施 中 华 人 民 共 和 国 工 业 和 信 息 化 部 发 布 YD I 目 次 前 言 .II 1 范围 .1 2 规范性引用文件 .1 3 术语和定义 .1 4 数据格式 .3 4.1 概述 .3 4.2 自我限定数值( SD
2、NVs) .3 4.3 包裹层处理控制标志 .3 4.4 块处理控制标志 .4 4.5 端点 ID( EID) .4 4.6 包裹层块格式 .5 4.7 扩展块 .6 4.8 字典修正 .7 5 包裹层处理 .7 5.1 管理记录生成 .7 5.2 包裹层传输 .7 5.3 包裹层调度 .7 5.4 包裹层转发 .7 5.5 包裹层到期 .8 5.6 包裹层接收 .8 5.7 本地包裹层交付 .8 5.8 包裹层的分片 .9 5.9 应用数据单元的重组 .9 5.10 保管传输 .9 5.11 保管传输成功 .9 5.12 保管传输失败 .9 5.13 包裹层的删除 .10 5.14 丢弃包裹
3、层 .10 5.15 取消一次传输 .10 5.16 轮询 .10 6 管理记录处理 .10 6.1 管理记录 .10 6.2 管理记录生成 .14 6.3 保管信号接受 .14 7 对汇聚层的服务需求 .14 II 前 言 本标准按照 GB/T 1.1-2009给出的规则起草。 请注意本文件的某些内容可能涉及专利,本文件的发布机构不承担识别这些专利的责任。 本标准是 “延迟容忍网络 ”系列标准之一,本系列标准的预计结构及名称如下: 1、延迟容忍网络 体系架构 2、延迟容忍网络 LTP协议技术要求 3、延迟容忍网络 Bundle协议技术要求 随着信息技术的发展,以后还将根据实际情况制定后续相关
4、标准。 本标准考虑到国内发展延迟容忍网络需求 ,主要参考 IETF RFC:5050,2007 Bundle Protocol Specification制定而成。 本标准由中国通信标准化协会提出并归口。 本标准起草单位:中国信息通信研究院、北京邮电大学、华为技术有限公司 本标准主要起草人:宋菲、马军锋、穆琙博、张杰、 王哲、柴瑶琳、吴冲 1 延迟容忍网络 bundle 协议 技术要求 1 范围 本标准规定了在延迟容忍网络( DTN)中包裹层( Bundle)协议的数据格式、处理流 程和用于交换消息的抽象服务描述。 本标准适用于 具有超远距离、大时延的星际网络通信 。 2 规范性引用文件 下列
5、文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本 适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文 件。 IETF RFC5050 2007:包裹层协议规范 (Bundle Protocol Specification) 3 术语和定义 下列术语、定义适用于本文件。 3.1 包裹层 Bundle 包裹层协议的协议数据单元。 一个包裹层至少包括 2 个块( Block) : 主包裹层块、包 裹层负载块。 3.2 包裹层负载 Bundle payload 传输的应用数据。 3.3 分片 Fragment 负载为分片负载的包裹层。 3.4 包裹层节
6、点 Bundle node 包裹层节点是一个能够发送和接收包裹层的实例。包裹层节点可以被实例化为一个运 行在通用计算机上的程序,包裹层也可以是一个进程、一个面向对象操作系统的对象或一 个专用的硬件设备。一个节点由三个组件组成:包裹层协议代理( BPA)、一组汇聚层适 配器 (CLA)和应用代理( AA)。 3.5 包裹层协议代理 Bundle protocol agent, BPA 包裹层协议代理是节点的一个组件,它提供包裹层协议服务,执行包裹层协议程序。 3.6 汇聚层适配器 Convergence layer adapter, CLA CLA是节点的一个组件,通过调用本地自带的网际协议服务
7、,并利用 BPA来发送和接 收包裹层。 3.7 2 应用代理 Application agent, AA AA是节点一个组件,它调用包裹层协议服务来实现通信。 AA有两个元素 : 管理元素 、 应用元素。 AA的应用元素能够发出传输请求、接收数据的交付和处理应用数据单元。 AA 的应用元素与 BPA的唯一接口是 BPA服务接口 。 AA的管理元素能够发出传输管理记录 (状 态报告和托管信号)的请求、接收交付以及处理节点接收到的任何保管信号。除了 BP服务 接口 , 在 BPA和 AA管理元素之间还有一个私有的控制接口 , 使他们之间能够直接交互 。 当 某个节点只用作网络中的路由节点的时候,
8、AA可以没有应用元素。 3.8 包裹层端点 Bundle endpoint 一个包裹层端点就是一组包裹层节点,这些节点全部通过端点 ID来标志。一种特殊的 情况是:一个端点不会包含超过一个节点,这种情况被称为独端点。每个包裹层节点必须 是至少一个独端点的成员。 3.9 注册 Registration 注册就是一个给定节点在给定端点中的成员资格的状态机。对于一个给定的端点,可 以同时发生任何数量的注册,对于一个给定节点,同时能够进行任意数量的注册。注册在 任何时候都必须处于两种状态之一:激活状态或被动状态。一个注册通常关联 “交付失败 行为 ”, 该行为发生在当注册处于被动状态时接收到一个 “可
9、交付 ”包裹层时 。 交付失败行为 必须是以下两种之一: ( 1) 延迟交付,直到( a) 该包裹层是最近接收到的,( b) 注册机被查询或注册机处 于激活状态; ( 2)放弃交付。 3.10 交付 Delivery 当接收到包裹层之后,如何处理该包裹层由这个接收节点是否在目的端点中注册来决 定。如果是,且包裹层的负载是非分片的(包括分片被重组之后),这个包裹层就应该正 常的交付给应用代理。 3.11 交付能力、放弃 Deliverability, Abandonment 一个包裹层被认为是可交付的,当且仅当( a)包裹层的目的端点是注册过的端点, ( b)包裹层还未被交付,( c)对包裹层的
10、交付尚未被放弃。放弃一个包裹层就是简单的 声明它不再被交付。 3.12 删除、丢弃 Deletion, Discarding 包裹层协议代理通过停止对一个包裹层的所有操作并且删除与之相关的所有信息实现 包裹层丢弃。包裹层被丢弃不产生任何管理记录。当一个包裹层有保留约束( retention constraint)时,它不能被丢弃。当包裹层协议代理收到一个删除包裹层通知时,包裹层协 议代理就可以移除所有的保留约束,丢弃该包裹层。 3.13 传输 Transmission 传输是包裹层协议代理为了响应应用代理的传送请求,产生的一个持续的过程,来发 送一个包裹层到一些端点(可以是目的端点也可以是中间
11、转发端点)的最小接收组里的所 有节点。一个给定节点的包裹层协议代理可以同时发出任意数量的传送。 3.14 3 保管 Custody 包裹层的 “保管 ”发生在转发该包裹层的同时,保留该包裹层的一个副本使其在需要的 时候能够进行重传,直到该 “保管 ”释放。对于目的地址是独端点,节点的包裹层保管释放 条件是( a) 接收到其他节点已经接收保管的通知,( b) 接收到包裹层已经被交付的通知 , ( c) 包裹层因某些原因被删除,如生存时间终结等。对于目的地址是多端点的情况,本规 范未做定义。 4 数据格式 4.1 概述 每一个包裹层应该是由至少 2 个块结构构成的序列。序列中第一个块必须是一个主包
12、 裹层块,且包裹层中只有一个主包裹层块。之后是其他类型的包裹层协议块,如包裹层安 全协议 ( BSP) 。 序列中至多包含一个负载块 。 序列中的最后一个块必须包含 “last block”标 志, 且值设置成 1;主包裹层块之后的其余各块中, 标志位必须设置成 0。 4.2 自我限定数值( SDNVs) 包裹层协议协调传输带宽的最小消耗,通过: 可扩展性解决不定性的需求; 可伸缩性解决网络规模庞大和负载大小 包裹层中使用 SDNV。 一个 SDNV 是一个 N 字节编码的数值 , 最后一个字节中的最高有 效位设为 0, 其余字节中的最高有效位必须设为 1。 SDNV 中的编码值是无符号二进制
13、数 , 通过连接一个单独位和 SDNV 中每个字节的最低 7 位有效位而成。 例如: 0 xABC : 1010 1011 1100 编码为 1 00 10101 0 0111100 = 10010101 00111100 0 x1234 : 0001 0010 0011 0100 = 1 0010 0011 0100 编码为 1 0 100100 0 0110100= 10100100 00110100 0 x4234 : 0100 0010 0011 0100 = 100 0010 0011 0100 编码为 1 000000 1 1 0000100 0 0110100= 10000001
14、 10000100 00110100 0 x7F : 0111 1111 = 111 1111 编码为 0 1111111 = 01111111 4.3 包裹层处理控制标志 主包裹层块中的包裹层处理控制标志字段是一个 SDNV; SDNV 中的编码值为二进制 字符串,用于调用所选的包裹层处理控制特征。 图 1 包裹层处理控制标志位 0 到 6 位的含义如下: 0包裹层是分片包裹层; 1应用数据单元是一个管理记录; 2包裹层一定不是分片包裹层; 3保管传输请求; 4目的端点是独端点; 5应用确认请求; 4 6预留。 713 位用来表明包裹层的服务类别。 7、 8 位用于表示包裹层的优先级,值越大
15、优 先级越高: 00 = bulk, 01 = 普通, 10 = 加急, 11 为预留。 913 位为预留位。 1420 位是 “状态报告请求标志 ”字段,定义如下: 14Request reporting of 包裹层 reception( 请求包裹层接收报告 ) ; 15Request reporting of custody acceptance( 请求保管接受报告 ) ; 16Request reporting of bundle forwarding( 请求包裹层转发报告 ) ; 17Request reporting of bundle delivery( 请求包裹层交付报告 )
16、; 18Request reporting of bundle deletion( 请求包裹层删除报告 ) ; 19预留; 20预留。 4.4 块处理控制标志 图 2 块处理标志位 0Block must be replicated in every fragment( 块必须复制到每个分片中 ) ; 1Transmit status report if block cant be processed.( 如果块不能处理,则传输状态报 告 ) ; 2Delete bundle if block cant be processed( 如果块不能处理,则删除包裹层 ) ; 3Last block(
17、 最后一块 ) ; 4Discard block if it cant be processed( 如果块不能处理,丢弃它 ) ; 5Block was forwarded without being processed( 不对块进行处理直接转发 ) ; 6Block contains an EID-reference field( 块包含 EID-refenence 字段 ) 。 4.5 端点 ID( EID) 包裹层的目的地是包裹层端点 , 由 “端点 ID”标志 。 每一个端点 ID 由一个统一资源标志 符( URI)表示。如可用下面结构表示: : 包裹层协议中规定 scheme nam
18、e 和 SSP 的长度不能超过 1023 个字节。 包裹层块允许引用大量的 EID。 Endpoint ID references用于在字典中查找相应的 EID; 每一个 Endpoint ID references 都是一对有序的 SDNV: 第一个 SDNV 表示 EID 中的 scheme name 在字典中的偏移量; 第二个 SDNV 表示 EID 中的 SSP 在字典中的偏移量; 这种编码可以进行一定程度的压缩: 当源和 report-to 的包裹层是相同端点时, EID 可 能会被引用两次但在字典中只出现一次。 由 确定的方案名称,是一组语法和语义规则,用于充分说明如何分析 和解释
19、 SSP。本规范只给出一种特定情况下的参考方案: “DTN“中,用 dtn: none用于表示当前 EID 为空。目的地为空端点的包裹层永远 不会被处理,且空端点的最小接收组为空。 5 4.6 包裹层块格式 4.6.1 包裹层主块 包裹层协议的协议数据单元被称为包裹层,一个包裹层至少包含两个块,即一个主包 裹层块和一个包裹层负载块。主包裹层块包含了 包裹层的一些基本信息,应用数据单元被 置于包裹层负载块中。 图 3 包裹层主块的格式 包裹层主块包含了包裹层路由所需的基本信息: ( 1) 版本号指示包裹层协议的版本, 当前版本号为 0 x06; ( 2) 包裹层处理控制标志代表了 包裹层处理的各
20、项要求; ( 3) 块长度表示主块长度域后到主块结束的总长度; ( 4) 目的 scheme 偏移量表示目的端点 ID 的 scheme 名字在字典数组中的偏移量; ( 5) 目的 SSP 偏移量指示目的端点 ID 的 scheme-specific (ssp)部分在字典数组中的偏 移量; ( 6) 源端点、报告端点、 保管端点的 scheme 和 ssp 的偏移量的含义与目的端点类似 ; ( 7) 创建时间戳表示包裹层创建时间; ( 8) 创建序列号表示创建包裹层的序号; ( 9) 生存期表示包裹层载荷的有效时间; ( 10) 字典长度表示字典数组的长度 。 字典是一个字节数组 , 包括主块
21、中以及其他 DTN 协议块中所引用的端点 ID 的 scheme 和 ssp; ( 11) 段偏移表示该包裹层载荷在原始应用数据单元中的位置。 4.6.2 典型包裹层块格式 除了主块以外的其他所有类型的包裹层块由以下字段依次组成: Block type code: 8 位无符号 2 进制整数。 值为 1 表示该块是一个包裹层负载块。 值从 192 到 255 本规范中不做定义而用于私有或实验用途。其余所有值预留。 Block processing control flags: 无符号整型 SDNV。每一个比特位用来表示所选的 块处理控制特征。 6 Block EID reference cou
22、nt and EID references (可选 ):当且仅当块处理控制标志字 段中的 EID-reference field 标志位被设置为 1, 该字段表示该块的 EID reference 的 计数和 EID reference 自身。 Block data length: 无符号整型 SDNV。表示该块中所有剩余字段的总长度。 Block-type-specific data fields: 格式和顺序取决于数据类型 , 长度为块中数据长度 。 大部分块使用网络字节顺序。 图 4 不带 EID 参考列表的块的格式 图 5 带有 2 个 EID 参考的块的格式 4.6.3 包裹层负载块
23、格式 图 6 包裹层负载块格式 Block Type: 1 字节长度,表示该块的类型。 此处值为 1。 Block processing control flags: 无符号整型 SDNV。 具体数值参见章节 4.4。 Block data length: 无符号整型 SDNV。表示该块中所有剩余字段的总长度,即包 裹层负载的长度。 Payload:表示包裹层中的应用数据。 4.7 扩展块 扩展块是指除主块和负载块之外的所有其他块。因为包裹层协议中没有明确定义扩展 块 , 所以当节点收到带有扩展块的包裹层时可能不处理 。 这时 , 块处理标志中的 Block was forwarded wit
24、hout being processed标志位必须被设置为 1。接收该包裹层的下一个节点可以 7 选择性的将此标志位设置为 0 以便能正常处理。 4.8 字典修正 包裹层字典中的任何字符串( scheme names 或 SSP),如果没有引用包裹层主块或任 何扩展块的 EID 参考字段,则转发包裹层时可删除该字符串。 当从字典中移除字符串而导致其他字符串的偏移量发生变化,所有与该字符串相关的 端点 ID 参考都应做相应调整。 5 包裹层处理 5.1 管理记录生成 所有包裹层的传输初始于对节点应用程序代理提出的包裹层传输请求的响应。由包裹 层协议代理负责生成一个管理记录(包裹层状态报告或保管信
25、号)。 某些情况下,对状态报告的请求会导致网络中不可接收的包裹层流量。因此,状态报 告只在(强制性的,唯一的)一种情况下生成,即托管传输的包裹层发出删除请求。在所 有其他情况下,是否生成请求状态报告取决于包裹层协议代理的实现。 5.2 包裹层传输 步骤 1: 如果包裹层传输过程中请求保管传输 , 而且源节点承认该保管 , 则包裹层协议 代理必须承诺接受该包裹层保管 ( 进入步骤 2) , 或者认为是不能授予的请求 , 剩余步骤跳 过。 步骤 2:包裹层传输初始化。包裹层的创建需根据其传输的参数, 如当前保管端点 ID 设置为空端点: “dtn: none”, “保留约束 ”设置为 “Dispa
26、tch pending”。 步骤 3: 处理流程从 5.4 章节中的步骤 1 开始。 5.3 包裹层调度 步骤 1:如果包裹层的目的端点中包含该节点, 则处理过程见 5.7 章节。 步骤 2: 处理流程从 5.4 章节中的步骤 1 开始。 5.4 包裹层转发 步骤 1:保留约束 Forward pending须添加到包裹层中,删除 Dispatch pending保留约 束。 步骤 2: 包裹层协议代理必须依照图 11 中所列原因来决定是否转发。尤其是: 包裹层协议代理要决定转发到哪个端点。如果包裹层协议代理发现其不能决定转 发到哪一个端点时,则停止转发; 如果包裹层协议代理成功地选择了发送到
27、哪一个端点,包裹层协议代理还需要选 择一个或多个合适的汇聚层的适配器,保证节点能将包裹层发送到所选端点中的 任何一个节点。如果包裹层协议代理发现其不能正确选择汇聚层的适配器,则停 止转发。 步骤 3: 如果因为图 11 中的任何一个原因转发被停止, 则须依据 5.4.1 章节进行处理 , 跳过本章节剩余操作步骤。 步骤 4: 如果保管传输标志位设置为 1, 则必须依据 5.10.2 章节进行处理。 步骤 5: 对于所选择转发到的每个端点 , 包裹层协议代理必须调用所选择的汇聚层适配 器的服务,以保证构成该端点的最小接收组的节点的发送。 步骤 6: 当所有选定的汇聚层适配器通知包裹层协议代理 ,
28、 其关于该包裹层的发送过程 已经结束时: 如果 “请求包裹层转发状态报告 ”标志位设置为 1, 则应生成一份包裹层转发状态报 告 。 如果包裹层中包含 “custody accepted”保留约束 , 并且知道端点的最小接收组中 8 所有节点都不会向该节点回送包裹层,则该包裹层转发状态报告中的原因代码必 须设置为 “forwarded over unidirectional link”; 否则 , 设置为 no additional information; 必须删除包裹层 中 Forward pending保留约束。 5.4.1 转发禁忌 步骤 1:包裹层协议代理必须决定是否宣布本次转发失败
29、; 步骤 2:如果宣布了转发失败, 则必须遵照章节 5.4.2 处理。否则:( a)如果 “Request reporting of bundle forwarding”标志位被设置成了 1, 则必须遵照章节 5.4.10 处理;( b) 某些 时候当包裹层转发成为禁忌, 处理过程从 5.4 章节中的第 5 步开始。 5.4.2 转发失败 步骤 1:如果包裹层 “保管传输请求 ”标志位 被设置为 1,保留传输失败必须被处理。 对于目标是独端点的包裹层,包裹层协议代理必须通过生成一个 “失败 ”信号来处理该保管 传输失败;信号中需要包含一个失败原因代码。 步骤 2:如果包裹层的目的端点是该节点所
30、在的端点,则须删除该包裹层的 Forward pending保留约束字段。否则,删除该包裹层。 删除过程需要遵照章节 5.13。 5.5 包裹层到期 如果当前时间超出了包裹层创建时间与主包裹层块中定义的生命周期之和,则认为包 裹层处于到期状态。包裹层到期可能发生在包裹层处理过程中任何一个环节。当包裹层到 期之后,包裹层协议代理必须删除此包裹层。 删除的具体过程必须遵循章节 5.13 。 5.6 包裹层接收 步骤 1: Dispatch pending保留约束字段须添加到包裹层中。 步骤 2: 如果包裹层 “状态报告请求标志 ”字段中的 request reporting of bundle r
31、eception 标志位被设置为 1,则应该生成一个包裹层接收状态报告,原因代码为 No additional information。 步骤 3:如果包裹层中每块都是扩展块,则在以下几种情况下包裹层协议代理不处理 : 如果块中的 block processing 标志位表明需要生成一个状态报告,则应该生成一个 包裹层接收状态报告,原因代码为 Block unintelligible; 如果块中的 block processing 标志位表明需要删除该包裹层,则应该生成一个包裹 层接收状态报告,原因代码为 Block unintelligible; 如果块中的 block processing
32、 标志位表明不需要删除该包裹层 , 但是需要丢弃该块 , 则包裹层协议代理必须移除该块; 如果块中的 block processing 标志位表明既不需要删除该包裹层 , 也需要丢弃该块 , 则包裹层协议代理必须将块中的 Block was forwarded without being processed标 志位设置为 1; 步骤 4: 如果包裹层保管传输标志位被设置为 1, 并且两个包裹层具有相同的源端点 ID、 时间戳、分片偏移量和负载长度, a) 包裹层没有被丢弃; b) 包裹层处于 “custody accepted” 状态,则应该进入保管传输冗余处理过程。否则, 进入到步骤 5.
33、步骤 5: 处理过程遵照章节 5.7。 5.7 本地包裹层交付 步骤 1: 如果接收到的包裹层是一个分片, 应用数据单元的重组必须遵照章节 5.9 进行 处理 。 如果重组结果与原始应用数据单元一致 , 则进入步骤 2; 否则 , Reassembly pending 保留约束字段必须被添加到包裹层中。 步骤 2:交付取决于该注册的状态, 该注册的端点 ID 与该包裹层的目的地相匹配。 如果注册处于激活状态,则包裹层必须被交付 如果注册处于被动状态,则交付失败 9 步骤 3:以下情况需要尽快将包裹层交付。 如果包裹层状态报告请求字段中 request reporting of bundle delivery标志位被设置 为 1, 则应该生成一份包裹层交付状态报告 。 请注意 , 此状态报告只指出有效负载 已被传递给应用程序代理,而不是应用程序代理已处理了该有效负载。 如果包裹层保管传输请求标志位被设置为 1,报告中必须表示为保管交付。 5.8 包裹层的分片 有些时候需要包裹层协议代理减少包裹层的大小以便将其正常转发。减少包裹层大小 的过程称为分片。任何包裹层,如果其主块包裹层处理标志位没有声明不能分片,则该包 裹层可以在任何时间,因为任何理由,由包裹层协议代理分析完成。 分片应该遵从以下原则: 有效负载所产生的所有分片级联之后要