免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1385 | 回复: 0
打印 上一主题 下一主题

NS2网络模拟的原理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:53 |只看该作者 |倒序浏览
1. 网络模拟和网络仿真  此处参考《NS与网络模拟》--徐雷鸣
 
    (仅仅在此处,我们需要分别对待这两个术语,其他时刻请依据语境判断)
    徐老师在该书的开头详细阐明了“网络模拟”和“网络仿真”这两个有着本质差别的概念;
 
    网络模拟 Simulation
        模拟,即针对一个物理的或抽象的系统,选取某些行为特征,用另一个系统来表示他们的过程;
 
    网络仿真 Emulation
        仿真,即用另一个数据处理系统(主要是硬件),来全部或部分地模仿某一数据处理系统,以至于模仿系统能像被模仿系统一样接受相同的数据,执行同样的程序,获得同样的结果。
        (模仿系统和被模仿系统,在我们考虑范围内在功能上是等价的!)
   
    故而:
    Simulation强调的是模仿一个系统过程的 某些行为特征;
    Emulation 强调的是模仿者可以取代被模仿者或者嵌入到被模仿的系统中,并且表现出等价的行为;
 
    NS的设计之初是兼有“模拟”和“仿真”两大功能的。NS首先是可以模拟一个网络的运行过程,在此基础上做仿真的扩展,再嵌入到一个活动的网络中去。 NS中特定的对象可以把真实网络的分组数据引入到模拟器中,并将模拟器中产生的分组数据输出到真实的网络中。 不过,NS中的这种仿真功能一直都没有得到充分开发,现在还相当不成熟,平台移植性也比较差,很少被人使用。
  
    注意: (以下是个人心得)
    1. NS2模拟时,传递的每个数据包实际上只有包头信息,并且默认情况下该包头信息包含几乎各种协议规定的字段,而每一次具体的模拟仅仅在相应的字段上进行操作(只使用与协议相关的包头字段); 因为模拟过程中数据包的数据毫无作用,所以根本不必传输,即仅仅包头信息就已完整表征实际网络中的一个分组(数据包)。
    2. 网络模拟的关键之一就是时间的控制(事件是按时序产生的、行为是时间依赖的、况且TCP/IP协议本身就时分依赖于计时器。  模拟过程的时间显然是无法与真实网络同步的,而且也没必要同步(仿真时才需要同步),因此模拟的时间戳通过NS2计时器功能模块统一控制,每一个计时器的实现也是依赖于模拟时间的,而不是实际时间。
 
2. NS是一个离散事件模拟器    此处参考《NS Manual》
 
    上面我提到NS2的仿真时间与实际时间是不一致的(模拟处理过程的速率不直接对应着实际时间),而是通过统一时钟控制和分组包头对应的时间戳字段标志来完成的。 因此不难理解NS的离散时间模拟的本质,也可以说是时间驱动的网络模拟。
 
    NS是一个离散事件模拟器。简单来说,系统状态的改变由事件决定,状态变迁仅仅发生在事件发生时进行。 在NS2网络模拟过程中,典型的事件包括分组到达、时钟超时等。
    模拟器所做的工作就是不停地处理事件容器(一般是FIFO队列)中一个个的事件,而一个事件的处理又可能会引发后续的事件(被加入到时间容器中),直到所有时间被处理完成或者某一个特定事件的发生位置,模拟过程终止。
 
    NS的核心部分是一个离散事件模拟引擎,对应为Scheduler类,负责记录当前时间,调度网络事件队列中的时间,并调用与事件相关联的处理函数,提供产生新事件的函数,指定事件发生的时间(即,给相应的Event类实例的时间变量赋值),等等。
 
3. NS2软件编写   此处看考《NS Manual》
 
     NS2是由UC Berkely结合C++和OTCL语言开发的面向对象的离散事件模拟器。
     关于采用这两种语言的解释:
     (1) 网络模拟的任务为两类
        高效灵活的操作: 
           具体网络协议的详细模拟和实现需要一种系统编程语言, 它应该具有高效操作字节、包头等数据结构,便于特定的算法在大规模数据集合上的实现,而且这些算法往往是需要重复执行的,所以高效是很重要的。  对于这类任务而言,运行效率是关键,而编程开发、重编译、与其他模块的组合耗时则不影响网络模拟过程。
        便捷的网络场景配置:
           我们的网络模拟实际上是围绕着网络组件(节点、链路、队列、特定协议、路由算法)和网络环境的具体参数进行的,换句话说,我们利用不同的网络组件创建我们的网络场景,更改网络组件的参数和网络环境的参数,进行不断的重复测试和对比测试。 因此我们需要高效的网络配置方案,以便在较短的时间开发出大量的网络场景。
    (2)选择C++和OTCL语言  
       C++ 程序运行效率高,是强制类型语言,容易实现复杂的数据结构和精确的、复杂的算法, 不过修改、debug和重新编译的耗时比较长, 因此被选做用于具体协议的开发实现。
       OTCL运行速度比较慢,但是可以很方便地(并且是交互地)修改,不需要编译(解释性语言),而且OTCL不是强制类型的,不容易出错, 因此适合用来做模拟的配置。
    (3)拓展NS2时语言选取的建议
       OTCL: 模拟场景的建立、具体参数的配置,以及模拟中只需要运行一侧的程序;
                   如果通过Otcl脚本操作已经存在的C++对象很方便达到目的时;
        C++ :     需要对一个数据流的每个分组进行处理的任何工作;
                   如果必须修改已存在的C++类的行为时(以实现特定网络协议)。
 
 
4. NS2 软件结构的初识
 
       前面已经说到NS2模拟的核心是离散事件模拟引擎。 原则上用户可以利用该引擎对任何系统进行模拟,而不陷于通信网络系统。  通过很多NS设计者的努力,NS已经针对网络模拟预先做了大量的模型化工作,从而方便用户将焦点集中在所关注的协议本身,快速实现协议、方便完成测试。
       NS2对网络系统中一些通用的实体已经进行了建模,例如链路、队列、分组、节点等, 并用对象来实现这些实体的特性和功能,这就是NS的构件库。
       相对于一般的离散事件模拟器来说,NS的优势就在于它所具有的丰富的构件库,并且它们易于组合,易于扩展。用户可以充分利用这些已有的对象,进行少量的扩展,组合出所要研究的网络系统的模型,然后进行模拟(测试)。 这样,减轻了进行网络模拟研究的工作量,提高了效率。
 
       NS的构件库所支持的网络类型包括: 广域网、局域网、移动通信网、卫星通信网等;
                 所支持的路由方式包括: 层次路由、动态路由、多播路由等;
 
       NS还提供了跟踪和监测的对象,可以把网络系统的状态和事件记录下来以便分析。
       NS的构件库还提供了大量的数学方面的支持,包括随机数产生、随机变量、积分等
 
       NS2的结构示意图:
                                              NS2网络模拟的原理
 
         该图Legend: 这是NS2 的整体框架, 网络模拟用户使用OTCl脚本进行场景创建,并通过命令是的Event Scheduler执行; OTCL脚本的命令和网络构件库,则是通过Tclcl机制实现对应的。
 
     简化的NS2 网络模拟用户的视图:      NS2网络模拟的原理  
    
     该图Legend:用户OTCL脚本由Otcl解释器解释执行, 最后得到模拟结果,进而进行分析或利用NAM显示模拟的整个过程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP