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

介绍

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

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

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

网络层设计

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

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

具体的网络层内部模块如下:

ebem卫星仿真_路由表


按照功能分类,可以划分为以下几个部分:

  • 初始化模块:初始化各种参数,包括路由表、路由表项存活时间、路由表周期广播时间、路由表触发广播时间等。另外还有函数对数据包的发送功率、延迟、优先级等参数进行初始化,我在项目中暂时没有用到。
  • 上行模块(本项目协议栈丢弃了传输层,网络层直接对接应用层):网络层接收数据包给应用层、应用层发送数据包给网络层。这一步中,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节点卫星拓扑:

ebem卫星仿真_ebem卫星仿真_02

运行仿真,打印出节点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

实验

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

ebem卫星仿真_网络层_03