本文是对 OMNet++4.0 中的 NED 语言的学习笔记,其内容来自OMNet++ 4.0 用户手册的第三章第1,2节。
用户需要用NED语言来描述一个仿真模型。NED代表Network Description(网络描述),它让用户声明简单模块(simple modules),从而连接或重组为复合模块(compound modules),或将一些复合模块标记为networks(网络)或自包含(self-contained))的仿真模型。信道是另一个组件类型,它的实例也能使用在复合模块中。
NED的几个特性让它能在大型项目中也具有可伸缩性:
- 分层 复杂的模块作为一个实体,可以分解为更小的模块,从而组成复合模块。
- 基于组件 简单模块和复合模块都是可重用的。
- 接口 接口可以在应该使用模块和信道的地方作为一个占位符(placeholder)存在,而真正的模块或信道类型则可以在网络建立的时候通过参数来决定。例如对于一个复合模型MobileHost,它包含一个拥有IMobility模块接口的mobility子模型,那么类型可以从实现了IMobility接口的RandomWalkMobility,TurtleMobility中来选择。
- 包 采用了类似于Java 的package机制来减少冲突,而ned引入的NEDPATH则类似于Java的CLASSPATH,用于指定依赖关系。
- 内部类型 在复合模块中本地使用的信道类型和模块类型可以在复合模块内部定义,这是为了减少命名空间带来的问题。
- 元数据注解 可以通过添加属性来为模块,信道类型,参数,gates加以注解。仿真核心并不直接使用元数据,但它们能携带为多种工具添加额外的信息,运行时环境,甚至模型中的其它模块。例如,一个模块的图形化表示(图标等)或者提示符及一个参数的测量的元(milliwatt等)都通过元数据注解来指定。
注意 继承,接口,包,内部类型,元数据注解都是在4.0之后才加入的新特性。而且NED语言可以和XML进行相互转化而不会损失数据。
下面通过一个例子来学习NED语言。
本例中的网络由结点组成,每一个结点都有一个以随机间隔时间来生成数据包的应用程序,结点本身也拥有路由功能。这里假设这个应用基于数据报进行通讯,这样就不用考虑传输层。
首先用NED来描述下图所表示的网络:

网络拓扑
// 定义了一个名为 Network 的网络,在 NED 语言中,注释的另一个作用是能生成文档。
network Network
{
submodules:
node1: Node; // Node 类型在后面再定义
node2: Node;
node3: Node;
...
connections: // 定义了结点的连接方式:双向,速度为 100Mbps
node1.port++ <--> {datarate=100Mbps;} <--> node2.port++;
node2.port++ <--> {datarate=100Mbps;} <--> node4.port++;
node4.port++ <--> {datarate=100Mbps;} <--> node6.port++;
...
}
Read more…
最近想学习一下 OMNetpp 仿真环境的使用,在windows下配置安装环境的过程可以参考这里。
在网上搜索找到一篇由sunfast 翻译的关于 OMnet 4.0 IDE 环境的介绍,感觉翻译得很不错。PDF 版本的翻译文档可以从这里下载,对翻译有疑问的地方,可以参照官方网站的原文,我在这里主要是添加了图片的序号,同时添加了原文的图片。
OMNeT/OMNEST 4.0 集成开发环境概述
A QUICK OVERVIEW OF THE OMNeT++/OMNEST 4.0 IDE
介绍
OMNeT 4.0 集成开发环境基于Eclipse平台,并对编辑器、视图、向导和其他功能进行了扩展。OMNeT增加了模型创建和配置 (NED和ini文件)、执行批处理操作及分析仿真结果等功能,而Eclipse则通过各种开源或者商用的插件来支持C++编辑、集成CVS/SVN和其他的一些可选特性(UML建模、bug跟踪、数据库访问等)。
下面这个屏幕截图显示了OMNeT++ IDE的主要几个组成部分:
图1.OMNet++ 4.0 IDE,编辑一个NED文件

NED 编辑器
NED编辑器支持图形模式和文本模式分别对NED文件进行编辑,用户可以在任意时刻点击编辑器窗口底部的标签,在编辑模式间进行切换。
图2:在图形编辑模式下的NED编辑器

在图形模式下,可以创建复合模块、信道和其他组件类型。可以通过可用模块类型面板(palette)来创建子模块;可以在属性视图里修改Visual和non-visual属性,也可以从文本菜单里选择会话来修改。编辑器提供无限次的撤销/重做、目标克隆、移动及重定义大小约束、目标对齐、放大缩小和其他许多可能的功能。
子模块可以绑定(在指定位置),也可以不绑定(自动布局)。可以编辑修改包括图像背景、网格背景、默认图标(通过显示字符串的继承)、调整图标大小和着色、通信距离和许多其他的图形特性。
图3. 属性视图

属性视图使得用户可以编辑目标对象的图形及非图形属性。具体单元编辑器(special cell editors)使得选择颜色、图标等工作更为便利。属性的更改支持撤销(undo)和重做(redo)。属性视图也可以与其他的编辑器共用,如用于结果分析的Result Analysis,用户可用该编辑器来定制图表和其他对象。
图4. 源代码编辑模式下的NED编辑器

文本模式使得用户能直接和NED 源代码打交道,当按下Ctrl+空格键时,编辑器提供包括关键字、模块类型名、参数、门和子模块名称等的自动识别(上下文感知完成:context-aware completion)。把鼠标移到NED 类型名上面,可以看到所引用的模块类型的文档。在用户在输入的时候,NED 源代码在不断地进行检查和确认( parsed and validated ),左侧的空白处将会实时地显示错误。语法高亮(Syntax highlighting),自动缩进( automatic indentation),同时还提供对OMNeT++ 3.x NED 语法的自动转换。
Read more…
开发新的网络服务需要大量的投资,因此有必要在一个可控的仿真环境下建立原型,监控和预测服务的行为。很多技术已经被提出以提高CDN的性能,但是大部分却没有被CDN提供商采用,这是因为这些技术并没有广泛地在一个仿真测试床上进行评估,而一些学术性的CDN网络,如CoralCDN和Codeen则是运行上PlanetLab上,但PlanetLab是一个黑箱且需要大量学术界的人员参与,在这样的环境下开发新技术显得很困难甚至不可能。
因此有必要开发一种在真实仿真环境下的CDN模拟器,而且必须是可靠和节省内存的,要求对大规模的CDN网络能进行较细节的仿真。大部分的CDN仿真系统没有考虑几个关键的因素,如网络中可能出现的瓶颈,每个网络元素(router,surrogate server等)可以处理的的session数目等等。这样,仿真结果可能产生误导。因为它们只是通过遍历每个节点来测量而没有考虑TCP/IP的网络架构;另一方面,现存的很多网络模拟器不能有效地仿真Internet的架构,例如NS-2是一个离散事件仿真框架,通常用来仿真TCP/IP协议,流量控制等,然而它需要大量的内存来仿真大规模的网络。同样的,一些测试床不能由非研究机构自由进行仿真,且PlanetLab的一个显著缺点是仿真不可以重复进行。
| Testbed |
TCP/IP |
内存占用 |
可重复性 |
规模 |
可用性 |
运行环境 |
| CDNsimulator
(ns2&logsim) |
是 |
高 |
是 |
中 |
否 |
本地 |
| CDN simulator
[Bent et al 2004] |
否 |
中 |
是 |
大 |
否 |
本地 |
| CDN simulator
[Kulkarni et al. 2003] |
否 |
低 |
是 |
大 |
否 |
本地 |
| Codeen |
是 |
低 |
否 |
中 |
限制 |
实时 |
| CoralCDN |
是 |
低 |
否 |
中 |
限制 |
实时 |
| Globule |
是 |
低 |
否 |
小 |
开源 |
实时 |
| CDNsim |
是 |
低 |
是 |
大 |
开源 |
本地 |
从上面的讨论可以看出,目前缺少可靠而且可伸缩的CDN仿真器,且CDN仿真器只能以有限的细节来模拟真实的网络(例如对网络的传输时间进行静态估计),总的来说,开发一个完整的CDN仿真器,包括相关的应用程序和网络工具,是一个极消耗时间的任务,因为典型的网络或缓存仿真器不能用在CDN仿真中使用。
专门用于CDN仿真的CDNsim是基于OMNet++仿真环境和INET框架开发的,其中:
- 基于离散事件的OMNeT++,是一个免费的、开源的多协议网络仿真软件,在网络仿真领域中占有十分重要的地位。OMNeT++英文全称是Objective Modular Network Testbed in C++,是近年来在科学和工业领域里逐渐流行的一种基于组件的模块化的开放的网络仿真平台。OMNeT++作为离散事件仿真器,具备强大完善的图形界面接口。
- INET框架则是在OMNet++环境中的开源通信网络仿真包,它包括几个Internet协议,如UDP,TCP,SCTP,IP,IPV6,Ethernet,PPP,IEEE 802.11,MPLS,OSPF等等。
CDNsim只是使用OMNet++中的基本的网络操作,如TCP/IP传送和离散事件的调度。请求路由,内容分发和管理以及所有CDN的特性则是由CDNsim本身完成的。
评论