本文结合例子介绍两种自定义网络拓扑的方法。使用The ONE仿真器,网络拓扑通常由移动模型或者外部数据集生成。如果自己需要定制简单的网络拓扑,如two-way relay networks,那该怎么做呢。
1. Two-way relay networks
1.1 创建拓扑结构
无线双向中继网络(two-way relay networks)是一个很经典的例子,经常用来介绍网络编码在无线网络带来的优势。其拓扑结构如下:
鉴于节点数很少,可以通过将节点放置在指定的坐标来创建网络拓扑。假设传输半径为10m,将节点A、R、B分别放置在(0, 0)
、(8, 0)
、(16, 0)
。值得注意的是,因为每个节点的坐标不一样,所以需要创建3个group。相关的配置如下:
## A -- R -- B
Scenario.nrofHostGroups = 3
Group.nrofHosts = 1
Group.movementModel = StationaryMovement
Group1.groupID = A
Group1.nodeLocation = 0,0
Group2.groupID = B
Group2.nodeLocation = 16,0
Group3.groupID = R
Group3.nodeLocation = 8,0
1.2 产生消息
用MessageEventGenerator
自动创建消息,关于MessageEventGenerator
参考《消息事件产生器MessageEventGenerator 》。相关的设置如下(以节点A为例):
Events.nrof = 2
Events1.class = MessageEventGenerator
Events1.interval = 4
Events1.size = 1k,2k
Events1.prefix = M
Events1.hosts = 0,1
Events1.tohosts = 1,2
值得注意的是,hosts
和tohosts
两个设置选项,包含下限但不包含上限。
2. X topology
2.1 创建拓扑结构
另一个无线网络编码的经典例子如下:
像这样的例子,设计各个点的坐标比较难。幸运的是,可以使用ExternalEventsQueue
将节点的连接情况读入。首先将节点的连接信息写入一个文件(如cross.dat
),如下:
0.0 CONN 0 2 up
0.0 CONN 0 3 up
0.0 CONN 1 2 up
0.0 CONN 1 4 up
0.0 CONN 2 3 up
0.0 CONN 2 4 up
这里,节点不断开,即整个仿真都保持建立。值得注意的是,节点的标号需要normalized,从0开始。
导入外部数据集,相关设置项如下,详情见《导入不含节点位置的数据集》。
Scenario.simulateConnections = false
Group.movementModel = StationaryMovement
Group.nodeLocation = 0,1
Events3.class = ExternalEventsQueue
Events3.filePath = nc/settings/5_settings_shigs/simple_scenario/cross.dat
2.2 产生消息
跟two-way relay networks一样,产生消息很简单,相关设置选项如下:
Events.nrof = 3
## 0 --> 4
Events1.class = MessageEventGenerator
Events1.interval = 5
Events1.size = 1k,2k
Events1.prefix = M
Events1.hosts = 0,1
Events1.tohosts = 4,5
3. 总结
简单的拓扑结构可以将节点放在相应的坐标,复杂的拓扑结构将节点的连接情况作为外部文件导入仿真器。
最后,分享一点个人经历。刚开始接触The ONE,不知道如何创建这些简单的拓扑结构。最近的仿真,不管我怎么调参数,结果总是很奇怪,难以解释。所以才想着,创建最简单的仿真场景,调整参数,观察结果,进一步了解仿真机理。才发现,用The ONE仿真器,不能想当然(比如上述的无线双向中继网络用xor编码需要3 emissions,然而在The ONE,却需要4 emissions),多么痛的领悟。
如果您刚刚接触The ONE仿真器,强烈建议您以two-way relay networks为例,修改设置项,仔细观察并分析仿真结果。