Ns2简单有限网络仿真实验

1.编写Otcl脚本文件yy.tcl
2.终端:ns yy.tcl即可进行仿真

注意:在 建立一条UDP的联机时,不要忘记添加
$ns attach-agent $n3 $null
我在代码中也特别标注出来了。



//Otcl脚本,文本文件后缀名为.tcl即可
#产生一个仿真的对象
set ns [new Simulator]#针对不同的资料流定义不同的颜色,这是要给NAM用的
$ns color 1 Green
$ns color 2 Red#开启一个NAM trace file
set nf [open out.nam w]
$ns namtrace-all $nf#开启一个trace file,用来记录封包传送的过程
set nd [open out.tr w]
$ns trace-all $nd#定义一个结束的程序
proc finish {} {global ns nf nd wnd_trace$ns flush-traceclose $nfclose $nd#以背景执行的方式去执行NAMexec nam out.nam &exit 0
}#产生6个网络节点
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
set n5 [$ns node]#把节点连接起来
$ns duplex-link $n0 $n2 2Mb 10ms DropTail
$ns duplex-link $n1 $n2 2Mb 10ms DropTail
$ns duplex-link $n2 $n3 1.7Mb 20ms DropTail
$ns duplex-link $n3 $n4 1.7Mb 30ms DropTail
$ns duplex-link $n3 $n5 1.5Mb 30ms DropTail#设定ns2到ns3之间的Queue Size为10个封包大小
$ns queue-limit $n2 $n3 10
$ns queue-limit $n3 $n4 5
$ns queue-limit $n3 $n5 10#设定节点的位置,这是要给NAM用的
$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right
$ns duplex-link-op $n3 $n4 orient right-up
$ns duplex-link-op $n3 $n5 orient right-down#观测n2到n3之间queue的变化,这是要给NAM用的
set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]$ns attach-agent $n5 $sink
$ns connect $tcp $sink#在NAM中,TCP的联机会以Green表示
$tcp set fid_ 1#在TCP联机之上建立FTP应用程序
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ftp set type_ FTP#建立一条UDP的联机
set udp [new Agent/UDP]
$ns attach-agent $n1 $udp
set null [new Agent/Null]
///
//不要忘记添加这句话,否则运行不了
$ns attach-agent $n3 $null
///
$ns connect $udp $null#在NAM中,UDP的联机会以红色表示
$udp set fid_ 2#在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#设定FTP和CBR资料传送开始和结束时间
$ns at 0.1 "$cbr start"
$ns at 1.0 "$ftp start"
$ns at 4.0 "$ftp stop"
$ns at 4.5 "$cbr stop"#结束TCP的联机(不一定需要写下面的程序代码来实际结束联机)
$ns at 4.5 "$ns detach-agent $n0 $tcp;$ns detach-agent $n3 $sink" #在仿真环境中,5秒后去呼叫finish来结束仿真(这样要注意仿真环境中的5秒并一定等于实际仿真的时间)$ns at 5.0 "finish"
#执行仿真
$ns run



接下来是数据分析

  1. 把测量CBR封包端点到端点间延迟时间的awk程序,写在档案measure-delay.awk档案中。(也就是新建一个.awk文件:gedit measure-delay.awk
#测量CBR封包端点到端点间延迟时间的awk程序BEGIN {#程序初始化,设定一变量以记录目前最高处理封包的IDhighest_packet_id = 0;
}{action = $1;time = $2;node_1 = $3;node_2 = $4;type = $5;flow_id = $8;node_1_address = $9;node_2_address = $10;seq_no = $11;packet_id = $12;#记录目前最高的packet IDif (packet_id > highest_packet_id)highest_packet_id = packet_id;#记录封包的传送时间if (start_time[packet_id] == 0)start_time[packet_id] = time;#记录CBR(flow_id = 2)的接收时间if( flow_id == 2 && action != "d") {if(action == "r") {end_time[packet_id] = time;}}else {#把不是flow_id = 2的封包或者是flow_id = 2但此封包被drop的时间设为-1end_time[packet_id] = -1;}}END {#当资料列全部读取完后,开始计算有效封包的端点到端点延迟时间for(packet_id = 0;packet_id <= highest_packet_id;packet_id++){start = start_time[packet_id];end = end_time[packet_id];packet_duration = end - start;#只把接收时间大于传送时间的记录列出来if(start < end) printf("%f %f\n",start,packet_duration);}}


结果如下:会出来好多组数据(这里不全部列出了,大概就是下面这些),用画图软件把这些点画出来会容易看些。

0.100000 0.038706
0.108000 0.038706
0.116000 0.038706
0.868000 0.038706
1.956000 0.038706
1.964000 0.038706
1.972000 0.038706
1.980000 0.038706
2.124000 0.038706
2.508000 0.041529
2.516000 0.038706
2.708000 0.041812
2.884000 0.047647
3.804000 0.076165
3.812000 0.077765
3.820000 0.074471
3.828000 0.076071
4.156000 0.038706
4.164000 0.038706
4.460000 0.038706
4.468000 0.038706

2.jitter延迟时间变化量delay variance
创建文件measure-jitter.awk

#jitter就是延迟时间变化量delay varianceBEGIN {#程序初始化old_time = 0;old_seq_no = 0;i = 0;}{action = $1;time = $2;node_1 = $3;node_2 = $4;type = $5;flow_id = $8;node_1_address = $9;node_2_address = $10;seq_no = $11;packet_id = $12;#判断是否为n2传送到n3,且封包型态为cbr,动作为接受封包if(node_1 == 2 && node_2 == 3 && type == "cbr" && action == "r") {#求出目前封包的序号和上次成功接收的序号差值dif = seq_no-old_seq_no;#处理第一个接收封包if(dif == 0)dif = 1;#求出jitterjitter[i] = (time-old_time)/dif;seq[i] = seq_no;i = i+1;old_seq_no = seq_no;old_time = time;}}END {for(j = 1;j < i;j++)printf("%d\t%f\n",seq[j],jitter[j]);}


得出的结果也是一堆数据,有500多个。

488  0.004706
489 0.004706
490 0.004705
491 0.004706
492 0.004706
493 0.004706
494 0.004706
495 0.004706
496 0.004706
497 0.004706
498 0.004706
499 0.004705
500 0.005177
501 0.008000
502 0.008000
503 0.008000
504 0.008000
505 0.008000
506 0.008000
507 0.008000
508 0.008000
509 0.008000
510 0.008000
511 0.008000
512 0.008000
513 0.008000
514 0.008000
515 0.008000
516 0.008000
517 0.008000
518 0.008000
519 0.008000
520 0.008000
521 0.008000
522 0.008000
523 0.008000
524 0.008000
525 0.008000
526 0.008000
527 0.008000
528 0.008000
529 0.008000
530 0.008000
531 0.008000
532 0.008000
533 0.008000
534 0.008000
535 0.008000
536 0.008000
537 0.008000
538 0.008000
539 0.008000
540 0.008000
541 0.008000
542 0.008000
543 0.008000
544 0.008000
545 0.008000
546 0.008000
547 0.008000
548 0.008000
549 0.008000

3.测量CBR Packet Loss的情况写在档案measure-drop.awk内

#把测量CBR Packet Loss的情况写在档案measure-drop.awk内BEGIN {#程序初始化,设定一变量记录packet被drop的数目fsDrops = 0;numFs = 0;}{action = $1;time = $2;node_1 = $3;node_2 = $4;type = $5;flow_id = $8;node_1_address = $9;node_2_address = $10;seq_no = $11;packet_id = $12;#统计从n1送出多少packetsif(node_1 == 1 && node_2 == 2 && action == "+")numFs++;#统计flow_id为2,且被drop的封包if(flow_id == 2 && action == "d")fsDrops++;}END {printf("number of packets sent:%d   lost:%d\n",numFs,fsDrops);}


得出的结果是:number of packets sent:550 lost:14

Ns2简单有限网络仿真实验相关推荐

  1. matlab搭建sdn,软件定义网络SDN简介和简单仿真实验

    阅读: 11,620 SDN是在2009年左右出现的一种新型网络结构,它将数据层面与控制层面分离,使用中央控制器完成网络的操作和管理,并通常采用OpenFlow协议作为其核心通信协议,拥有着集中式控制 ...

  2. NS2仿真实验环境组建

    最近有初学NS2的同学问如何搭建环境,我这边把编写的实验手册中的一个章节拿出来分享. 更多内容请关注我编写的,即将由清华大学出版社出版的<无线网络技术教程(第2版)> 把内容粘上了,发现图 ...

  3. 基于matlab的漏电保护器仿真,基于MATLAB的小电流接地系统简单故障仿真实验

    在我国,中性点直接接地方式被规定用于110kV及以上的电压等级的系统,而小电流接地方式(即中性点不接地或经消弧线圈接地)被规定用于35kV及以下的配电系统.在小电流接地系统中,如果发生了单相接地故障, ...

  4. ns2安装详细过程与网络仿真

    ns2安装详细过程与网络仿真 博客分类: Networks TclLinuxUnixGCCVC++ 简单的说,NS-2是一个网络模拟器,所以经常被用到网络课的教学中. NS-2是OpenSource的 ...

  5. Windows平台下NS2网络仿真环境的搭建

    NS2(Network Simulator 2) 是一种针对网络技术的源代码公开的.免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术 ...

  6. NS2网络仿真的过程

    NS2网络仿真的过程可以总结为: 1.初始化     创建ns simulator     创建.tr文件(记录仿真结果)     创建.nam文件(记录仿真过程)     设置结束函数     设置 ...

  7. 【无线网络技术】实验十二——AODV和DSR协议仿真实验

    1.实验要求与目的 理解AODV和DSR协议的工作过程 掌握NS2仿真分析AODV和DSR协议 2.实验仪器.材料 环境资源:NS2仿真试验平台.实验压缩包及代码 3.实验内容及过程记录 AODV 1 ...

  8. 第24节 综合网络配置实验(含IP、RIP、VLAN、VTP、HSRP、ACL、NAT等配置完整命令)——基于PacketTracer8.0仿真实验

    综合网络配置实验(含IP.RIP.VLAN.VTP.HSRP.ACL.NAT等配置完整命令)--基于PacketTracer8.0仿真实验 1 网络规划 1.1 网络拓扑图 1.2 网络规划 2 实验 ...

  9. FactoryIO立体仓库仿真实验程序 使用简单的梯形图与SCL语言编写,通俗易懂,写有详细注释

    FactoryIO立体仓库仿真实验程序 [程序原创]使用简单的梯形图与SCL语言编写,通俗易懂,写有详细注释,起到抛砖引玉的作用,比较适合入门初学者. 软件环境: 1.西门子编程软件:TIA Port ...

最新文章

  1. 我的Android进阶之旅------Android嵌入图像InsetDrawable的用法
  2. Springboot集成netty实例
  3. java分布式面试题之Dubbo部分
  4. hibernate session 新增、删除,修改、查询样例
  5. NOI题库 python题解-2022.01.07整理(1.1-1.3)
  6. Hibernate自动事务揪出的编码不规范
  7. HTML中淡入的动画效果,CSS3实现页面淡入动画特效代码
  8. matlab 写入 MYSQL_阿里开源MySQL中间件Canal快速入门
  9. 提高专业技能之 “专利申请”
  10. Nacos 配置中心原理分Nacos 配置中心原理分析析
  11. Java Lambda 策略模式
  12. EI的检索方法快速检索(Quick Search)
  13. excel宏-自定义筛选查询
  14. 如何向外行讲解 2G、3G 和 4G LTE 的区别?
  15. android自动调节屏幕亮度自动调节流程解析
  16. SDSoC和SDAccel和SDNet和HLS工具介绍
  17. uboot网络加载linux,DM8148 uboot 网络正常,Linux 起来后网络不通
  18. 关于office2016卸载后注册表残留无法重新安装问题解决
  19. 使用电脑获取手机相册教程
  20. 软件工程导论作业2.3

热门文章

  1. 区块链技术在金融领域应用发展情况
  2. 【java毕业设计】基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码)——图书销售管理系统
  3. 当男孩变成男人的时候…
  4. 要尽量把外链发到权重高的网站
  5. 像巴菲特那样管理资本
  6. Sober主题英文版 WordPress响应式 电子商务主题
  7. VO、DTO、DO、PO理解及应用
  8. Ethereum EVM简介
  9. 第二章:我们都有梦想 (艺术打印字符型)
  10. 魔法王国java_网易编程题-游历魔法王国(深度优先遍历)