• NS2仿真:使用NS仿真软件模拟简单网络模型


    NS2仿真实验报告1

    实验名称:使用NS仿真软件模拟简单网络模型

    实验日期:2015年3月2日~2015年3月7日

    实验报告日期:2015年3月8日

    一、实验环境(网络平台,操作系统,网络拓扑图)

    运行平台:虚拟机VMwareWorkstation11.0

    操作系统:Linux/CentOS6.5仿真分析工具:NS2.35中的仿真软件ns,图形界面nam,编译工具awk,图表编辑器xgraph

    网络拓扑图:


    二、  实验目的

    掌握NS2仿真工具的使用方法,能够模拟真实场景中的网络传输模型,熟悉几种常用的网络协议,了解NS仿真软件的内部结构。通过仿真实验,模拟网络数据包收发、传输和丢失,并将实验数据记录到文件中,使用仿真软件对实验数据生成实验图表,分析实验结果。


    三、实验内容及步骤(包括主要配置流程,重要部分截图)

    3.1CentOS下安装ns2.35

    3.11第一步:对软件的运行环境进行配置

    CentOS中yum的使用方法:找到安装包yumsearch *lib*,例如:yum search lib,就可已找到以下的一些安装包;然后输入以下命令:

    yum installlibX11-devel

    yum installlibXt-devel

    yum installgcc-c++

    3.12第二步:下载和安装ns2.35

    下载ns2.35安装包,下载后的文件格式是ns2.35.tar.gz,可以在装有vmware-tools的系统中,直接打开压缩文件,并且能够将其拖入到指定安装的目录下/home/byf。找到INSTALL文件所在的位置,输入

    ./install

    3.13第三步:配置系统环境变量

    在目录/etc下,找到profile文件,对该文件进行编译

    sudo geditprogile

    输入相应的路径:

    exportPATH=$PATH:/home/byf/ns-allinone-2.35/bin:/home/byf/ns-allinone/2.35/tcl8.5.10/unix:/home/byf/ns-allinone/2.35/tk8.5.10/unix:/usr/sbin:/usr/bin:/usr/local/bin:usr/local/sbin:/bin:/sbin

    exportLD_LIBRARY_PATH=/home/byf/ns-allinone-2.35/otcl-1.14:/home/byf/ns-allinone-2.35/lib

    export TCL_LIBRARY=/home/byf/ns-allinone-2.35/tcl8.5.10/library

    加粗的字体用作程序运行后,可能出现的一些常规错误。

    3.14第四步:配置用户环境变量

    接下来是环境变量的配置:在目录/home/username下(也就是/home/byf)操作:

    #sudo gedit .bashrc

    根据用户的习惯,来设置一些工作环境。

    3.2编写一个tcl脚本一般分为以下几个步骤:

    1) 创建模拟器对象,用来定义和控制模拟过程。在这个过程中,首先创建一个simulator 对象。

    # 产生一个仿真的对象

    set ns [new Simulator]

    2) 配置节点属性。

    #针对不同的资料流定义不同的颜色,这是要给NAM用的

    $ns color 0 blue

    $ns color 1 red

    $ns color 2 white

    #产生四个网络节点

    set n0 [$ns node]

    set n1 [$ns node]

    set n2 [$ns node]

    set n3 [$ns node]

    2) 设置跟踪文件

    #开启一个trace file,用来记录封包传送的过程

    set f [open out.tr w]

    $ns trace-all $f

    #开启一个NAM trace file

    set nf [open out.nam w]

    $ns namtrace-all $nf

    3) 创建节点拓扑结构。

    #把节点连接起来

    $ns duplex-link $n0 $n2 5Mb 2ms DropTail

    $ns duplex-link $n1 $n2 5Mb 2ms DropTail

    $ns duplex-link $n2 $n3 1.5Mb 10ms DropTail

    #设定节点的位置,这是要给NAM用的

    $ns duplex-link-op $n0 $n2 orient right-up

    $ns duplex-link-op $n1 $n2 orient right-down

    $ns duplex-link-op $n2 $n3 orient right

    4) 设置代理和应用层协议,并进行绑定。

    #建立一条UDP的联机

    set udp0 [new Agent/UDP]

    $ns attach-agent $n0 $udp0

    set cbr0 [new Application/Traffic/CBR]

    $cbr0 attach-agent $udp0

    #建立一条UDP的联机

    set udp1 [new Agent/UDP]

    $ns attach-agent $n3 $udp1

    #在NAM中,UDP的联机以红色表示

    $udp1 set class_ 1

    #在UDP联机之上建立CBR应用程序

    set cbr1 [new Application/Traffic/CBR]

    $cbr1 attach-agent $udp1

    set null0 [new Agent/Null]

    $ns attach-agent $n3 $null0

    set null1 [new Agent/Null]

    $ns attach-agent $n1 $null1

    $ns connect $udp0 $null0

    $ns connect $udp1 $null1

    $ns at 1.0 "$cbr0 start"

    $ns at 1.1 "$cbr1 start"

    #建立一条TCP的联机

    set tcp [new Agent/TCP]

    $tcp set class_ 2

    set sink [new Agent/TCPSink]

    $ns attach-agent $n0 $tcp

    $ns attach-agent $n3 $sink

    $ns connect $tcp $sink

    #在TCP联机之上建立FTP应用程序

    set ftp [new Application/FTP]

    5) 使用模拟器对象的at过程设置节点事件和时间的对应关系。

    #设定FTP和CBR资料传送开始和结束时间

    $ns at 1.2 "$ftp start"

    #结束TCP的联机(不一定需要写下面的程序代码来实际结束联机)

    $ns at 1.35 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3$sink"

    puts $f "$now [expr(($bw0+$holdrate1)*8)/(2*$time*1000000)]"

    puts [$cbr0 set packetSize_]

    puts [$cbr0 set interval_]

    6) 使用#定义一个结束的程序

    proc finish {} {

           global ns f nf

           $ns flush-trace

           close $f

           close $nf

        exec xgraph out.tr-geometry 800x400 &

           puts "runningnam..."

           exec nam out.nam &

           exit 0

    }

    #执行仿真

    $ns run模拟器对象的run过程开始模拟。

    7) 结果分析。模拟结束后,将得到保存模拟过程的trace文件,接下来的主要工作就是对于这个结果文件根据需求进行数据分析,同时可以用gnuplot等画图工具直观的显示数据分析结果。


    四、实验结果(包括最终实验结果,重要部分截图)

    在1.0s时节点0开始通过节点2,向节点3传输用户数据包,代码为:

    $ns at 1.0"$cbr0 start",执行结果如下图所示:

    节点3在1.1s时通过节点2向节点1传输用户数据包,代码为:

    $ns at 1.1"$cbr1 start",执行结果如下图所示:

    在1.2s时,开始出现数据传输中断,数据包在节点2发生丢失现象,代码为:$ns at 1.2 "$ftp start",代码的执行结果如下图所示:

    在1.35s左右数据回复传输,代码为:$nsat 1.35 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"执行的结果如下图所示:


     

    五、试验中的问题及心得

    5.1一些出现最多的问题:

    nam: Can't finda usable tk.tcl in the following directories:

        /home/byf/ns-allinone-2.35/tcl8.5.10/library/tk8.5/home/byf/ns-allinone-2.35/tcl8.5.10/tk8.5 ./lib/tk8.5/home/byf/ns-allinone-2.35/lib/tk8.5 ./library

    ……

    This probablymeans that tk wasn't installed properly.

    是由于环境变量的问题,例如环境变量的目录在/home/username/ns2.35,而用户执行的目录在/home/username下,这样就会出现上述的问题。

    六、实验思考

    通过本次实验,初步的了解到NS仿真工具的基本功能,并能够给一些简单的模型进行仿真实验分析,以及进一步对网络协议的了解,编写简单的网络协议算法,通过比较仿真的数据,反映网络协议的优劣。对已经存在的协议进一步提出改进的算法,来提升网络的传输性能。学习NS仿真软件的主要途径,是需要不断的阅读优质的源代码,对未知的代码行进行注释,反复的使用和修改成型的源代码,充分了解代码内部,各部分的函数、命令以及协议定义的方法,对以后学习代码库中的协议代码有非常重要的帮助。

    实验途中可能会遇到各种问题,但是一定要坚持不断的阅读查找,并记录下来错误的地方,找到解决问题的方法。一旦学会使用,就会觉得学习起来非常的简单,对以后独立编写代码起着支撑的作用。

  • 相关阅读:
    JQ 放大镜
    Jquery.tmpl
    Jquery Live方法
    Bootstrap之底层媒体查询
    Bootstrap 字体与图标
    工具提示
    模态框
    BootStrap格栅系统
    Tab选项卡
    弹出框
  • 原文地址:https://www.cnblogs.com/baiyifan/p/5288887.html
Copyright © 2020-2023  润新知