现在的位置: 首页 > 综合 > 正文

似幻亦真 教你踏足网络仿真的云外之境

2013年11月20日 ⁄ 综合 ⁄ 共 10427字 ⁄ 字号 评论关闭

原帖地址;http://tech.163.com/digi/07/0718/01/3JL7179V001628C0.html

-----------------------------

前言


很多网络爱好者,天天沉迷于网络操作系统的设置应用、网络工具的使用探奇,时间久了,难免会心生疑惑,开始质疑自己:网络技术就象一个虚无的遥远存在,显
得那样不真实,自己好象跟真正意义上的网络技术总是隔了一道门槛。其实对于产生这种心态,你大可不必担忧,这是网络爱好者在学习进阶过程中的必然阶段。换
个角度来说,你已经具备了深入研究网络应用的心理铺垫,接下来你所需要做的无非就是有针对性地提高自己的知识层次而已。没错,笔者这篇文章的目的,就是引
领读者开始实实在在地、真真实实地探究网络技术的深层领域,透视网络运作的核心内容。


息网络,尤其是大型的通信网络,规模和结构都比较复杂庞大,而且现今多种类型的网络逐渐走向融合、业务种类日益增加、新的网络技术也不断涌现,这一切使得
一般网络用户、爱好者甚至是开发者越发难以接触所有的网络存在实体,换句话说,人们不可能有机会去观摩、学习、调试庞大网络群体中的各个节点设备。然而我
们又想宏观上真实的研究这冗杂的网络,再说企业、单位在建设网络、开展网络业务之前也有必要对配置网络设备、采用网络技术、承载网络业务、测试网络协议等
整体运行进行分析评估以提出最佳的解决方案,这该怎么解决?

我们可以从网络应用商身
上学习经验,世界上一大部分网络产品开发商和网络运营商包括cisco、华为、各国电信运营商等在应对不断升级的新产品、新协议、新业务对网络的影响问题
时,往往采用仿真的方法来解决网络规划、测试、应用等难题。网络仿真作为一种新的网络规划和设计技术,以其特有的方法为网络的规划设计提供客观、可靠的定
量依据,构建接近真实的网络环境和业务,能大大缩短网络建设周期,测试网络产品指标性能,提高网络开发决策的科学性。

通常使用比较广泛的专业网络仿真软件主要是OPNET和NS,其中NS主要是针对Linux平台的免费软件。在此我们主要针对Windows平台下的OPNET仿真软件进行应用开发讲解。

OPNET简介

OPNET
最早出自麻省理工学院的两个博士之手,最终得以商业化。OPNET被广泛应用于精确模拟领域,例如网络设备制造领域的企业商Cisco以及运营商
AT&T,都采用OPNET来做各种各样的网络环境模拟和调试。在OPNET的各类产品中,Modeler几乎包含其他产品的所有功能,针对不同
领域,主要的用途如下:(1)对于企业网的模拟,Modeler调用自带的已经建好的标准模型组建网络,在某些业务应用达不到事先预想结果或服务质量未及
规定要求,比如说网上电子交易过程中交易延迟、数据库服务等业务响应时间慢于正常情况时,Modeler捕捉重要的流量进行分析,从业务、网络、服务器三
方面来找出瓶颈。(2)对于比企业网更复杂的运行商(ISP)网络的模拟,Modeler把焦点放在整个业务层、流量的模拟,使得运营商可以有效地查出业
务配置中产生的错误,例如网络中的哪些服务器配置不够妥善,让黑客容易攻击,有哪些业务的参数配置不合适等情形。(3)针对研发的需要,Modeler提
供了一个开放的环境,使用户能够建立新的协议和配备,并且能够将细节定义并模拟出来。为使读者有一个生动、形象、更明确的理解,我们再进行如下说明解
释:Modeler所能应用的各种领域主要包括三个方面即端到端结构、新的协议开发和优化、网络和业务层配合如何达到最好的性能。举例来说明一下吧,假设
我们要将现有的IPv4的网络升级到IPv6的网络,需要确定采用哪种技术方式对转移效果来说比较好,这就属于端到端结构上的应用;新协议的开发,比如说
目前流行的3G无线协议的开发,在系统级的仿真中,可以分析一种新的路由或调度算法如果使路由器或交换机达到QoS;在网络和业务之间如何优化方面,可以
分析新引进的业务对整个网络的影响、网络对业务的要求,实际应用中网络和业务是对矛盾,通过Modeler模拟来查找网络和业务之间所能达到的最好的指
标。

软件的安装


图1

OPNET
的安装比较简单,在此我们要说明的是安装Modeler的时候,有三个可执行安装程序,首先要安装software文件夹里的exe安装文件,然后接着选
择任意顺序安装documentation和modeler文件夹里的exe安装文件,按照默认安装方式进行基本操作即可。有兴趣做深入开发研究的读者要
注意,Modeler全部功能得以正常工作有赖于相关环境变量的设置,同时开发者在安装OPNET之前安装VC工具时一定要在注册环境变量选项前打勾。对
于Modeler环境变量的配置,由于本文主要针对入门者,所以不需要过多涉及讲解,我们简单说明如下:在Windows下,在我的电脑上单击鼠标右键,
点选“属性”—“高级选项卡”—“环境变量”打开环境变量配置对话框,在用户变量中主要添加编辑三个变量:include,lib,path,如图一所
示。要添加的include路径目录主要包括VC、OPNET以及自定义的所有include文件目录;lib路径目录主要包括VC、OPNET的所有
lib文件目录;path路径目录主要包括VC的/common/tools/WinNT、/MSDev98/bin、/common/tools、
VC98/bin以及OPNET的/sys/pc_intel_win32/bin。

OPNET仿真的步骤


们在使用OPNET进行网络仿真时,大体可以分成简单地概述为六个步骤:配置网络拓扑(topology)、配置业务(traffic)、收集结果统计量
(statistics)、运行仿真(simulation)、调试模块再次仿真(re-simulation)、最后发布结果和拓扑报告
(report)。现在我们将用实际例子来说明一下OPNET的应用,本例程将使用OPNET
Modeler快速创建一个网络,然后收集反映网络性能的统计结果,运行仿真,并且通过分析这些结果来解决网络中存在的问题。本例侧重于项目编辑器
(Project Editor)的使用,展示Modeler建模和分析的功能,学会用OPNET来仿真模拟的基本过程。

热身准备

在例程开始之前,首先先喝点开胃汤,有一些重要的基本概念是需要我们理解掌握的,有助于我们更加清晰明白地向主题进军:

项目(project)和场景(Scenario)


个项目说白了就是一组仿真环境,一个场景就是其中的一个仿真环境。场景是网络的一个实例,一种配置,具体来说就是拓扑结构、协议、应用、流量以及仿真配
置。在Modeler仿真时,最高层次永远是一个项目,每个项目底下至少包含一个仿真场景,代表网络模型,它是具体的网络仿真环境配置。项目的提出初衷是
方便对不同的仿真结果进行比较。项目提供场景复制功能,可以对场景进行备份,通过改变新场景的参数运行仿真来测试系统各方面的功能及是否存在瓶颈。

子网(Subnet)

OPNET
子网和TCP/IP的子网不是同一个概念。OPNET的子网是将网络中的一些元素抽象到一个对象中去。子网可以是固定子网、移动子网或者卫星子网。子网不
具备
任何行为。只是为了表示大型网络而提出的一个逻辑实体。用一个简单的例子来说明,如运营商的骨干网,例如把骨干网的所有路由器放到一个视图里,肯定会十分
凌乱,不如按照省份将同一省份的路由器都放到同一个子网中,然后以省份的名称来命名每个子网的名字,构建成的网络看上去就会比较有条理。

节点(Node)

节点通常被看作设备或资源,由支持相应处理能力的硬件和软件共同组成。数据在其中生成、传输、接收并被处理。

Modeler
包括三种类型的节点:第一种为固定节点,例如路由器、交换机、工作站、服务器等都属于固定节点;第二种为移动节点,例如移动台、车载通信系统等都是移动节
点;第三种为卫星节点,顾名思义是代表卫星。每种节点所支持的属性不尽相同,如移动节点支持三维或二维的移动诡计,卫星节点支持卫星轨道。

链路(Link)


对固定节点、移动节点以及卫星节点,链路也有不同的类型,有点对点的链路、总线链路以及无线链路。点对点的链路在两个固定节点之间传输数据;总线链路是一
个共享媒体,在多个节点之间传输数据;无线链路是在仿真中动态建立的,可以在任何的无线收发信机之间建立。卫星和移动节点必须通过无线链路来进行通信,而
固定节点除了有线链路外,也可以通过无线链路来建立通信连接。

仿真随机种子(Seed)

Seed
是产生随机数的种子值,反映随机数的状态。只要选定一个种子值,整个随机事件系统就固定了,复杂仿真的随机过程就成了一次实现。目的是测试仿真系统的稳健
性,具体来说,针对不同的Seed值进行一系列仿真,每次不同Seed值对应的仿真结果相近,则表明建立的模型有较高的稳健性
(Scalability)。一般在发布仿真结果之前都要改变仿真种子进行多次测试,如果结果完全改变,则说明模块有疏漏,所得的结果只是一个特例,而不
能完全反映系统的性能。

模块(Modul)与仿真(Simulation)


于某个协议的仿真,可能因为其涉及的事件以及相互的联系非常庞大,造成建模的困难,这时把该协议分解成一系列的协议行为,对于这些行为进行单独建模后通过
有限状态机把它们联系起来后便形成一个系统,这个系统可以称之为模块,它将抽象的协议直观化。而仿真是基于一系列模块的一组实验,它反映模块与模块之间的
相互作用关系。

模型、模块和对象


型通常指的是进程模型、节点模型和网络模型。模块具有实在的物理意义,例如进程模块,就是节点模型里的小方块。对象分为两种:一种是抽象对象,如复合属
性;第二种是具体对象,例如模块、节点、收信机、发信机。在OPNET中对象提出的目的是设置和获得它的属性,因此对性需要有它的对象ID号Objid,
作为程序获取对象属性的依据,一般是通过IMA核心函数获取或设置对象的属性。

实例说明

好,
现在我们就开始我们的实例讲解,我们到底要创建一个什么样的网络,有什么样的要求呢?简单来说吧,我们现在需要为某公司的内部互联网的扩展制定一个合理的
方案。目前,该公司在办公室的第一层有一个星型拓扑网络,现在要在第二层上增加另一个星型拓扑网络。用专业点语句来描述的话,这就是一个典型“what-
if”问题,所要解决的是确保增加的网络不会导致整个网络的连通失败。

建立网络拓扑结构

要创建一个新的网络模型,首先要创建一个新的项目和一个新的场景。

重要应用知识点:采用开始建立向导(Startup Wizard)来建立一个新的项目和一个新的场景。开始建立向导有以下几个步骤:一,选择网络拓扑类型;二设定网络的范围和大小;三,设定网络背景图;四,选择对象模型家族。

好,现在我们正式入手,开始创建一个场景步骤如下:

(1)打开Modeler。

(2)从FILE菜单中选择New...。


图二

(3)从弹出的下拉菜单中选择Project并单击OK按钮,如图二所示。


图三

(4)
将你的项目命名为场景命名为。用来区分同一项目的不同版本,比如可以将项目命名为X_SM,将场景命名X_first_floor,其中X可以是数字1、
2、3等,用来区别同一项目的不同的版本,比如我们现在就将项目命名为1_SM,将场景命名1_first_floor,如图三所示。

(5)单击OK按钮。


图四

这时出现开始向导,创建新的背景拓扑图,如图四所示。


图五

选定网络的范围,在此我们选择office(办公室)选项,如图五所示,点击next进入下一步。


图六

指定网络的大小,按照默认即可,如图六所示,点击next进入下一步。


图七

选择OPNET自带的对象模型家族种类,如图七所示,点击next进入下一步。


图八

再次确认环境设置,如图八所示。


图九


时出现指定大小和规格的工作空间,同时弹出一个对象模板(包括刚刚选定的对象模型家族的所有模型),如图九所示。我们在仿真应用中通过对象模板中的节点和
链路模型来创建网络模型。进行到这里的时候,我们可一定要注意工作空间和对象模板这两个概念,因为后面我们的主要操作都是依托这二者来进行的,所以在此声
明,以防读者阅读到后面的操作时对这些基本概念无印象而茫然迷惑。

重要应用知识点:

节点模型:代表实际的设备

链路模型:代表连接设备的物理媒介,可以是电缆或者光缆等。

可以通过对象模板中的图表直观地看出节点模型和链路模型。

重要应用知识点:

有三种方法可以来创建网络拓扑,任选其一:①导入拓扑图从对象模板中。②选择模型并放置在工作空间中。③使用快速拓扑配置工具。

在此我们选择使用第三种方法,快速拓扑配置通过指定参数(节点模型和链路模型),一次性创建规则的拓扑结构。


图十

(6)从topology(拓扑)菜单中选择rapid configuration(快速配置),如图十所示。


图十一

(7)从配置下拉列表中选择Star(星型),单击OK...,如图十一所示。

接下来需要为网络指定节点模型和链路模型。

OPNET中标准模型的命名规则为:

_...___其中为模型用到的协议,可能用到好几个协议,所有后面加添阿拉伯数字来表示。代表模型的大致功能,为模型派生类别。在下一步骤的选择中就要用到用这种方法来表示的交换机。

(8)选择中心节点模型为3C_SSII_1100_3300_4s_ae52_e48_ge3。这是3Com公司的交换机。

(9)选择周边节点模型为Sm_Int_wkstn,并设置节点个数为30.

(10)选择链路模型为10BaseT。

(11)指定网络在工作空间中放置的位置:设置中心的X轴和Y轴坐标为25;设置局域网饿半径范围为20。


图十二

(12)设置好单击OK按钮。如图十二所示。


图十三

项目编辑器中出现如图十三所示的网络拓扑。

接下来需要扩展这个网络,首先增加一个服务器。这时将要用到第二种创建网络拓扑模型的方法:在对象模板中选择模型并放置在工作空间内。

(13)打开对象模板。

(14)找到Sm_Int_server对象,并将它放置到工作空间中。如果找不到该模型,可能前面的操作不正确,需要从左上角的下拉列表中选择Sm_Int_Model_List模型家族。

(15)单击右键,结束节点放置。如果需要可以多次单击鼠标左键,放置多个节点。

接下来,需要连接服务器和星型网络。

(16)在对象模板中选中10BaseT链路对象。

(17)在工作空间中的服务器(node_31)上单击鼠标左键,移动光标,再单击星型网络的中心节点,这时出现连接两个节点对象的链路。

(18)单击右键结束链路创建。


后需要为网络配置业务,包括应用定义和业务规格定义,设置业务所涉及的内容比较复杂。本例程不做要求,模板中应用定义对象和业务规格定义对象已经配置好
(为Light
database业务),只要将它们放置到工作空间中即可,说白了,就是说我们在此不需要做什么高难度的深入技术活,如果对此特别感兴趣的读者可以通过查
阅相关资料文献进行深入学习。

(19)在对象模板中找到Sm_Application_Config对象并将其放置在工作空间中,

(20)单击右键,光标重新移到对象模板中,单击Sm_Profile_Config,并将其放置到工作空间中,单击右键结束放置。

(21)关闭对象模板。


图十四

这时得到如图十四所示的网络拓扑图。

接下来,需要收集统计结果。

首先,打开节点模型编辑器和进程模型编辑器。


个网络对象(链路除外)都是一个节点模型,它是由一个或多个模块(module)组成,模块与模块之间通过包流(Packet
stream)或状态线相连。而模块实际上为进程模型,它通过状态转移图来描述模块的行为。读者如果到此还是不太清楚,不用担心,接着看下面的实际图例描
述就会有一个清晰明白的印象了。

现在来看看第一层网络服务器的结构:

(22)在项目编辑器中用鼠标双击node_31(服务器节点)。


图十五

这时打开一个新的节点模型编辑器窗口。如图十五所示为以太网服务器的内部结构,它由几个模块和连接模块的包流和状态线组成。


图十六

在仿真过程中,来自客户端的数据报被收信机hub_rx_0_0接受,然后由下至上穿过协议栈到application模块。经过处理后,又沿原路返回至发信机hub_tx_0_0,最后被传输到客户端,如图十六所示。

接下来看看传输适应层tpal模块的内容。


图十七

(23)在节点编辑器中的tpal模块上双击鼠标。这时打开一个新的进程模型编辑器,如图十七所示。

(24)在init状态的上半部双击鼠标,打开它的入口代码。

(25)在init状态的下半部双击鼠标,打开它的入口代码。


图十八

进程中的每个状态(图中红色的或绿色的圆圈)到包含一个入口代码和一个出口代码,它们由c/c++代码组成。入口代码是在进入状态时执行,出口代码是在离开状态时执行,如图十八所示。

(26)关闭这两个代码窗口。

状态和状态之间通过转移线transitions相连。转移线可以是带条件的(必须满足条件才能转移)或者无条件的(直接转移)。


图十九


十九中包含两条转移线,一条是从wait状态到open状态的条件转移线(虚线表示)。虚线中间的OPEN条件必须满足,wait状态才能转移到open
状态。然而,从open状态到wait状态的转移(实线表示)是无条件的,因此当执行完open状态的代码后立即转移到wait状态。

(27)关闭节点和进程模型编辑器。

收集统计量

在网络模型中可以对单个对象收集统计量,也可以对整个网络收集全局统计量。

到现在为止,已经建立好了网络模型,现在要根据本例程最开始提出的问题决定收集哪些统计量:

①服务器有能力处理扩展网络的额外业务负载吗?

②一旦与扩展网络连接,整个网络的延时性能还能够接受吗?

服务器负载(Server load)是整个网络的性能瓶颈。下面来收集与服务器负载相关的统计量:

(1)在服务器节点node_31上单击鼠标右键,从弹出的菜单中选择Choose Individual Statistics(选择独立统计量)。这时出现node_31的选择统计量对话框。


图二十

(2)单击Node Statistics(节点统计量)->Ethernet(以太网),选择Load(bits/sec)统计量,如图二十所示。

(3)单击OK按钮关闭对话框。

全局统计量可以用来收集整个网络的信息。下面,通过选择全局Delay统计量来查看整个网络的延时性能。

(4)在网络编辑器的工作空间(避免指到对象)上单击鼠标右键,从弹出的菜单中选择Choose Individual Statistics(选择独立统计量)。

(5)单击Global Statistics(全局统计量)树型结构,找到并打开Ethernet(以太网)节点统计量。


图二十一

(6)选中Delay(sec)统计量,如图二十一所示。

(7)单击OK按钮关闭对话框。

保存项目

接下来需要保存项目(在实际应用中,建议读者最好养成经常保存项目的好习惯,这样可以避免许多不必要的麻烦)。在File菜单中选择Save(在前面已经给项目命名,因此不需要重命名)。

运行仿真

下一步,可以准备运行仿真了。首先,需要确定repositories属性设置正确:

(1)在Edit菜单中选择Preferences。

(2)在查找文本框中输入“repositories”,单击Find按钮。


图二十二

(3)在弹出的对话框的左下角单击Insert按钮,在文本框中输入stdmod,如图二十二所示,然后回车。

(4)单击OK按钮关闭repositories和Preferences对话框。

优化仿真核心:

仿真核心有调试development和优化optimized两种。调试状态的仿真核心会收集仿真信息,这些信息可用来调试模块。而优化仿真核心使运行速度加快。

设置优化仿真的方法如下:在Edit菜单中选择Preferences,在查找文本框中输入knel_type,单及Find按钮,将对应的value设置为optimized。

接下来运行仿真:

(1)在Simulation菜单中选择Configure Simulationl...,或者在工具栏中选择运行仿真按钮。


图二十三

(2)将仿真时间Duration设置为0.5,即模拟执行半小时的仿真,如图二十三所示。

(3)单击Run按钮运行仿真。

(4)运行完毕后单击Close按钮关闭对话框。

查看结果

可以从项目编辑器中弹出的菜单中选择View Results查看结果。

查看服务器Ethernet load结果:

(1)在服务器节点上单击鼠标右键,从弹出的菜单中选择View Results,这时出现查看对话框。


图二十四

(2)然后选中Load(bits/sec),如图二十四所示。


图二十五

(3)单击Show按钮,这时在项目编辑器上出现如图二十五所示的结果。

不同的实验趋势走势应该是大致相同的,淡然具体的取值会因为节点放置的位置和链路长度不同而有微弱的差别。注意到负载最大值为6000bits/second。这个场景是想得到的值,用它和后面扩展网络后的结果进行比较,关闭对话框。

(4)在工作空间中单击鼠标右键,从弹出的菜单中选择View Results。


图二十六
图二十七

(5)选择Globle Statistics-.Ethernet->Delay(sec),如图二十六所示。然后单击Show按钮。注意到网络收敛时间的延时大约是0.4微秒,如图二十七所示。

(6)关闭结果图。

复制场景并扩展网络

您已经创造了一个基本的网络,并且收集了相关结果。现在可以扩展该网络并且验证在增加额外负载下,网络仍然能够很好地工作。

为了保留刚才的网络场景,以便和扩展的网络场景的仿真结果相比较,需要复制场景:

(1)在Scenarios(场景)菜单中选择Duplicate Scenario(复制场景)...

(2)命名新的场景为expansion。

(3)单击OK按钮。这时出现和刚才网络模型一模一样的场景。

接下来构建网络的另一部分。

(4)从Topology(拓扑)菜单中选择Rapid Configuration(快速配置)。

(5)从配置下拉列表中选择Star(星型),单击OK。


择中心节点模型为3C_SSII_1100_3300_4s_se52_e48_ge3。选择周边节点模型为Sm_Int_wkstn,并设置节点个数为
15。选择链路模型为10BaseT。指定网络在工作空间中放置的位置:中心的X轴坐标75和Y轴坐标为62.5。局域网的半径范围为20。

(6)设置好以后单击OK按钮,这时项目编辑器中出现另一个局域网。

连接这两个局域网:

(7)单击对象模板工具按钮。

(8)选中Cisco2514路由器并将它放置到两个局域网之间。单击鼠标右键结束放置。

(9)在对象模板中选中10BaseT链路图标,在项目编辑器中分别连接node_30和node_50(Cisco路由器),以及node_49和node_50。

(10)单击鼠标右键。

(11)关闭对象模板。

(12)在File菜单中选择Save保存项目。


图二十八

这时整个网络建好了,如图二十八所示。

再次运行

现在可以运行仿真了。


图二十九

因为我们需要对比结果,也就是将两个场景的仿真情况进行比对分析,所以要对两个场景都进行运行仿真。对于多场景状况的仿真比对,可以通过选择Scenarios菜单下边的switch to scenario来切换场景,如图二十九所示,将所有不同场景进行如下仿真操作:

(1)在Simulation菜单中选择Configure Simulationl...,或者在工具栏中选择运行仿真按钮。

(2)将仿真时间Duration设置为0.5,即模拟执行半个小时的仿真。

(3)单击Run按钮运行仿真。

(4)运行完毕后单击Close按钮关闭对话框。

比较结果

为了回答最开始提出的问题,需要将这两个网络的仿真结果进行比较:

(1)在服务器节点上单击鼠标右键从弹出的菜单中选择Compare Results。


图三十

(2)选中Office Network.node_31->Ethernet->Load(bits/sec)结果统计量,并在比较结果对话框的右下角的下拉列表中选择All Scenarios,如图三十所示。


图三十一
图三十二

(3)
单击Show按钮查看比较结果。图三十一中曲线抖动很厉害,为了更加清楚两条曲线的走势,可以改变结果的收集模式,从 Compare
Results对话框中间下面的下拉列表中选择time average,单击Show按钮,这时出现如图三十二所示的结果,可以看出抖动被平滑了。

(4)关闭server的比较结果对话框。

最后来查看增加第二个网络对网络的延时性能的影响。比较这两个场景的Ethernet Delay结果。

(5)在工作空间中单击鼠标右键 ,从弹出的菜单中选择Compare Results。


图三十三

(6)选择Globle Statistics->Ethernet->Delay(sec)统计量,如图三十三所示。


图三十四

(7)单击Show按钮显示比较结果,如图三十四所示。从图三十四中可以看出以太网延时性能并没有因为服务器负载的增加而受影响。

(8)关闭比较结果对话框。

(9)从File菜单中选择Close,保存并关闭项目文件。

结语

好,
到目前为止,我们已经基本上算是入门了,不过任重而道远,在真正的仿真应用中,过程的复杂程度可能远远超过我们的想象,这就需要我们不断地去摸索、学习、
自我提高。只要通过不断的实践,亲自动手去完成实际应用例子的完整操作,我们才能真正熟练掌握仿真测试的技巧,才能不断地从中获得乐趣。在今后的日子里,
笔者将尽量不断推出网络仿真的实例演示,进一步扩展读者的视野,满足网络爱好者的不断需求。

抱歉!评论已关闭.