网络协议模拟与分析
2012-12-31 19:48
169 查看
协议模拟
Ø 工具:NS2,awk,shell,perl等;
Ø 要求:掌握NS2网络模拟的基本流程;
Ø 内容:NS2网络模拟基本流程
编写TCL脚本,搭建如下图所示的一个网络,共6个节点,其中2、3节点用做ftp服务器和客户端,4、5节点用做cbr流量的源和目的,而0、1节点用做转发设备。各节点间的链路属性见图。
模拟时间设为13秒钟,在0.1秒开始产生cbr流量,在1.0秒开发发送发ftp流量;8.0秒ftp流量结束,12.0秒cbr流量结束。编写脚本(可用shell,awk,或perl等)分析模拟日志文件,统计每0.5s内0、1节点间链路通过的分组数以及字节数。
设计与实现
1.仿真脚本代码与详细注解
2.仿真过程示意图
3.日志分析脚本设计(设计思路与代码、注解)
设计思路:首先按取出每行的时间(第二字段)、分组大小(第六字段);
若时间大于当前的时间段(interval)$i*0.5,令变量i加1,开始统计下一个时间段信息;
数组count1记录分组的数目,它的下标与时间段的序号对应(比如0~0.5时间段内的通过的分组数的值为$count1[1])。
数组count2记录每个时间段通过的分组的总字节数,它的下标也与时间段的序号对应。
perl脚本:
4.分析结果展示(通过自绘图来说明)
第一列:时间段,每0.5秒分成一个时间段;第二列为分组数;第三列为通过的分组的总字节数。
绘制成统计图如下:
注:
NS2
NS2是指 Network Simulator version 2,NS(Network Simulator) 是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术的所有方面。所以,NS成了目前学术界广泛使用的一种网络模拟软件。
NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等等
1.节点(node):由tclobject对象组成的复合组件,在NS2中表示端节点和路由器
2.链路(link):由多个组件复合而成,用来连接网络节点。所有的链路都是以队列的形式来管理分组的到达、离开和丢弃。
3.代理(agent):负责网络层分组的产生和接收,也可以用在各层次的协议实现中。每个agent连接到一个网络节点上,由该节点给它分配一个端口号。
4.包(packet):由头部和数据两部分组成。一般情况下,packet只有头部没有数据部分。
软件构成
NS2包含Tcl/Tk,OTcl,NS,Tclcl。其中Tcl是一个开放脚本语言,用来对NS2进行编程;Tk是Tcl的图形界面开发工具,可帮助用户在图形环境下开发图形界面;OTcl是基于Tcl/Tk的面向对象扩展,有自己的类层次结构;NS2为本软件包的核心,是面向对象的仿真器,用C++编写,以OTcl解释器作为前端;Tclcl则提供NS2和OTcl的接口,使对象和变量出现在两种语言中。为了直观的观察和分析仿真结果,NS2 提供了可选的Xgraphy、可选件Nam。
NAM ——The Network Animator(网络动画绘制者)
Animate vt,使有生气;驱动。adj,有生气的,生气勃勃的,活的
#模拟结束后,会产生两个文件。一个是out.nam,这是给NAM用的,用来把模拟的过程用视觉化的方式呈现出来,这可以让使用者“看”的方式去了解封包传送是如何从来源端送到接收端。另一个文件是out.tr,这个文件记录了模拟过程中封包传送中所有的事件,例如第一笔记录是一个cbr的封包,长度为1000bytes,在事件0.1秒的时候,从n1传送到n2.这个问价你对我们做效能分析很重要。
日志文件(out.tr)各个字段的含义:
第一个字段:都是封包事件发生的原因:r表示这个封包被某个节点接受,+表示进入队列,-表示离开队列,d表示封包被队列丢弃;
第二个字段:事件发生的时间
第三个字段:开始节点
第四个字段:结束节点
第五个字段:封包的类型
第六个字段:封包的大小,单位为byte
第七个字段:封包的标记标注
第八个字段:表示封包属于哪一个数据流。即在TCL脚本中所定义的类似$udp set fid_ 2
第九、十两个字段表示封包的来源端和目的端,格式为a.b,a代表节点编号,吧表示端口号;
第十一字段表示封包的序号;第十一个字段表示的是网络层包的顺序号,需要注意的是,对于UDP应用来说是不需要顺序号的,但是对于NS2依然保持这个顺序号是为了方便分析。
第十二字段表示封包的id。
CBR(Constants Bit Rate)即固定码率,就是恒定比特率的意思。
题目汇总图的意思是节点4以1Mbps的恒定速率发送大小为1KB的IP包。
以上为本人《网络协议模拟与分析》课程设计的内容,我只是通过短暂的学习完成了课程要求,搞出了合格的结果(感觉已经很牛掰了),但是对其中涉及的东西并非很熟悉,比如TCL脚本语言,如有错误,请大神指正。
本文出自 “开心菠菜” 博客,请务必保留此出处http://kaixinbocai.blog.51cto.com/3913323/1105298
Ø 工具:NS2,awk,shell,perl等;
Ø 要求:掌握NS2网络模拟的基本流程;
Ø 内容:NS2网络模拟基本流程
编写TCL脚本,搭建如下图所示的一个网络,共6个节点,其中2、3节点用做ftp服务器和客户端,4、5节点用做cbr流量的源和目的,而0、1节点用做转发设备。各节点间的链路属性见图。
模拟时间设为13秒钟,在0.1秒开始产生cbr流量,在1.0秒开发发送发ftp流量;8.0秒ftp流量结束,12.0秒cbr流量结束。编写脚本(可用shell,awk,或perl等)分析模拟日志文件,统计每0.5s内0、1节点间链路通过的分组数以及字节数。
设计与实现
1.仿真脚本代码与详细注解
#Create a simulator object #创建一个模拟器对象 set ns [new Simulator] #将模拟器对象赋值给变量ns #Define different colors for data flows (for NAM) #对不同的数据流定义不同 $ns color 1 Blue #的颜色,是给NAM用的 $ns color 2 Red #Open the NAM trace file set nf [open out.nam w] #打开一个nam文件,若存在则清空,若不存在则新建 $ns namtrace-all $nf #Open the Trace file set tf [open out.tr w] #打开一个trace file,方式同上。用来记录封包传送的过程 $ns trace-all $tf #Define a 'finish' procedure #定义一个finish过程 proc finish {} { global ns nf tf $ns flush-trace close $nf #关闭nam文件 close $tf #关闭trace 文件 exec nam out.nam & #以后台方式执行nam exit 0 } #Create four nodes #创建六个节点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] #Create links between the nodes #根据条件创建节点之间的连接 $ns duplex-link $n0 $n2 1.5Mb 10ms DropTail $ns duplex-link $n0 $n4 1.5Mb 10ms DropTail $ns duplex-link $n1 $n3 1.5Mb 10ms DropTail $ns duplex-link $n1 $n5 1.5Mb 10ms DropTail $ns duplex-link $n1 $n0 2Mb 20ms DropTail #Give node position (for NAM) #设置节点的位置,供NAM使用 $ns duplex-link-op $n2 $n0 orient right-down $ns duplex-link-op $n4 $n0 orient right-up $ns duplex-link-op $n0 $n1 orient right $ns duplex-link-op $n0 $n1 orient right $ns duplex-link-op $n1 $n3 orient right-up $ns duplex-link-op $n1 $n5 orient right-down #Set Queue Size of link (n0-n1) to 10 #设置n0和n1之间的最大队列长度为10 $ns queue-limit $n1 $n0 10 #Setup a TCP connection #建立一条TCP链接 set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n2 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1 #在NAM中,TCP的连接以蓝色表示 #Setup a UDP connection #建立一个UDP连接 set udp [new Agent/UDP] $ns attach-agent $n4 $udp set null [new Agent/Null] $ns attach-agent $n3 $null set null [new Agent/Null] $ns attach-agent $n5 $null $ns connect $udp $null $udp set fid_ 2 #在NAM中,UDP的链接以红色表示 #Setup a FTP over TCP connection #在TCP连接之上建立FTP应用 set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP #Setup a CBR over UDP connection #在UDP连接之上建立CBR应用 set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR $cbr set packet_size_ 1000 $cbr set rate_ 1mb $cbr set random_ false #Schedule events for the CBR and FTP agents #设置FTP和CBR开始的时间 $ns at 0.1 "$cbr start" #在0.1秒开始产生cbr流量 $ns at 1.0 "$ftp start" #在1.0秒开发发送发ftp流量 $ns at 8.0 "$ftp stop" #8.0秒ftp流量结束 $ns at 12.0 "$cbr stop" #12.0秒cbr流量结束 #Call the finish procedure after 13 seconds of simulation time #在13秒调用finish过程结束模拟 $ns at 13.0 "finish" #Run the simulation #执行模拟 $ns run
2.仿真过程示意图
3.日志分析脚本设计(设计思路与代码、注解)
设计思路:首先按取出每行的时间(第二字段)、分组大小(第六字段);
若时间大于当前的时间段(interval)$i*0.5,令变量i加1,开始统计下一个时间段信息;
数组count1记录分组的数目,它的下标与时间段的序号对应(比如0~0.5时间段内的通过的分组数的值为$count1[1])。
数组count2记录每个时间段通过的分组的总字节数,它的下标也与时间段的序号对应。
perl脚本:
#!/usr/bin/perl #count the number of packets between node0 and node1 ,the interval is 0.5 seconds. $i=0; #定义变量i @info; #定义三个数组 @count1; @count2; while(<>){ #从标准输入读入数据 @info = split(/ +/,$_); #split函数以一个以上的空格为分隔符对每行数据进行分割。分割后的数据返回给info数组 $reason = $info[0]; #封包事件发生原因 $time = $info[1]; #info中的下标1对应的数据(第二字段)为时间 $src = $info[2]; #开始节点 $dst = $info[3]; #结束节点 $length = $info[5]; #info中下标5对应数据(第六字段)为分组大小 if($reason==’r’ && ($src==0 && $dst==1) || ($src==1 && $dst==0)){ #封包进入队列,且在0——1链路上,执行以下操作 if($time > $i*0.5){ #若时间大于当前的时间段,则开始统计下一 $i++; 时间段的信息 } $count1[$i]++; #对应时间段的分组数加1 $count2[$i]+=$length; #对应时间段的字节数累加 } }#end of while printf("intervals(s)\t\tpackets\t\tbytes\n"); $i=1.0; while($count1[$i]){ #只要count1数组不为空就打印 printf("%4.1f~%4.1f\t\t$count1[$i]\t\t$count2[$i]\n",($i-1)*0.5,$i*0.5,); $i++; }
4.分析结果展示(通过自绘图来说明)
第一列:时间段,每0.5秒分成一个时间段;第二列为分组数;第三列为通过的分组的总字节数。
绘制成统计图如下:
注:
NS2
NS2是指 Network Simulator version 2,NS(Network Simulator) 是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术的所有方面。所以,NS成了目前学术界广泛使用的一种网络模拟软件。
NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等等
1.节点(node):由tclobject对象组成的复合组件,在NS2中表示端节点和路由器
2.链路(link):由多个组件复合而成,用来连接网络节点。所有的链路都是以队列的形式来管理分组的到达、离开和丢弃。
3.代理(agent):负责网络层分组的产生和接收,也可以用在各层次的协议实现中。每个agent连接到一个网络节点上,由该节点给它分配一个端口号。
4.包(packet):由头部和数据两部分组成。一般情况下,packet只有头部没有数据部分。
软件构成
NS2包含Tcl/Tk,OTcl,NS,Tclcl。其中Tcl是一个开放脚本语言,用来对NS2进行编程;Tk是Tcl的图形界面开发工具,可帮助用户在图形环境下开发图形界面;OTcl是基于Tcl/Tk的面向对象扩展,有自己的类层次结构;NS2为本软件包的核心,是面向对象的仿真器,用C++编写,以OTcl解释器作为前端;Tclcl则提供NS2和OTcl的接口,使对象和变量出现在两种语言中。为了直观的观察和分析仿真结果,NS2 提供了可选的Xgraphy、可选件Nam。
NAM ——The Network Animator(网络动画绘制者)
Animate vt,使有生气;驱动。adj,有生气的,生气勃勃的,活的
#模拟结束后,会产生两个文件。一个是out.nam,这是给NAM用的,用来把模拟的过程用视觉化的方式呈现出来,这可以让使用者“看”的方式去了解封包传送是如何从来源端送到接收端。另一个文件是out.tr,这个文件记录了模拟过程中封包传送中所有的事件,例如第一笔记录是一个cbr的封包,长度为1000bytes,在事件0.1秒的时候,从n1传送到n2.这个问价你对我们做效能分析很重要。
日志文件(out.tr)各个字段的含义:
第一个字段:都是封包事件发生的原因:r表示这个封包被某个节点接受,+表示进入队列,-表示离开队列,d表示封包被队列丢弃;
第二个字段:事件发生的时间
第三个字段:开始节点
第四个字段:结束节点
第五个字段:封包的类型
第六个字段:封包的大小,单位为byte
第七个字段:封包的标记标注
第八个字段:表示封包属于哪一个数据流。即在TCL脚本中所定义的类似$udp set fid_ 2
第九、十两个字段表示封包的来源端和目的端,格式为a.b,a代表节点编号,吧表示端口号;
第十一字段表示封包的序号;第十一个字段表示的是网络层包的顺序号,需要注意的是,对于UDP应用来说是不需要顺序号的,但是对于NS2依然保持这个顺序号是为了方便分析。
第十二字段表示封包的id。
CBR(Constants Bit Rate)即固定码率,就是恒定比特率的意思。
题目汇总图的意思是节点4以1Mbps的恒定速率发送大小为1KB的IP包。
以上为本人《网络协议模拟与分析》课程设计的内容,我只是通过短暂的学习完成了课程要求,搞出了合格的结果(感觉已经很牛掰了),但是对其中涉及的东西并非很熟悉,比如TCL脚本语言,如有错误,请大神指正。
本文出自 “开心菠菜” 博客,请务必保留此出处http://kaixinbocai.blog.51cto.com/3913323/1105298
相关文章推荐
- 【考试分析】模拟考试阶段行为规范
- ffmpeg代码分析之2——模拟C++多态之C实现篇章
- Java程序员认证模拟题及详细分析
- AVL.Fire.v2010.0 发动机三维性能模拟分析软件
- JavaScript中的模拟事件和自定义事件实例分析
- 利用HTTPAnalyzer工具分析数据包并模拟该数据包进行消息的发送
- Stick hero "攻略", android 代码编写与分析(后台截屏, 后台模拟点击)
- 信息分析与预测考前模拟试题
- SC/Tetra.v7-ISO 1DVD(流体模拟分析)
- GEF源码分析(三) 模拟GEF设计思路,解剖GEF2 附图:包含GEF的Editor创建时序图
- Mysql中模拟分析函数
- NHB网络心跳丢失的模拟过程分析
- SQLSERVER2000 用过程来模拟MDX分析报表的效果(1)
- Android实时监控项目第一篇:项目分析及AVD模拟效果图
- Oracle单实例情况下的library cache pin的问题模拟与问题分析
- Android 【真机】与【模拟器】触摸屏事件的模拟差异分析
- NS2中无线网络模拟之三(AODV路由分析3)
- [转载]用ANSYS有限元软件模拟分析声学换能器
- msm 模拟i2c使用过程分析