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进行网络模拟相关推荐

  1. CS144 lab4 计算机网络实验 笔记

    CS144 lab4 计算机网络实验 笔记 介绍 本实验中,我们将组合TCP sender和TCP receiver实现一个完整的TCP connection TCP是全双工连接,所以两方可以同时接收 ...

  2. 计算机网络自顶向下 Wireshark实验 Lab4 TCP

    计算机网络自顶向下 Wireshark实验 Lab4 TCP 不写答案,本文章只记录 任务 和 问题 开始Wireshark Lab TCP 先在Wireshark Lab官网下载相应文档:https ...

  3. 计算机网络实验ns2实验

    网络仿真器NS2的配置与应用 这个实验环境配置很麻烦,但是实验内容很简单...... 配置环境一上午,实验只要十分钟......  1.        实验要求 安装并运行网络仿真器NS2,了解其功能 ...

  4. 宁波大学计算机网络实验五,宁波大学计算机网络实验答案.doc

    宁波大学计算机网络实验答案 实验三 DNS协议分析 思考题: Q1.运行nslookup,查询并记载你的本地DNS 服务器名称及其IP 地址, 的 权威DNS 服务器名称及其IP 地址: A: 运行 ...

  5. 宁波大学计算机网络实验五,宁波大学计算机网络实验答案

    宁波大学计算机网络实验答案 实验三 DNS协议分析思考题:Q1.运行nslookup,查询并记载你的本地DNS 服务器名称及其IP 地址, 的权威DNS 服务器名称及其 IP 地址:A: 运行 nsl ...

  6. 《计算机网络实验教程》——验证性实验

    文章目录 一.简介 二.验证性实验 ipconfig ping tracert ARP DHCP netstat DNS cache 一.简介 实验教程原网页来自棋歌教学网 本计算机网络实验教程由验证 ...

  7. 计算机网络实验报告:【验证性实验】

    一.简介 本计算机网络实验教程由验证性.Wireshark 和 Cisco Packet Tracer 实验等三个部分组成,可供信息学院各专业及校内其它专业使用 建议 验证性实验和 Wireshark ...

  8. 计算机网络实验报告:第一部分【验证性实验】

    目录 一.简介 二.验证性实验 1)ipconfig 2)ping 3)tracert 4)ARP 5)DHCP 6)netstat 7)DNS 8)cache 一.简介 本计算机网络实验教程由验证性 ...

  9. 计算机网络实验五,计算机网络(实验五).docx

    计算机网络(实验五).docx 实验五一.实验内容在这个实验室里,我们将探讨ICMP 协议得几个方面由 Ping 项目产生得P 信息Tracer ute程序生成得C消息关于 CM 信息得格式与内容.在 ...

最新文章

  1. DOS BAT批处理定义变量
  2. android 模块自动加载,Android 之ko模块的自动加载
  3. mysql allowmultiqueries=true_Mysql批量更新的一个坑-allowMultiQueries=true允许批量更新(转)...
  4. 非root用户组启动sftp_如何在 Debian 10 中配置 Chroot 环境的 SFTP 服务 | Linux 中国
  5. 一些Linux历史的小散
  6. android定时切换活动,安卓手机如何定时自动切换情景模式 (全文)
  7. BZOJ5249:[九省联考2018]IIIDX——题解
  8. 218.94.78.76:20001/index.php,详解spring中使用Elasticsearch的实例教程
  9. 大数据分析如何助力企业发展
  10. Web 开发与设计师速查手册大全
  11. docker镜像的常用操作
  12. 应用程序无法正常启动0xc0150002解决方案
  13. iPhone与win10传输大文件,使用局域网
  14. Ubuntu 22.4网易云音乐启动失败处理方法
  15. xctf攻防世界 MISC高手进阶区 互相伤害
  16. java中j=j++和j=++j的理解
  17. 深入浅出FPGA-4-数字电路设计基础
  18. java从小白到老白⑤——传智播客27版笔记
  19. dnf用计算机算比例,DNF比例计算查询
  20. ACrush 楼天成的回忆录

热门文章

  1. 光纤跳线接口_光纤跳线有哪些接口?
  2. 2018年4月高等教育国际金融全国统一命题考试
  3. 基于微信小程序菜谱查询app设计
  4. CreateJs的拖拽、碰撞检测函数封装
  5. 计算机u盘中文名显示乱码,教你u盘出现乱码该怎么办
  6. linux 区分flash和u盘,闪存盘和u盘的区别
  7. 章鱼未来之星获得25万美金奖励|章鱼加速器2022夏季创业营圆满落幕
  8. Avatar状态机设计
  9. linux服务器解压zip文件
  10. linux rdesktop 远程,linux下rdesktop远程联接windows系统(配合xshell工具的使用及遇到的问题)...