就DTN目前的发展而言,最具代表性的是一种基于覆盖网(Overlay Network)的方案,它能将不同的通信设备实现互联。这是一个全新的网络架构,核心在于在传输协议(TCP、UDP)之上加入面向消息的端到端覆盖架构,称为“束层协议(或束协议)”(Bundle Protocol,BP)。DTN协议体系结构如图1-3所示。
图1-3 DTN协议体系结构
DTN将不同的通信网络划分为不同的区域,每个区域通过DTN的网关连接 [22] ,提供了两种不同协议栈之间相互转换的标准方式,构建了通用的应用层网关架构,保证了应用程序可以跨越多个通信协议进行通信。在同一区域内的节点因为使用相同的通信协议,可以直接传输和接收数据。图1-4所示为抽象的DTN模型,图中有4个局域网络和1个骨干网络。局域网络和骨干网络拥有不同的通信协议和架构。按照传统通信网络,它们之间无法做到互通互联。在DTN体系架构中,由于引进了覆盖层,骨干网络与区域网络可以通过4个DTN的网关实现互通互联。DTN网关就像一座桥,用于实现不同协议之间的转换操作 [21][22] 。
图1-4 抽象的DTN模型
要了解DTN的网络协议体系,就必须知道DTN网络重点发展的两个协议:BP和LTP。BP是一种覆盖网协议,运行在不同的底层协议之上,如现有的Internet协议及其他更复杂的协议。DTN中很多问题都可以通过BP解决,但有的问题必须由底层协议来处理,这时LTP便发挥了作用 [23] 。例如,在复杂深空通信环境中,存在长时延和链路频繁中断问题,需要一种能容忍这种环境的点到点协议,LTP便是处理点到点可靠性传输的协议。
BP是DTN协议体系中一个重要协议,BP工作在LTP、TCP、UDP等协议之上。BP的主要功能有保管传输、保障端到端的可靠性等。图1-5所示为BP节点结构示意图。其中,应用层代理利用BP服务发送、接收和处理应用数据单元(Application Data Unit,ADU)数据;BP代理执行束协议流程并提供服务,其提供的服务主要有在端点注册节点、中止注册、将注册在主动和被动状态转换、将Bundle传送至识别的端点、取消传输、查询被动状态下的注册、递交已接收Bundle;汇聚层适配器使得BP代理能够利用底层协议提供的服务 [24] 。在DTN体系中采用了存储与转发机制,该机制侧重于存储,也就是先存储后转发。当在Bundle发送过程中出现链路中断情况时,Bundle会保存在中继节点中,等待下一次传输时机的到来。当链路再次可传输时,再将Bundle从中继节点发送到下一个节点。存储与转发传输机制能在一定程度上解决受限网络中因链路频繁中断而造成的数据传输困难问题。
图1-5 BP节点结构
BP中具有保管权限的概念,即Bundle的保管权限仅局限于当前节点,目的是保证Bundle本身的完整性 [25] ,以应对复杂多变的深空环境,防止在长时间延误和链路长时间中断的情况下Bundle的完整性受到破坏,避免使数据传输的可靠性大大降低。BP层中数据的保管传输过程如图1-6所示。
图1-6 BP层中数据的保管传输过程
可以看出,Bundle从本地节点往下一个节点传输前,是保存在本地的存储设备中的,本地节点拥有该Bundle的保管权。下一个节点根据路由信息来决定是否接收这个Bundle。数据开始传输时,保管权仍然不变,当传输过程中出现链路中断,保管权仍然保留在原发送节点。只有当下一个节点完整接收Bundle之后,才向上一个节点发送确认信息,上一个节点接收到信息之后便会删除此Bundle。而此时保管权的所属产生了改变,变为由下一个节点掌握,这个过程保证了Bundle的完整性。除已注册接收节点的Bundle传输完毕外,如果别的节点完整接收了此Bundle,那么它的保管权也会改变 [26] 。另外,如果Bundle本身的生存时间已到,那么所在的节点也会将它删除,不再保留它的保管权。
BP传输的基本数据单元Bundle由两个或者更多数据“块”(block)组成。作为第一个数据块,每个Bundle有且仅有一个primary bundle block。primary bundle block之后可能跟随多个其他类型数据块,如Bundle安全协议(Bundle Security Protocol,BSP)数据块等。这些数据块中最多只能有一个是payload block。最后一个数据块必须标记“last block”标识符。数据块格式中的值都用SDNV(Self-Delimiting Numeric Values)表示,以减小传输带宽消耗。其中,primary bundle block和payload block格式如图1-7所示。
图1-7 primary bundle block和payload block格式
primary bundle block包含Bundle传输所需的基本路由信息,主要有以下几种。
(1)控制标识符。控制标识符包含3个部分:状态报告、服务等级、通用设置,定义了消息状态报告请求设置、是否为管理记录、是否需要保管传输、Bundle分块等信息。
(2)源节点、目的节点和保管节点地址。端点ID包含两个部分:Scheme Offset和SSP(Scheme-Specific Part)。通过记录源节点、目的节点和保管节点,结合检索字典寻找相应节点。
(3)时戳、序列号及生存时间。时戳记录Bundle产生的时间,单位为秒。序列号用以区分时戳相同的Bundle,并在当前时间增加一秒之后归零。DTN节点不能产生两个具有相同时戳和序列号但数据不同的Bundle。因此,时戳和序列号共同唯一标识Bundle。生存时间表明Bundle在网络中保存的有效期,当当前时刻大于Bundle时戳和生存时间之和时,节点没有继续保存或推送该Bundle的义务,Bundle可能会被删除。
(4)检索字典信息。字典由一系列所有端点和潜在端点ID的Scheme Offset和SSP构成,其长度用字典长度记录。
(5)分块数据偏移和完整数据包长度。分块数据偏移记录从原始应用数据开始计算分块数据偏移量,完整数据包长度记录原始应用数据单元长度。这两部分只有在控制标识符表明数据已分块的时候进行记录。
LTP(Licklider Transmission Protocol)是针对传输时延长、频繁中断的链路设计的点对点可靠的束传输协议。LTP传输基本数据单元称为Segment,包括如下5种类型:DS(Data Segment)、RS(Report Segment)、RA(Report-Acknowledgment Segment)、CS(Cancel Segment)和CAS(Cancel-Acknowledgment Segment)。Segment数据格式如图1-8所示。
图1-8 Segment数据格式
在LTP中,对于每个Segment,都可以根据数据段本身的特性或者信道容量,分为可靠的Segment和不可靠的Segment,两者可以在Block中共存,也可以单独存在。为了区分这两种数据段,把需要可靠传输的数据段称为红色数据段,它采用了确认—重传机制,当数据段出现丢失或错误时,要进行重传。把不需要可靠传输的数据段称为绿色数据段,它不采用确认—重传机制 [27] 。尽管如此,红色数据段仅表示它是需要可靠传输的数据段,但并不表示它的优先级高于绿色数据段。
与Internet建立连接之前需要收发双方协商,LTP数据发送是应用层程序单方面发起的。发送节点将待发送Segment数据推送至发送队列中,Segment数据大小由底层协议决定。红色部分中最后一个Segment被标记成EORP(End Of Red-Part),用以表示红色部分结束,并且作为检查点,指示接收节点生成相应接收报告 [28][29] 。数据块最后一个Segment被标记成EOB(End Of Block),并且指示接收节点可以通过计算接收Segment数据量之和来确定接收数据块大小。LTP利用“链路状况指示”(Link Clue)获取链路中断信息。当传输机会到达时,发送队列中的数据按顺序发送至数据链路层。与此同时,关于EORP的定时器开始计时,如果接收端的反馈在定时器计时结束时未到达,发送端自动开始数据重传。LTP传输过程如图1-9所示,当接收端接收到EOB信号之后开始计算绿块数据是否发生丢失,如果发生丢失,则直接进行整个Block的重传。当以红块的方式进行传输时,则通过进行检测红块数据段尾部EORP来判断是否有红块数据丢失。在每次传输开始前启动EORP计时器,一旦超过了定时器时限还没有接收到EORP时,就认为数据包发生了丢失,自动进行重传 [30] 。
图1-9 LTP传输过程