计算机网络实验:Lab4 使用ns2进行网络模拟
Lab 4: Using NS
文章目录
- Lab 4: Using NS
- 实验过程
- 实验环境
- 安装依赖
- 开始实验
- 编写tcl脚本
- 运行tcl脚本
- 解析trace数据,计算丢包率
- 使用解析后的数据画图
- 分析原理
实验过程
- 编写tcl脚本
- 使用ns运行tcl脚本模拟网络,并利用nam生成动画
- 解析上一步产生的trace数据,计算丢包率
- 使用解析后的数据画图
- 分析原理
实验环境
Linux Ubuntu 18.04 with bash
安装依赖
sudo apt-get install ns2 (ns)
sudo apt-get install tcl (tclsh)
sudo apt-get install nam (nam)
sudo apt-get install original-awk (awk)
sudo apt-get install gnuplot-qt
开始实验
编写tcl脚本
set ns [new Simulator]#open a nam trace file
set nf [open out.nam w]
$ns namtrace-all $nf#open a trace file
set tf [open out.tr w]
$ns trace-all $tf#finish procedure
proc finish {} {global ns nf tf$ns flush-traceclose $nfclose $tfexec nam out.nam &exit 0
}#create nodes
set node(http) [$ns node]
set node(rtp) [$ns node]
set node(recv) [$ns node]#create links
$ns duplex-link $node(http) $node(recv) 0.9Mb 10ms DropTail
$ns duplex-link $node(rtp) $node(recv) 0.9Mb 10ms DropTail#set queue size
$ns queue-limit $node(http) $node(recv) 10
$ns queue-limit $node(rtp) $node(recv) 10#relayout nodes
$ns duplex-link-op $node(http) $node(recv) orient right-down
$ns duplex-link-op $node(rtp) $node(recv) orient right-up#set colors
$ns color 1 blue
$ns color 2 red#set a tcp connection
set tcp [new Agent/TCP]
$ns attach-agent $node(http) $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $node(recv) $sink
$ns connect $tcp $sink
$tcp set fid_ 1#set a cbr above tcp connection
set cbr(http) [new Application/Traffic/CBR]
$cbr(http) attach-agent $tcp
$cbr(http) set type_ CBR
$cbr(http) set packet_size_ 1000
$cbr(http) set rate_ 1mb
$cbr(http) set random_ false#set a rtp connection
set rtp [new Agent/UDP]
$ns attach-agent $node(rtp) $rtp
set null [new Agent/Null]
$ns attach-agent $node(recv) $null
$ns connect $rtp $null
$rtp set fid_ 2#set a cbr above tcp connection
set cbr(rtp) [new Application/Traffic/CBR]
$cbr(rtp) attach-agent $rtp
$cbr(rtp) set type_ CBR
$cbr(rtp) set packet_size_ 1000
$cbr(rtp) set rate_ 1mb
$cbr(rtp) set random_ false#schedule
$ns at 0.1 "$cbr(http) start"
$ns at 0.1 "$cbr(rtp) start"
$ns at 4.0 "$cbr(http) stop"
$ns at 4.0 "$cbr(rtp) stop"
$ns at 4.1 "finish"$ns run
编写截图↓
tcl脚本是基于tclsh的,其实也可以理解为普通的sh脚本,目的是省去大量的bash输入,避免手误的错误产生等等,这里使用了tcp和udp两个协议。
运行tcl脚本
在命令行中输入以下命令:
ns your_file_name.tcl
运行结束后会产生一个out.tr文件和一个nam动画,用来演示模拟过程,但是这个动画太快了我们确实看不出什么,因此需要分析数据进行画图。
运行截图↓
解析trace数据,计算丢包率
使用awk语言来对数据进行处理:
BEGIN {tcp_droped = 0;udp_droped = 0;last_tcp = -1;last_udp = -1;total_tcp = 0;total_udp = 0;i = 0;
}{action = $1;time = $2;type = $5;seq_no = $11;if(action == "+" && type == "tcp"){total_tcp = total_tcp + 1;}if(action == "+" && type == "cbr"){total_udp = total_udp + 1;}if(action=="r"){if(type=="tcp"){if(seq_no != last_tcp + 1){tcp_droped = tcp_droped + 1;}last_tcp = seq_no;}if(type=="cbr"){if(seq_no != last_udp + 1){udp_droped = udp_droped + 1;}last_udp = seq_no;}time_point[i] = time;if(total_tcp > 0)tcp_loss[i] = tcp_droped / total_tcp * 100;elsetcp_loss[i] = 0;if(total_udp > 0)udp_loss[i] = udp_droped / total_udp * 100;elseudp_loss[i] = 0;i = i + 1;}}END {printf("%.2f\t%.2f\t%.2f\n",0,0,0);for(j=0; j<i; j++){printf("%.2f\t%.2f\t%.2f\n",time_point[j], tcp_loss[j], udp_loss[j]);}
}
awk这个小众到sublime都不支持高亮…
使用awk进行分析的话,需要按照以下命令执行:
awk -f your_awk.awk your_trace.tr > out.txt
然后你就会得到类似于这样的效果↓
使用解析后的数据画图
画图的方式其实是多种多样的,比如使用pyplot,但是这里使用gnuplot-qt来画图
gnuplot是使用bash的形式来解析和绘图,基本的使用方式可以自行google
在命令行输入
gnuplot
来进入gnuplot的bash模式:
输入:
plot "http_rtp.txt" using 2, "http_rtp.txt" using 3
然后就会显示如上图的图像。
分析原理
当链路带宽设为1Mb,TCP和UDP速率都为1000时,TCP有丢包现象,UDP没有丢包现象,这大概是因为TCP是面向连接的协议,而UDP并不是。当把链路带宽都设定为0.9Mb,tcp和udp都有严重的丢包现象。可见虽然TCP有重传机制,但在带宽太低的情况下,仍然会丢包。
最终的曲线图说明,TCP的拥塞控制机制发挥了作用,丢包率逐步下降。而UDP没有拥塞控制机制,当缓冲队列满后,丢包率迅速上升。
计算机网络实验:Lab4 使用ns2进行网络模拟相关推荐
- CS144 lab4 计算机网络实验 笔记
CS144 lab4 计算机网络实验 笔记 介绍 本实验中,我们将组合TCP sender和TCP receiver实现一个完整的TCP connection TCP是全双工连接,所以两方可以同时接收 ...
- 计算机网络自顶向下 Wireshark实验 Lab4 TCP
计算机网络自顶向下 Wireshark实验 Lab4 TCP 不写答案,本文章只记录 任务 和 问题 开始Wireshark Lab TCP 先在Wireshark Lab官网下载相应文档:https ...
- 计算机网络实验ns2实验
网络仿真器NS2的配置与应用 这个实验环境配置很麻烦,但是实验内容很简单...... 配置环境一上午,实验只要十分钟...... 1. 实验要求 安装并运行网络仿真器NS2,了解其功能 ...
- 宁波大学计算机网络实验五,宁波大学计算机网络实验答案.doc
宁波大学计算机网络实验答案 实验三 DNS协议分析 思考题: Q1.运行nslookup,查询并记载你的本地DNS 服务器名称及其IP 地址, 的 权威DNS 服务器名称及其IP 地址: A: 运行 ...
- 宁波大学计算机网络实验五,宁波大学计算机网络实验答案
宁波大学计算机网络实验答案 实验三 DNS协议分析思考题:Q1.运行nslookup,查询并记载你的本地DNS 服务器名称及其IP 地址, 的权威DNS 服务器名称及其 IP 地址:A: 运行 nsl ...
- 《计算机网络实验教程》——验证性实验
文章目录 一.简介 二.验证性实验 ipconfig ping tracert ARP DHCP netstat DNS cache 一.简介 实验教程原网页来自棋歌教学网 本计算机网络实验教程由验证 ...
- 计算机网络实验报告:【验证性实验】
一.简介 本计算机网络实验教程由验证性.Wireshark 和 Cisco Packet Tracer 实验等三个部分组成,可供信息学院各专业及校内其它专业使用 建议 验证性实验和 Wireshark ...
- 计算机网络实验报告:第一部分【验证性实验】
目录 一.简介 二.验证性实验 1)ipconfig 2)ping 3)tracert 4)ARP 5)DHCP 6)netstat 7)DNS 8)cache 一.简介 本计算机网络实验教程由验证性 ...
- 计算机网络实验五,计算机网络(实验五).docx
计算机网络(实验五).docx 实验五一.实验内容在这个实验室里,我们将探讨ICMP 协议得几个方面由 Ping 项目产生得P 信息Tracer ute程序生成得C消息关于 CM 信息得格式与内容.在 ...
最新文章
- DOS BAT批处理定义变量
- android 模块自动加载,Android 之ko模块的自动加载
- mysql allowmultiqueries=true_Mysql批量更新的一个坑-allowMultiQueries=true允许批量更新(转)...
- 非root用户组启动sftp_如何在 Debian 10 中配置 Chroot 环境的 SFTP 服务 | Linux 中国
- 一些Linux历史的小散
- android定时切换活动,安卓手机如何定时自动切换情景模式 (全文)
- BZOJ5249:[九省联考2018]IIIDX——题解
- 218.94.78.76:20001/index.php,详解spring中使用Elasticsearch的实例教程
- 大数据分析如何助力企业发展
- Web 开发与设计师速查手册大全
- docker镜像的常用操作
- 应用程序无法正常启动0xc0150002解决方案
- iPhone与win10传输大文件,使用局域网
- Ubuntu 22.4网易云音乐启动失败处理方法
- xctf攻防世界 MISC高手进阶区 互相伤害
- java中j=j++和j=++j的理解
- 深入浅出FPGA-4-数字电路设计基础
- java从小白到老白⑤——传智播客27版笔记
- dnf用计算机算比例,DNF比例计算查询
- ACrush 楼天成的回忆录
热门文章
- 光纤跳线接口_光纤跳线有哪些接口?
- 2018年4月高等教育国际金融全国统一命题考试
- 基于微信小程序菜谱查询app设计
- CreateJs的拖拽、碰撞检测函数封装
- 计算机u盘中文名显示乱码,教你u盘出现乱码该怎么办
- linux 区分flash和u盘,闪存盘和u盘的区别
- 章鱼未来之星获得25万美金奖励|章鱼加速器2022夏季创业营圆满落幕
- Avatar状态机设计
- linux服务器解压zip文件
- linux rdesktop 远程,linux下rdesktop远程联接windows系统(配合xshell工具的使用及遇到的问题)...