一个用于模拟国际空间站通信中延迟/中断容忍网络的开源框架
大家读完觉得有帮助记得关注和点赞摘要延迟/中断容忍网络DTN对于在具有挑战性的网络环境中实现可靠通信至关重要尤其是在无法保证端到端连接的空间系统中。我们提出了一个用于与国际空间站通信的束协议的全栈开源实现具备完整的安全特性包括使用HMAC-SHA256和AES-256-CBC加密的束认证块、载荷完整性块和载荷机密性块。该系统还包括束的分片与重组、基于优先级的队列、带有ACK/NAK机制的保管传递以及自动重传。我们的系统还包含一个由现代响应式Web界面促进的前端。我们认为这项工作在计算机网络背景下具有高度相关性因为(i) 它展示了一个全栈、开源、免费可用的关键可靠协议的实现(ii) 它为计算机网络和通信领域提供了一个交互式的教育和学习框架。I. 引言与动机互联网的基础协议TCP/IP是在连续端到端连接、低延迟和对称双向链路的假设下设计的。虽然这些假设适用于大多数地面网络但在深空通信、灾难恢复场景、远程传感器网络和低地球轨道卫星系统等具有挑战性的环境中它们根本上是失效的。国际空间站ISS在约420公里高度以7.66公里/秒的速度运行提供了一个引人注目的案例地面站每次过境的接触窗口仅持续5-10分钟而连续两次接触之间间隔45-90分钟。像TCP这样的传统传输协议会将这些断连视为网络故障触发拥塞控制机制并最终无法可靠地传输数据。延迟/中断容忍网络DTN通过一种根本不同的范式来应对这些挑战。DTN不假设持久连接而是使用“存储-转发”架构中间节点持续存储消息称为束直到出现合适的转发机会。DTN架构已得到空间数据系统协商委员会的认可并已实际部署在国际空间站上使其成为计算机网络教育中一个日益重要的主题。尽管DTN的重要性与日俱增但能够展示这些协议实际运行并提供实用实现的可访问教育工具仍然稀缺。学习延迟容忍网络的学生通常只接触到理论描述而没有机会在真实的操作环境中观察束路由、保管传递、链路预算动态和切换过程。截至目前只有少数几个例子可用[1, 2, 3, 4, 5]。在教学和调研环境中被标记为“实现”的大部分内容仍然不是学习者可以打开、运行和探察的东西。这使得从知道DTN存在到理解当束在网络中实际移动时轨道运动、射频裕度、保管传递、分片和端到端安全如何相互作用之间存在差距。我们提出的工具通过以开源方式发布整个流程来弥补这一差距。每一层都是有意可读和可编辑的以便用户能够将教科书概念与具体函数关联起来使用参数进行实验并扩展系统这种透明度仅靠理论材料或单体式、封闭的实现是难以达到的。这促使我们开发了开源的ISS通信模拟器[6]。I-A 学习成果本项目在计算机网络和通信领域满足了多个教学目标协议理解学生可以观察束协议如何处理消息封装、分片和保管传递——这些概念仅通过静态图表难以领会。网络仿真通过利用Mininet [7]学生可以体验具有可配置带宽、延迟和丢包参数的真实网络仿真这些参数动态地反映轨道几何关系。物理层意识链路预算计算让学生接触到射频工程概念包括自由空间路径损耗、大气衰减、多普勒频移和香农-哈特利容量极限。安全机制束安全协议块的实现展示了存储-转发网络中的端到端安全性在这种网络中中间节点必须是可信的保管者。全栈开发Python/FastAPI后端与React/Three.js前端的结合展示了构建交互式网络可视化工具的现代软件工程实践。I-B 与计算机网络的关系这项工作与计算机网络的几个核心主题相交延迟/中断容忍网络DTN架构[8, 9, 10]代表了对传统互联网假设的重大背离。我们的实现展示了关键的DTN概念包括束协议的存储-转发范式、用于可靠传递的保管传递机制以及在具有调度连接性的网络中用于路径计算的路由。模拟器可视化地展示了束如何在地面站网格中穿行在中间节点等待直到国际空间站接触窗口实现最终传递。使用Mininet进行网络仿真Mininet [7]能够利用软件定义网络能力创建真实的虚拟网络拓扑。我们的系统创建了一个连接到中央ISS节点的地面站节点部分网状网络其链路参数带宽、延迟、丢包基于实时轨道计算动态更新。这允许学生观察实际的数据包流而不是模拟的抽象。链路预算与物理层虽然计算机网络课程通常关注第3层及以上但空间通信需要理解决定链路可用性的物理层约束。我们的链路预算计算器实现了完整的射频路径分析发射功率、天线增益、自由空间路径损耗、作为仰角函数的大气衰减以及热噪声计算。由此产生的信噪比通过香农-哈特利容量估计确定可达到的数据速率直接影响界面中可视化的束传输时间。具有挑战性网络中的路由与传统路由不同DTN路由必须考虑时变连接性。我们的实现使用实时可见性和下次过境预测来进行路由决策。束通过地面站网格向具有更早预测接触窗口的站转发展示了传统网络课程中不存在的机会路由策略。II. 方法论实现细节开源代码库可访问https://github.com/kritgrover/iss-simulator。进一步的文档、技术细节、教程和视频演示也可在代码库中找到。一个可测试的部署已在 https://utsc.utoronto.ca/webapps/iss-simulator/ 提供为用户提供了一种测试系统基本功能的方法。¹II-A DTN 架构与束协议概述延迟/中断容忍网络架构通过在传统 OSI 模型之上引入一个新的协议层——束协议从根本上区别于传统模型该层作为传输层之上的一个覆盖层运行。在我们的实现中束是自包含的消息包括源端点和目标端点、载荷数据、安全块以及用于路由和保管传递的元数据。RFC 5050 [11] 和 RFC 9171 [12] 中规定的束协议将束定义为 DTN 网络中数据传输的基本单位。每个束包含一个主块路由和元数据、载荷块应用数据以及用于安全、分片和其他服务的扩展块。我们的实现遵循此结构同时提供仿真和网络仿真模式以演示协议在真实条件下的行为。该系统使用现代技术栈构建集成了以下元素后端使用带 FastAPI [13] 和 WebSocket [14] 服务器的 Python利用 Skyfield [15] 基于简化常规扰动模型进行轨道跟踪并使用 Mininet可选[7] 进行真实的网络仿真。前端使用带 TypeScript [17] 的 React (Vite)利用 Three.js [18] 进行 3D 地球可视化使用 Recharts [19] 进行实时分析并使用 Tailwind CSS [20] 实现响应式 UI。协议实现了束协议RFC 5050/9171[11, 12] 的仿真支持保管传递、分片、优先级队列和加密。II-B 系统架构概述该模拟器采用客户端-服务器架构后端仿真逻辑与前端可视化之间有清晰的分离。后端以两种不同的模式运行仿真模式和 Mininet 仿真模式可通过USE_MININET环境变量选择。在仿真模式下束传输通过基于时间的计算进行建模不使用实际的网络套接字从而实现快速原型设计和教学演示。Mininet 模式创建一个具有真实 TCP/IP 套接字的虚拟网络拓扑允许使用 Wireshark [21] 等工具进行数据包级检查并提供真实的网络行为包括实际的数据包丢失、延迟和带宽限制。后端由几个核心模块组成orbital_tracker.py处理基于 SGP4 的位置计算link_budget_calculator.py计算射频链路参数dtn_bundle_manager.py实现束协议逻辑bsp_security.py提供 BSP 加密和认证bundle_fragmentation.py管理基于最大传输单元的分片network_dtn_manager.py为 Mininet 网络操作扩展束管理器一个 SQLite 数据库持久化存储束元数据、传输历史以及用于分析和调试的传输记录。前端通过 WebSocket 连接与后端通信以获取实时更新并通过 REST API 端点进行束的创建和管理。状态管理遵循 React 的组件化架构使用自定义钩子封装数据获取和 WebSocket 通信逻辑。II-C 前端实现前端构建为一个使用 React 和 TypeScript 的单页应用提供轨道力学、束传输和网络拓扑的实时可视化。界面组织为两个主要视图地面站视图主界面和 ISS 视图专用于中继回传和解密消息的 ISS 视角。1) 3D 地球可视化 3D 地球组件使用 Three.js 渲染一个具有实时 ISS 位置和轨道路径可视化的交互式地球模型如图 1 所示。该实现采用 WebGL 进行硬件加速渲染即使在复杂几何体下也能确保流畅的 60 FPS 性能。地球由一个应用于球体几何的高分辨率地球纹理图NASA 蓝色弹珠构成。ISS 表示为一个 3D 模型通过球面到笛卡尔坐标转换并配合坐标系调整来定位。这些关系使得前端能够在一个一致的坐标系中跟踪飞行器每次更新周期中来自后端的地理纬度、经度和高度被转换为场景坐标确保 ISS 精灵、地面站标记和“可见”链路射线随着轨道状态变化而保持对齐。如果没有明确的映射小型地球模型和 WebGL 坐标轴会相对于纹理和站点标记发生漂移这些公式强制相同的数值状态同时驱动分析面板和 3D 视图。图 1主仪表板界面显示 3D 地球可视化、轨道参数和下次过境。II-D 后端引擎1) 轨道跟踪与位置计算 轨道跟踪子系统使用简化常规扰动模型传播算法计算 ISS 的实时位置。双行元素数据从 celestrak.org 获取或从本地缓存的上次 celestrak 调用中获取提供 SGP4 计算所需的轨道参数。OrbitalTracker类构建于 Skyfield 库之上计算地心惯性坐标系中的 ISS 位置并将其转换为大地坐标以进行可视化。对于每个地面站系统使用球面三角学计算视角。仰角决定了可见性当仰角超过可配置阈值默认为 0°时认为该站可见。过境预测算法通过搜索仰角超过阈值的过渡来识别即将到来的接触窗口以 1 分钟为间隔计算信号捕获和信号丢失时间。2) 链路预算计算 我们按照标准空间通信工程实践实现了一个全面的射频链路分析。当轨道跟踪器更新 ISS 位置和每个地面站的视角距离、仰角、方位角时计算器刷新任务分析员会监控的相同射频量链路在物理上是否可行、相对于噪声有多少裕度以及最重要的是在一次过境期间可以维持的数据速率。这些跟踪值提供给 UI信噪比、容量、估计传输时间和传输调度器更高的有效速率缩短接触期间的束传递时间而裕度的丧失对应于链路动态中的链路丢失。链路预算通过以下链条计算信噪比其中 PtPt 是发射功率GtGt 和 GrGr 是发射和接收天线增益LFSLFS 是自由空间路径损耗LatmLatm 是大气衰减LcableLcable 和 LmiscLmisc 是线缆和其他系统损耗NfloorNfloor 是噪声基底功率。这些术语共同解释了为什么当跟踪过境时信噪比会随着距离和仰角的变化而变化。噪声基底计算为其中 kBkB 是玻尔兹曼常数TT 是系统噪声温度BB 是带宽。跟踪 NfloorNfloor 固定了灵敏度基线随着几何形状演变接收功率与之进行比较。自由空间路径损耗使用弗里斯传输方程计算其中 dd 是以公里为单位的距离ff 是以 MHz 为单位的频率cc 是光速。由于 dd 直接来自瞬时的 ISS 站几何关系当用户跟随一次过境从升起到落下时LFSLFS 是主要的驱动因素。由于在低仰角下通过对流层的路径长度增加大气衰减随仰角变化。我们的实现使用了一个带有路径长度缩放因子的经验模型其中 θθ 是以弧度为单位的仰角L00.5L00.5 dB 是天顶处的衰减。路径长度因子上限为 10.0以防止在非常低的仰角下出现不切实际的损耗。因此当仪表板在一次接触期间跟踪仰角时LatmLatm 解释了纯自由空间模型忽略的地平线附近的额外衰落。多普勒频移补偿对于维持载波锁定至关重要。ISS 和地面站之间的相对速度从轨道状态向量计算多普勒频移计算为其中 f0f0 是载波频率vrvr 是以 km/s 为单位的径向速度分量。跟踪 fDopplerfDoppler 将来自 SGP4 的运动状态与物理层关注点联系起来即使教学 UI 在载波环路细节之前强调速率和裕度学生也能理解。可达到的数据速率使用香农-哈特利定理确定其中 CC 是以比特/秒为单位的信道容量。系统应用 75% 的效率因子来考虑编码和调制的低效率得出直接影响束传输时间的实用数据速率。换句话说用户看到的“Mbps”或传输预计到达时间的量同样来自上述相同的信噪比链随时间跟踪 CC 具体地展示了轨道运动和天气主导的损耗如何在短暂的接触窗口期间限制 DTN 吞吐量。3) 束协议实现DTNBundleManager类实现了核心的束协议功能。每个束表示为一个DTNBundle数据类包含束标识符、源端点和目标端点、加密载荷、优先级、创建时间戳、生存时间、保管传递标志、用于防止循环的跳数列表以及安全块。图 2地面站视图显示用于创建束的界面展示加密文本、网络拓扑、链路参数和传输历史。束的创建遵循 BP 规范在接收到来自地面站的消息后系统生成唯一的束 ID使用束安全协议加密载荷计算用于完整性验证的 SHA-256 载荷哈希并初始化路由元数据。然后该束在源站的传输队列中排队按优先级和创建时间排序。优先级队列确保优先束在接触窗口期间首先被传输。队列排序算法使用复合键优先级级别加急 正常 批量然后是创建时间戳。这保证了优先级别内的公平排序同时确保时间关键型消息得到优先处理。图 2 显示了消息界面包括束物流的多个方面。4) 束安全协议bsp_security.py中的束安全协议实现提供了 RFC 6257 [22] 中规定的三种安全块类型束认证块 (BAB)提供节点间的逐跳认证。每个 BAB 使用 HMAC-SHA256 和共享密钥创建在每个转发节点认证束的完整性和来源。BAB 包含安全源、安全目标下一跳以及在束的元数据和载荷哈希上计算的加密签名。BAB 在每一跳重新生成以反映新的安全源-目标对确保中间节点无法在不被检测到的情况下重放或修改束。载荷完整性块 (PIB)提供束载荷的端到端完整性验证。PIB 包含在加密载荷哈希上计算的签名。PIB 在加密后创建确保完整性检查覆盖将要传输的密文。在交付时目标节点通过重新计算加密载荷哈希上的 HMAC 签名并将其与 PIB 签名值进行比较来验证载荷完整性。这确保了接收到的加密载荷与最初签名的一致而无需解密进行完整性验证。载荷机密性块 (PCB)使用 AES-256-CBC 提供束载荷的端到端加密。加密密钥使用 PBKDF2 从共享密钥派生迭代 100,000 次并使用 SHA-256。PCB 包含初始化向量和密文仅允许目标节点拥有共享密钥解密载荷。中间节点可以在无法访问明文的情况下转发加密束即使在不信任的网络环境中也能提供机密性。安全块创建过程遵循特定顺序PIB 和 PCB 在束创建时生成然后 BAB 在传输过程中的每一跳生成。这个顺序确保 BAB 是最外层的安全层提供束元数据和载荷哈希的逐跳认证而 PIB 和 PCB 提供端到端的完整性和机密性保护。5) 束分片与重组 超过 MTU 的大束必须被分片以穿越异构网络链路。我们实现了分片程序可配置 MTU 为 4096 字节包括头部。当束的总大小超过 MTU 时自动进行分片。分片算法将加密载荷划分为固定大小的块每个块分配一个从 0 开始的片序号。每个片成为一个具有自己束 ID 的独立束但在元数据中共享父束 ID 以进行重组跟踪。图 3 显示了这样一个场景。片束包括父束 ID、片序号、片总数和片载荷。所有片共享来自父束的相同安全块确保端到端安全性在分片边界上得以保持。图 3ISS 视图显示中继接口、消息收件箱和重组组件。重组在目标节点进行。reassembly_buffers字典按父束 ID 跟踪接收到的片。当接收到父束的所有片时这些片按片序号排序并连接以重构原始的加密载荷。然后解密重组后的载荷。PIB 完整性验证在每个片到达时进行确保重组后的加密载荷在解密前与原始载荷匹配。6) 路由算法 我们的实现使用一种下次过境预测方法考虑预测的 ISS 经过地面站的情况来决定将束转发到哪个站。我们实现了一种广度优先搜索寻路算法通过地面站网格构建路由。对于从地面站发往 ISS 的束算法识别具有 ISS 可见性的站并选择具有最早预测接触窗口的站。如果选定的站不是源站则使用 BFS 通过网状网络找到到达该站的路径。返回完整路由[源站, 中间站..., 接触站, ISS]。对于从 ISS 发往地面站的束算法相反它找到当前可见的站或具有即将到来过境的站然后通过网格路由到最终目的地。网状拓扑由地面站之间的成对连接定义创建一个部分网状网络。地面站链路以 100 Mbps 运行具有最小延迟模拟实现站之间的快速束转发。路由算法通过维护已访问节点列表并在转发前检查束的跳数历史来避免循环。广播束使用洪泛算法束被转发到所有连接的站通过重复检测防止无限循环。每个站维护一个broadcast_received集合跟踪哪些束已经被处理。7) 保管传递与可靠性 保管传递在 DTN 网络中提供了可靠的交付保证。当启用保管传递传输束时接收节点负责交付向发送方发送保管确认或否定确认。图 4 显示了这样一个场景。我们的实现使用超时机制跟踪待处理的确认。PendingAcknowledgment类存储束 ID、预期的 ACK 源、超时时间戳和重传计数。如果在 30 秒内未收到 ACK系统将传输标记为失败并重试最多 5 次之后束将被丢弃。当束到达最终目的地时发生交付确认。目标节点发送一个交付 ACK束状态更新为DELIVERED。已交付的束被记录到数据库以进行历史分析并从活动传输队列中移除。图 4显示路由和接收到的 ACK、校验和以及其他用于跟踪束的信息的后端日志Mininet 模式。8) 线程安全与并发 后端在多线程环境中运行主 FastAPI 事件循环处理 WebSocket 连接和 HTTP 请求而后台线程管理束传输、Mininet 网络操作和数据库写入。当多个线程访问共享束状态时线程安全对于防止竞争条件至关重要。DTNBundleManager依赖 Python 的全局解释器锁来实现基本的线程安全。然而GIL 仅确保单个字节码操作的原子性并不能防止多个线程修改字典和列表等共享数据结构时的竞争条件。束字典、站队列和 ISS 队列的访问没有显式锁定这意味着并发修改可能导致不一致。大多数操作在 FastAPI 事件循环内发生或者通过事件循环的单线程性质进行序列化但真正的线程安全需要显式锁定。NetworkDTNManagerMininet 模式使用存储在_node_locks字典中的threading.Lock对象实现每节点锁。这些锁专门用于序列化node.cmd()调用因为 Mininet 的命令执行不是线程安全的并发调用可能导致AssertionError异常pythonnode_lock self._get_node_lock(from_node)with node_lock:# 仅保护 node.cmd() 调用result source_node.cmd(cmd)这种细粒度锁定允许在不同节点上并发操作同时防止多个线程在同一节点上执行命令时发生冲突。数据库操作使用 SQLite 内置的线程安全机制。DatabaseManager每个方法调用创建一个连接而不是每个线程并且每个连接在使用后立即关闭。写操作通过 SQLite 的内部锁定进行序列化这防止了数据库损坏同时允许并发读取。这种方法在数据库级别确保了线程安全无需应用层显式锁定。9) 仿真模式 vs. Mininet 仿真模式 系统支持两种具有不同特性的操作模式仿真模式束传输通过基于时间的计算进行建模不使用实际的网络套接字。当束传输启动时系统根据束大小和数据速率计算传输持续时间然后在主循环中使用基于时间的周期性更新来跟踪进度。此模式提供快速执行、确定性行为和易于调试使其成为教学演示和快速原型设计的理想选择。然而它不会捕捉真实的网络效应如数据包丢失、实际的 TCP/IP 行为或网络拥塞。Mininet 仿真模式使用 Mininet 的软件定义网络能力创建一个虚拟网络拓扑。该拓扑包括一个 ISS 节点IP: 10.0.0.100/24、多个地面站节点IP: 10.0.0.1-9/24以及一个在部分网状网络中连接地面站的 Open vSwitch。束传输通过 Mininet 节点之间的真实 TCP 套接字进行链路参数带宽、延迟、丢包基于轨道计算动态更新。在 Mininet 模式下NetworkDTNManager扩展了DTNBundleManager以处理基于套接字的通信。每个地面站运行一个 DTN 服务器监听端口 5000接受来自其他节点的束传输。LinkParameterManager实时更新 Mininet 链路参数当 ISS 对某个站可见时链路带宽增加、延迟减少当可见性丢失时通过将链路带宽设置为非常低的值来有效地禁用链路。Mininet 模式支持使用 Wireshark 进行数据包级检查允许学生观察实际的 DTN 协议消息、加密头部和网络行为。这提供了真实的网络仿真但需要 root 权限和更多的计算资源。如果 Mininet 不可用或初始化失败系统会自动回退到仿真模式确保在不同的部署环境中都能稳健运行。10) 数据库持久化 束元数据和传输历史被持久化存储到 SQLite 数据库中用于分析、调试和恢复。DatabaseManager类提供线程安全的数据库操作具有自动模式迁移和损坏恢复功能。数据库模式存储完整的束状态包括束标识符、源端点和目标端点、加密载荷Base64 编码、用于完整性验证的载荷哈希、优先级和状态、创建和交付时间戳、保管传递信息、跳数列表和路由路径、安全块以及分片元数据。复杂数据结构被序列化为 JSON 字符串进行存储然后在检索时反序列化。这种方法平衡了模式简单性和数据灵活性允许系统存储任意路由路径和安全块结构而无需更改模式。数据库实现自动迁移当添加新列时迁移函数检测缺失的列并添加它们而不丢失数据。这确保了与现有数据库文件的向后兼容性同时支持新功能。损坏恢复得到优雅处理如果检测到数据库损坏系统会自动重新创建数据库文件并重新初始化模式。虽然这会导致数据丢失但它防止了系统崩溃并允许继续运行。在生产部署中定期备份可以缓解此风险。数据库操作依赖 SQLite 的内部锁定来实现并发访问。每个数据库方法同步执行操作即每个方法在返回之前完成其事务。SQLite 的内部锁定处理并发读写防止同时访问导致数据库损坏。虽然这为 SQLite 操作提供了基本的线程安全但应用程序没有实现应用层的显式锁。对于高并发场景可能需要在应用层进行额外的同步以协调复杂的多步骤操作。III. 用例与实际应用ISS 通信模拟器已被开发为一个教育平台桥接了 DTN 概念的理论理解与实践理解。因此它是一个完美的工具用于激发对空间通信中延迟容忍网络的理解以及其使用的实际演示。模块化的代码库结构、全面的文档以及标准技术Python、React、TypeScript的使用降低了贡献的门槛使具有中级编程技能的用户也能访问该项目。MIT 许可证鼓励共享修改和扩展培养了一个学习者和贡献者的社区。该模拟器在设计时考虑到了可扩展性允许教育内容随着项目的发展而增长。未来的增强可能包括交互式教程分步指导之旅引导用户在使用模拟器的同时了解关键概念为不同技能水平提供结构化的学习路径。作业模板教师可以分配的预配置场景和练习并带有学生解决方案的自动评估例如“优化路由以最小化给定消息集的交付时间”。比较协议分析并排比较模式显示传统 TCP/IP 在 DTN 成功的相同场景下如何失败提供协议差异的可视化演示。多卫星场景扩展以支持多颗卫星或卫星星座从而能够研究更复杂的空间网络拓扑。性能分析增强的指标和可视化工具用于分析路由效率、交付成功率和网络利用模式。通过使 ISS 通信模拟器开源且以教育为重点我们旨在降低理解延迟容忍网络和空间通信的门槛使这些关键技术能够为下一代网络工程师和空间系统开发人员所用。理论学习资源工具提示、“学习”选项卡与实用的动手探索Wireshark、分片观察、加密工作流的结合提供了一个全面的教育体验。IV. 实验评估为了定量地表征模拟器的行为并验证其正确性我们在两种模式下仿真和 Mininet进行了受控实验。两种模式都使用确定性的接触时间表以便运行是可重现的。IV-A 实验设置仿真模式实验 E1 和 E4–E6 在标准工作站上以仿真模式执行。地面站网络由九个地理分布的站多伦多、伦敦、东京、悉尼、华盛顿特区、新加坡、班加罗尔、圣保罗、莫斯科组成通过站间链路为 100 Mbps 的网状拓扑连接。接触窗口遵循基于代表性 ISS 轨道参数的合成时间表轨道周期为 92 分钟每个站有 8 分钟的接触窗口这些窗口在各站之间错开以模拟 51.6° 倾角轨道的地面轨迹进展。在接触期间ISS-地面链路以 56 kbps代表 S 波段业余无线电链路运行距离约为 800 公里仰角为 30°。脚本experiment_runner.py在配置的时间注入束并推进虚拟时钟将较长的轨道时间线压缩为几秒的挂钟时间。所有束都使用 AES-256-CBC 加密和 HMAC-SHA256 认证BAB/PIB/PCB 安全块处于活动状态。Mininet 仿真模式实验 E3、E7 和 E8 使用mininet_experiment_runner.py它实例化与实时系统相同的九站部分网状拓扑基于 Mininet 的NetworkDTNManager地面到地面链路为 100 MbpsISS-地面链路通过 Linuxtc更新具有 56 kbps 带宽、3 ms 延迟和可配置的随机丢失百分比。一个挂钟时间表在所有站之间切换 2 分钟的接触窗口和 3 分钟的间隙在“中断”期间ISS 链路严重降级有效带宽接近为零因此流量必须等待下一个窗口。束传输使用 Mininet 主机之间的真实 TCP 连接MetricsCollector除了记录 DTN 级别的交付统计信息外还记录每跳套接字 RTT、发送成功计数和观察到的丢失。可重现性完整的安装依赖项、运行后端实验和解释输出的说明与代码一起保存在公共代码库中 [6]。IV-B 基线交付与延迟我们首先通过从分布在整个网络中的站向 ISS 传输 20 个每个 500 字节的束来建立基线性能。表 I 总结了结果。表 I基线交付性能E120 个束500 B 载荷指标值交付率100% (20/20)平均延迟64.7 秒中位数延迟2.0 秒第 95 百分位延迟262.0 秒最大延迟661.0 秒平均跳数1.95重传次数0保管 ACK19NAK0所有 20 个束都成功交付到 ISS零失败。延迟分布揭示了 DTN 特有的双峰行为当其源站或附近站具有 ISS 可见性时创建的束在几秒钟内交付中位数 2.0 秒而在接触间隙期间创建的束必须等待下一次过境导致高达 661 秒约 11 分钟的延迟。第 95 百分位延迟 262 秒反映了合成接触时间表的过期间隙。平均每个束经过 1.95 跳一次地面到地面的保管传递随后一次地面到 ISS 的上行链路这与将束转发到具有最早 ISS 接触的站的网状路由策略一致。IV-C 安全开销DTN 实现的一个关键问题是安全机制引入的开销。我们测量了束安全协议在 64 B 到 16 KB 载荷大小范围内的尺寸和处理时间开销。表 II 报告了结果。表 II按载荷大小划分的 BSP 安全开销AES-256-CBC 加密HMAC-SHA256 认证明文 (B)加密后 (B)开销 (B)开销 (%)总时间 (ms)641084468.813.111281926450.00.0325636410842.20.0351270419237.50.031,0241,38836435.50.032,0482,75270434.40.034,0965,4841,38833.90.088,19210,9442,75233.60.0516,38421,8685,48433.50.07对于 1 KB 以上的载荷尺寸开销收敛到约 33.5%这归因于 AES 分组密码填充PKCS7和密文的 Base64 编码。对于小载荷≤ 128 B初始化向量和填充的固定开销占主导地位对于 64 字节载荷达到 68.8%。在初始密钥派生PBKDF2100,000 次迭代之后所有载荷大小的处理时间都保持在 0.1 毫秒以下表明 BSP 安全为束处理增加的计算成本可以忽略不计。第一次加密调用会产生约 13 毫秒的一次性密钥派生成本该成本在后续操作中被摊销。IV-D 分片影响超过 2,048 字节 MTU 的束会自动分片。我们评估了三种载荷大小1 KB低于 MTU、4 KB2 个片和 16 KB8 个片每种 10 个束。表 III分片对交付和开销的影响指标1 KB4 KB16 KB交付率100%100%100%平均延迟 (秒)103.5103.5103.5安全开销 (B)8441,8565,856平均跳数1.81.81.8挂钟时间 (秒)0.71.96.2所有载荷大小都实现了 100% 的交付率和相同的延迟特性表明分片和重组机制保持了交付可靠性。安全开销与载荷大小成比例增长而挂钟处理时间因额外片束在网络中传输而增加。值得注意的是16 KB 载荷产生的束每个需要 8 个以上的片但系统正确地重组并交付了所有片。IV-E 可扩展性为了评估系统在负载增加下的行为我们将并发束的数量从 1 变化到 50同时保持载荷大小恒定为 500 B。表 IV 总结了结果。表 IV可扩展性性能 vs. 并发束数量束数量15102550交付率100%100%100%100%100%平均延迟 (秒)661.0145.8103.543.435.4P95 延迟 (秒)661.0577.2472.0135.4134.8保管 ACK1582144平均跳数2.02.01.81.841.88系统在所有负载水平下都保持 100% 的交付率表明优先级队列和保管传递机制有效地处理了并发束。平均延迟随束数量增加而减少因为更接近接触窗口注入的束受益于立即传输随着更多束均匀分布在时间上更高比例的束与活动接触窗口重合。无论负载如何跳数保持稳定在大约 2 跳表明路由算法始终选择高效的路径。这些结果证实模拟器优雅地扩展到至少 50 个并发束而性能没有下降。IV-F Mininet 仿真验证我们用 Mininet 实验来补充上述仿真扫描这些实验通过真实的 TCP 套接字和内核网络执行相同的 DTN 逻辑。表 V 将仿真基线E192 分钟轨道周期8 分钟错开窗口虚拟时间与 Mininet 基线E8全局 2 分钟“上行”/3 分钟“下行”时间表真实挂钟时间10% 基线 ISS 链路丢包除非另有说明进行了对比。两种场景都向 ISS 发送 20 个 500 B 的束。不同模式下的绝对延迟不能直接比较因为接触时间线和时间基准不同关键的观察是两者都保持了 100% 的束交付率而 Mininet 增加了可观察的套接字层行为。表 V仿真基线 (E1) vs. Mininet 基线 (E8)20 个束500 B 载荷指标E1 (仿真)E8 (Mininet)交付率100% (20/20)100% (20/20)平均延迟64.7 秒3.2 秒中位数延迟2.0 秒1.9 秒第 95 百分位延迟262.0 秒9.1 秒最大延迟661.0 秒16.8 秒平均跳数1.951.0保管 ACK / NAK19 / 00 / 2套接字发送 (成功/总数)—20 / 22平均套接字 RTT—2735 毫秒观察到的网络丢包 (发送)—9.1%在 E8 中两次套接字级别的失败通过 DTN 重传/NAK 处理得以恢复20 个束发送了 22 次实现了 90.9% 的网络层交付率但应用层交付率为 100%。在整形的 ISS 链路下平均单向套接字 RTT 平均为 2.7 秒反映了慢速带宽和排队。我们将配置的 ISS 链路丢包率从 0% 扫描到 30%各 10 个束运行 90 秒。表 VI 显示在每个丢包水平下束交付率都保持在 100%存储转发加上保管语义吸收了会使简单单次尝试传输失败的数据包丢失。套接字统计随丢包率变化在 5% 配置丢包率下我们观察到一次 NAK 和一次额外的发送每次发送成功率为 90.9%然后最终交付在几个更高的丢包设置下记录运行中的所有十次发送都成功了预期会有随机变化。表 VIMininet E3束交付 vs. 配置的 ISS 链路丢包率各 10 个束丢包率 (%)交付率平均延迟 (秒)平均 RTT (ms)发送成功/总数0100%3.0329110/105100%9.4667610/1110100%2.1187210/1020100%1.4127210/1030100%1.192210/10最后我们在相同的间歇性 Mininet 拓扑下比较了 DTN 交付与原始 TCPE7。一个束使用完整的 DTN 栈从多伦多注入到 ISS并成功完成100% 交付该次运行中端到端延迟约 4.6 秒。然后我们从一个主机向端口 5000 上的 ISS 监听器发起五个独立的 TCP 连接携带相同的 500 字节载荷同时链路时间表进行切换所有五个连接都未能完成传输0/5出现诸如“No route to host”之类的错误因为虚拟链路在上行和降级状态之间移动。这说明了该工具的一个核心教学点传统 TCP 假设一个稳定的路径而 DTN 被设计为通过在断开连接期间保留保管权直到下一次接触机会来跨越断连。V. 结论与讨论在本文中我们介绍了 ISS 通信系统中使用的 DTN 协议的一个开源实现。该项目的开发旨在允许从业者扩展、修改和调整其功能。该工具能够与网络行业的标准工具如 Mininet、Wireshark 等交互和协同工作。同样该实现还考虑了计算机网络安全上下文中的几个重要元素例如分片、加密、数据完整性和验证等等。实验表明在仿真和 Mininet 环境下面对分片、并发负载和高 ISS 链路丢包率时束交付率达到 100%而传统的 TCP 传输在相同的间歇性时间表下失败这清楚地表明存储-转发保管权在这些具有挑战性的环境中是不可或缺的。我们的目标是为感兴趣的人士提供一个他们可以在此基础上以多种方式构建和调整的起点以追求自己感兴趣的领域。