一种基于NS3网络仿真平台的数据链仿真方法

文档序号:36999181发布日期:2024-02-09 12:42阅读:19来源:国知局
一种基于NS3网络仿真平台的数据链仿真方法

本发明属于信息工程,具体涉及一种基于ns3网络仿真平台的数据链仿真方法。


背景技术:

1、目前在网络仿真领域,已有许多学者借助ns2仿真软件、opnet仿真软件和vrnet等网络仿真软件完成了对link-16数据链模型的仿真,然而由于上述网络仿真软件自身结构框架的局限性,导致当前有关link-16数据链的仿真方法的普适性大大降低。ns3(networksimulatorversion-3)作为一款免费开源的、综合了很多优秀模拟器特点的离散时间网络仿真模拟器,主要应用于网络仿真领域,提供了许多网络协议以及通信模型的同时也为网络开发者提供了大量的接口和基类,具有易扩展性和高集成性等特点,研究人员可根据自己的需要对网络仿真的同时还可以设计网络各层的算法和改善模型。然而,当前ns3官方所提供的模块库无法实现对link-16数据链的仿真,从而导致基于ns3的link-16数据链仿真受限。因此如何将ns3应用于link-16数据链仿真是一个值得关注的问题。


技术实现思路

1、解决的技术问题:针对现有ns3网络仿真器无法实现link-16数据链仿真的技术问题,本发明提出了一种基于ns3网络仿真平台的数据链仿真方法,通过ns3的软件框架和类,实现ns3网络仿真平台对link-16数据链的仿真。

2、技术方案:

3、一种基于ns3网络仿真平台的数据链仿真方法,所述数据链仿真方法包括以下步骤:

4、s1,将link-16数据链整体模型拆分成不同功能的子模块,包括j系列消息生成处理子类、节点中继子类、netdevice控制子类、队列组子类、tdma系统子类、报文处理及信道控制子类和无线信道子类;

5、s2,创建继承于application父类的j系列消息生成处理子类,用于创建和接收link-16数据链固定格式报文;

6、s3,创建继承于object父类的节点中继子类,用于接收处理转发各种不同的固定格式报文,完成link-16数据链节点中继的任务;

7、s4,创建继承于netdevice父类的netdevice控制子类,该类对报文进行解析处理、报文包头添加和报文入队操作;

8、s5,创建继承于object父类的队列组子类,该类创建队列组;

9、s6,创建继承于object父类的tdma系统子类,通过ns3计时器simulator::schedule()实现系统的tdma功能和对队列组进行出队管理;

10、s7,创建继承于object父类的报文处理及信道控制子类,用于将报文拆分成码片组,再基于码片组,通过预先设置的调频图案伪随机选取信道传播码片序列;

11、s8,创建继承于channel父类的无线信道子类,用于完成link-16数据链的无线信道传输模型;

12、s9,将上述步骤s2至s8中所创建的子类通过各类中所创建的原语函数和回调函数相关联;

13、s10,在ns3文件夹的scratch文件夹下创建link-16数据链的仿真脚本,对步骤s2至s8做创建类并调用类函数,对link-16数据链进行仿真。

14、进一步地,步骤s2中,创建继承于application父类的j系列消息生成处理子类的过程包括以下步骤:

15、s21,创建继承于header父类的j系列消息库以对j系列消息进行生成与读取,具体地,通过ns3网络仿真平台中packet类的addheader函数将j系列消息添加到创建的packet包中,通过ns3网络仿真平台中packet类的removeheader函数读取packet包中的j系列消息;

16、s22,创建第一原语函数和第一回调函数以使报文以及非报文信息在j系列消息生成处理子类和节点中继子类之间传输;其中,第一原语函数在ns3网络仿真平台中的作用为将j系列消息生成处理子类中的报文以及非报文信息传输到其它类中,第一回调函数是将其他子类中的报文以及非报文信息传输到j系列消息生成处理子类中;

17、s23,创建j系列消息生成发送函数sendlink16,用于生成和传输j系列消息;

18、s24,创建j系列消息接收处理函数recvlink16,用于j系列消息的接收和处理。

19、进一步地,步骤s3中,创建继承于object父类的节点中继子类的过程包括以下步骤:

20、s31,创建第二原语函数和第二回调函数以使报文以及非报文信息在节点中继子类和j系列消息生成处理子类之间传输;创建第三原语函数和第三回调函数以使报文以及非报文信息在节点中继子类和netdevice控制子类之间传输;

21、s32,创建节点中继函数relaypacket(),执行中继节点的节点中继功能;执行过程包括:

22、s321,判断接收到的报文是否来自j系列消息生成处理子类,如果是,记录报文id后直接将报文传递到netdevice控制子类中,结束函数;如果不是,转入步骤s322;

23、s322,读取报文的id判断报文是否已经接收过,如果已经接收过,结束函数,否则,转入步骤s323;

24、s323,通过调用容器的添加函数push_back(),记录报文id;

25、s324,将报文通过第二回调函数传递给j系列消息生成处理子类;

26、s325,判断继承于object父类的节点是否被规划为中继节点,如果为中继节点,则将报文传递给netdevice控制子类,否则,结束函数。

27、进一步地,步骤s4中,创建继承于netdevice父类的netdevice控制子类的过程包括以下步骤:

28、s41,创建第四原语函数和第四回调函数以使报文以及非报文信息在netdevice控制类和节点中继子类之间传输;创建第五原语函数和第五回调函数以使报文以及非报文信息在netdevice控制子类和队列组子类之间传输;

29、s42,创建继承于header类的报头库,通过packet类的addheader()函数和removeheader()函数添加和处理报头;

30、s43,创建报文处理及入队函数packethandle(),用于总体控制报头的添加和处理报文的入队操作;

31、当netdevice控制子类接收到报文时,首先判断报文是否来自于节点中继子类,如果是,读取节点中继子类传递而来的报文,通过报文的初始字中的标识和子标识判断j系列消息所参与的网络参与群,将含有节点终端航迹号的报头添加到报文后,再将添加报头后的报文根据其网络参与组添加到相应的队列中;否则,通过ns3网络仿真平台中packet类的removeheader()函数读取报文的报头中的终端航迹号和报头中其它的报文信息,将报文信息和要传输的非报文信息直接上传到节点中继子类中。

32、进一步地,步骤s5中,创建继承于object父类的队列组子类的过程包括以下步骤:

33、s51,创建单队列类,该单队列类包含报文的入队函数和出队函数,以及容纳报文的第一容器;

34、s52,在队列组类中创建第二容器,第二容器根据link-16数据链网络参与群个数创建相对应的23个队列组,用于代表固定格式报文中不同的网络参与群类型;

35、s53,创建第六原语函数、第七原语函数、第八原语函数、第九原语函数分别用于报文的入队、各个单队列的状态传递、控制队列出队和报文出队的操作。

36、进一步地,步骤s6中,创建继承于object父类的tdma系统子类的过程包括以下步骤:

37、s61,创建时隙分配函数setslot(),通过ns3网络仿真平台的脚本文件调用该时隙分配函数setslot(),使其采用link-16数据链中的时隙集方式对时隙进行分配;

38、s62,创建时分多址函数starttdmasessions(),通过ns3网络仿真平台的系统函数simulator::schedule()对各个时隙进行跳转操作;

39、s63,创建第十原语函数和第十一原语函数,通过ns3网络仿真平台的系统函数simulator::schedule()来调度第十原语函数和第十一原语函数,分别用于控制队列和读取队列状态传递。

40、进一步地,步骤s62中,采用时分多址函数 starttdmasessions()对各个时隙进行跳转操作的过程包括以下步骤:

41、s621,设置并初始化私有变量totalslot=0,开启新的时帧,私有变量totalslot用于时隙的计数;

42、s622,开启计数器totalslot,totalslot++,进入新的时隙;

43、s623,根据totalslot的值判断当前时隙所在的编号,并通过在仿真开始时就分配好的传播时隙来判断当前时隙是否为执行时分多址函数节点的某个网络参与群发送报文的时间,如果是,转入步骤s624,否则,转入步骤s626;

44、s624,通过tdma系统子类的读取队列状态的第七原语函数,判断参与网络参与群的队列是否为空,如果为空,转入步骤s626,否则,转入步骤s625;

45、s625,将队列中报文通过tdma系统子类中的队列控制的第十原语函数,向报文处理及信道控制子类发送报文;

46、s626,调用ns3网络仿真平台的系统函数simulator::schedule()设置计时器,根据totalslot的值判断是否开启一个新的时帧,若totalslot>=1536,则证明当前时帧已经结束,返回步骤s621,重启一个新的时帧,若totalslot<1536,则证明当前时帧还没有结束,转入步骤s622,开启一个新的时隙。

47、进一步地,步骤s7中,创建继承于object父类的报文处理及信道控制子类的过程包括以下步骤:

48、s71,创建第十二原语函数和第六回调函数以使报文以及非报文信息在报文处理及信道控制子类和netdevice控制子类之间传输;创建第十三原语函数和第七回调函数以使报文以及非报文信息在报文处理及信道控制子类和netdevice控制子类之间传输无线信道子类之间传输;

49、s72,创建packetmanage()函数对报文进行处理,生成码片;

50、s73,创建跳频图案库;

51、s74,创建第三容器以容纳link-16数据链的51个信道;

52、s75,创建多个第四容器来同时接收并容纳无线信道接收到的多个码片;

53、s76,创建码片序列跳频函数forwarddown(),用于向无线信道子类传递报文;

54、s77,创建函数receive(),用于对跳频得到的码片序列进行重组,复现数据包。

55、进一步地,步骤s76中,采用码片序列跳频函数forwarddown()向无线信道子类传递报文的过程包括以下步骤:

56、s761,判断接收到的码片序列是否来自队列组报文处理后生成的码片序列组,如果是,从跳频图案库中读取用于跳频的调频图案,转入步骤s762;否则,转入步骤s764;

57、s762,根据读取的跳频图案所规定的信道传递一个码片序列;

58、s763,判断是否完成码片序列组的跳频发送,若完成,则结束函数,若没有,通过ns3网络仿真平台的系统函数simulator::schedule(),在预设的等待周期后重新执行步骤s762;

59、s764,判断是否满足已读取码片序列组接下来的跳频图案,如果是,将码片加入满足跳频图案的码片序列组,转入步骤s765;否则,转入步骤s766;

60、s765,通过满足跳频图案的码片序列组中的码片序列的数量判断码片序列是否能够重组报文,如果能够重组报文,调用报文处理函数,将码片序列重新处理成报文,同时将报文上传到netdevive控制子类中,结束函数;否则,直接结束函数;

61、s766,判断收到的码片序列是否对应跳频图案库中的首个跳频图案,如果对应,则创建用于添加码片序列的第五容器,将码片m序列添加到第五容器中,结束函数。

62、进一步地,步骤s8中,创建继承于channel父类的无线信道子类的过程包括以下步骤:

63、s81,创建第十四原语函数用于接收报文处理及信道控制子类所传递下来的码片序列;

64、s82,创建无线信道发送码片序列函数send(),该函数通过调用mobilitymodel类以设置节点位置和节点移动模型,通过读取mobilitymodel类的位置来判断是否超出通信距离;该函数还通过调用ns3网络仿真平台的系统函数simulator::schedulewithcontext()来对报文进行跨节点传输;

65、无线信道子类发送码片序列的过程包括以下步骤:

66、当无线信道子类接收到要发送的码片信息时,通过ns3网络仿真平台中mobilitymodel类来读取发送报文节点的位置信息,同时读取绑定在信道上的接收报文节点的位置信息;

67、假设发送节点和接收节点间的位置分别为和,则两者之间的直线距离为:;

68、通过发送节点和接收节点间的直线距离来判断接收节点是否能够接收到码片序列,如果能够,通过两点间直线距离计算传播时延为:,其中,c=299792458m/s,再通过ns3网络仿真平台的系统函数simulator::schedulewithcontext()实现码片序列的跨节点发送;否则,结束函数。

69、有益效果:

70、本发明的基于ns3网络仿真平台的数据链仿真方法,通过ns3的软件框架和基类实现对link-16数据链的时分多址体系结构、j系类消息、网络参与群等多种关键技术仿真,同时还预留时隙分配,固定格式数据包配置等多种接口可以通过该设计进一步对link-16数据链时隙规划等关键技术进行更深层次的研究。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1