因功能要求,需要在Exata上移植一个网络层协议,并且验证路由表的正确性,实现卫星之间数据包可达。

介绍

Exata是一款网络仿真软件,主要用于仿真卫星通信网络。它由美国北卡罗来纳州立大学计算机科学系的研究人员开发,旨在模拟和评估卫星通信网络在各种条件下的性能。

Exata软件能够模拟各种卫星通信网络,包括地球轨道卫星网络、地面站网络、航空器网络和海洋平台网络。它支持不同的网络拓扑结构和协议,并能够模拟各种不同的信道和干扰条件。

使用Exata进行卫星通信仿真,可以评估网络性能和带宽利用率、确定网络拓扑结构和协议、预测网络覆盖范围和可靠性、分析网络容量和负载平衡等。Exata还可以通过可视化工具实时显示仿真结果,帮助用户更直观地理解和分析网络性能。

网络层设计

一般来说,路由器的三层指的是物理层、数据链路层和网络层。物理层主要负责物理传输介质的传输;数据链路层负责将数据封装成帧并进行错误检测和纠正;而网络层则负责网络之间的路由选择和地址转换。

在卫星组网中,每颗卫星既是接受服务的主机,同时也是路由器。

具体的网络层内部模块如下:
在这里插入图片描述
按照功能分类,可以划分为以下几个部分:

  • 初始化模块:初始化各种参数,包括路由表、路由表项存活时间、路由表周期广播时间、路由表触发广播时间等。另外还有函数对数据包的发送功率、延迟、优先级等参数进行初始化,我在项目中暂时没有用到。
  • 上行模块(本项目协议栈丢弃了传输层,网络层直接对接应用层):网络层接收数据包给应用层、应用层发送数据包给网络层。这一步中,IP协议会为上行数据包解析IP包头,为下行数据包添加IP包头。
  • 路由功能模块:接收数据链路层的上行包,以及应用层的下行包,查找路由表确定下一跳发送的卫星节点。
  • 路由表更新模块:包括定时更新和触发更新。定时更新通过设置定时器实现,周期性地广播当前卫星的所有路由表信息。当卫星收到了一个路由包,就会解析并且更新自己的路由表,如果发现某一项路由表项失效,就会调用触发更新广播自身的路由表。另外,路由表项的生存时间由定时器控制,当路由表项超时后,也会调用触发更新。
  • 下行模块:网络层发送数据包给数据链路层,数据链路层发送数据包给网络层。这一步中,数据链路层会为上行数据包解析mac包头,IP协议会为下行数据包添加IP包头。

查询路由表

该项目中,路由表使用双向链表存储表项。路由功能模块向路由表查询后,得到如下的结构体指针。

参数项 类型 说明
srcID unsigned short 本节点ID
destID unsigned short 目标节点ID
nextID unsigned short 下一跳节点ID
metric unsigned char 跳数
routeState ROUTE_STATE 该路由表项是否有效
serialNumber unsigned int 序列号
aliveTimeout unsigned int 路由表项生存时间
triggerFlag bool 是否需要触发更新
quality unsigned short 质量(未使用)
prior ROUTE_ENTRY_TYPE* 前一项路由表项
next ROUTE_ENTRY_TYPE* 后一项路由表项

下图是一个6节点卫星拓扑:
在这里插入图片描述

运行仿真,打印出节点1的具体路由表。可以发现,节点1到节点6、4、2、5都是一跳可达,而到节点3需要两跳,经过节点2转发。

目的节点 下一跳 总跳数 路由表项是否有效 序列号 表项存活时间 质量
1 1 0 1 28 60000 0
6 6 1 1 26 57000 0
4 4 1 1 28 60000 0
2 2 1 1 28 59000 0
3 2 2 1 24 56000 0
5 5 1 1 28 59000 0

实验

通过实验,验证了移植的网络层协议能够正常工作,卫星之间最多两跳满足互相连通。

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐