OMNeT++通过NED语言来对网络系统进行描述。NED语言中包含着对信道、模块、节点和网络的完整描述,可以参见OMNeT++参考文档的第三章。在实际的网络仿真中,总是会首先描述一些特定形状和特性的网络。一般说来,网络拓扑结构包括两种,一种是平面(flat)结构,另外一种是层次化(Hierarchy)结构。由于OMNeT++采用的是层次化的模块构建,所以层次化的网络拓扑可以通过平面的拓扑结构来生成。在这里,对常见的几种网络拓扑结构进行描述。更多的代码可以参见OMNeT++包中sample目录下的neddemo。
在构建平面拓扑结构的时候,主要考虑的是各个节点之间的关系。对于规则的拓扑结构来说,节点之间的连线是有关系的。在下面的描述中,主要的是对这种关系进行梳理。
(1) 二叉树结构
一个二叉树结构中的节点包含有三个接口,分别对应父节点和左右子节点。这里用fromUpper和downLeft、downRight来表示。对于高度为height的二叉树结构,其节点之间的关系可以表示如下。
for i=0..2^height-2, for j=0..2^height-2 {
node[i].downLeft <--> node[j].fromUpper if j==2*i+1;
node[i].downRight <--> node[j].fromUpper if j==2*i+2;
}
这是OMNeT++中的另外一种表示方法(没有了if条件表达式)。
for i=0..2^(height-1)-2 {
node[i].downLeft <--> node[2*i+1].fromUpper;
node[i].downRight <--> node[2*i+2].fromUpper;
}
生成的拓扑结构如下所示。从图中可以看到,最终生成了一个二叉树结构。这里的节点并没有显示成从上至下的结构,而是系统自动采用了一种合适的方法来表达。如果需要修改的话,则还需要对接点的位置进行约定。可以参见NED的描述文件。
(2) 链结构
另外一种很常见的网络拓扑结构就是线性结构,就像一条链一样串起来。这种结构在OMNeT++中是很容易描述的。下面的代码这个实现。
for i=0..n-2 {
node[i].right <--> node[i+1].left;
}
生成的网络拓扑结构如下所示。
(3)完全图
完全图是一个节点和网络中的所有节点都有连接。拓扑结构描述如下所示。
for i=0..(n-2), for j=(i+1)..(n-1) {
node[i].g[j] <--> node[j].g[i];
}
其中,
node
表示节点,而这里的
g[]
表示门向量。这里通过二重循环将节点之间的所有接口都连接了起来。另外,这里采用了位置描述符来对网络进行描述,从而让整个网络成为一个环形。
@display("p=,,ring");
生成的完全图如下所示。
(4)星形图
这种网络拓扑结构是所有节点通过一个中心节点连出去。这种网络的创建并没有什么特殊的地方,一般构建两类节点:中间节点和终端节点,然后将所有的终端节点和中心节点相连即可。
生成的拓扑结构如下所示。
(5)网格网格拓扑结构
这种网络拓扑结构也很常见。这种拓扑结构中的节点包含有四个接口,分别连接上下左右的节点。节点之间的连接关系如下所示。
for i=0..height-1, for j=0..width-1 {
node[i*width+j].down <--> node[(i+1)*width+j].up if i!=height-1;
node[i*width+j].right <--> node[(i*width+j)+1].left if j!=width-1;
}
生成的网格图如下。
(6)蜂窝网络拓扑结构
这是上面网格拓扑结构的一个变种,一般可以用于蜂窝网路中。这里的节点最多包含有三个接口,其连接关系如下面的NED代码所示。
for i=0..num-1 {
node[i].port++ <--> node[i+1].port++ if i<num-1 && i%(2*cols+2)!=2*cols;
node[i].port++ <--> node[i+2*cols+1].port++ if i<num-2*cols-1 && i%2==0;
}
生成的拓扑结构图如下所示。
(7)随机拓扑结构图
有些时候需要随机生成网络拓扑结构,这在OMNeT++中是比较容易实现的。下面就是一种实现的方法。
for i=0..n-1, for j=0..n-1 {
node[i].g++ <--> node[j].g++ if i!=j && uniform(0,1)<connectedness;
}
代码中connectedness用来控制节点的连接度,1表示连接所有的其他节点。减小此值将减少网络中出现的边数。一种随机图如下所示(connectedness=0.15)。
上面介绍的是比较常见的一些网络拓扑结构。在实际使用中,这些网络拓扑在针对特定问题的简化版本是可以的,但是当网络变得复杂后,这样的拓扑生成还是不行的。此时最好是采用专门的拓扑生成器,来生成网络拓扑。另外,这里介绍的都还是有线网络中的拓扑结构,还没有涉及到无线网络的拓扑生成。
- 大小: 2.8 KB
- 大小: 18.1 KB
- 大小: 9.6 KB
- 大小: 14.3 KB
- 大小: 8.8 KB
- 大小: 16.7 KB
- 大小: 4.2 KB
分享到:
相关推荐
主用用于通信中的MAC层协议的仿真,模拟节点发包、丢包过程
OMNET++结合MiXiM ,更方便做无线移动网络的仿真,MiXiM结合和扩展了一些现有的模拟框架来发展基于OMNeT++的无线移动仿真。它提供了详细的无线通道模型(褪色等),无线连接,移动模型,障碍模型和许多通信协议尤其...
OMNeT++中文使用手册 第[1],[2]章包括介绍性的资料 第二组章节,[3],[4],和[6]是编程向导.他们提出了NED语言,仿真的概念和他们在OMNet++ ...最后[13]解释了 OMNet++内部结构 附录[14]提供了参考的 NED语言
Leach协议在omnet++ 5.1平台下的仿真代码,主要由BS和Node两类节点组成,BS通过收集信息,对网络内节点进行分簇,节点发送消息到簇头,簇头周期性向BS报告自己的状态,以便进行下一轮的分簇........
omnet++5.2软件的安装包以及安装的指南,以及用户的使用手册
基于omnet++的leach协议的仿真研究,适合新手
OMNeT++作为离散事件仿真器,具备强大完善的图形界面接口和可嵌入式仿真内核,同 NS2,OPNET 和 JavaSim等仿真平台相比,OMNeT++可运行于多个操作系统平台,可以简便定义网络拓扑结构,具备编程,调试和跟踪支持等...
适合没接触过omnet++又要使用它的初学者,详细介绍了omnet++5.6的安装和IDE的使用,每一个步骤都有截图,供大家参考。
The OMNeT++ discrete event simulation environment has been publicly available since 1997. It has been created with the simulation of communication networks, multiprocessors and other distributed ...
一篇基于OMNeT++的环形网络仿真论文,是学习网络仿真的好帮手
2.1.2 OMNeT++结构 10 2.2 OMNeT++的安装 11 2.3 OMNeT++语法 12 2.3.1 NED语言 12 2.3.1.1 NED总概述 12 2.3.1.2 Ned描述的组件 13 2.3.1.3函数 15 2.3.2 简单模块 17 2.3.2.1 OMNET++中离散事件 17 2.3.2.2 包...
OMNeT++经典教程实例;OMNeT++_4.0_IDE(集成开发环境)教程;OMNeT++_4.0中文手册
版权为原作者所有,仅供参考,下载后24小时内请自觉删除
omnet++的基本入门介绍,介绍的很详细,是基于手册进行修改制作的
OMNET++4.0的入门介绍,OMNET++是一款优秀的网络仿真软件
OMNET++4.1中文手册。全部翻译英文手册,借助该手册可以帮助你快速学会OMNet++。
一部非常详细和基础的OMnet++教程,相信大家会学清OMnet++的原理,是做仿真的必备资料
用OMNET++实现了一个简单的仿真,传感器节点之间采用无线通信方式,采用最短路径算法
用OMNET++4.0 对MD5加密算法的实现。(注:只能在OMNET++4.0中打开)