数据通信实验.docx
《数据通信实验.docx》由会员分享,可在线阅读,更多相关《数据通信实验.docx(42页珍藏版)》请在冰点文库上搜索。
数据通信实验
电子科技大学计算机科学与工程学院
标准实验报告
(实验)课程名称数据通信
电子科技大学教务处制表
电子科技大学
实验报告
学生姓名:
学号:
指导教师:
实验地点:
实验时间:
实验室名称:
实验一NS2的基础使用
1.实验室名称:
主楼A2412
2.实验目的:
熟悉NS模拟软件的基本使用方法。
熟悉ubuntu的操作命令和Linux桌面环境下编辑器的使用。
三.实验原理:
NS模拟传输层的UDP协议的工作
四,实验环境
Ubuntu12.04/kernel3.5
GCC4.6.3
NS-2.33
五实验步骤
使用熟悉的Linux桌面环境下的编辑器(通常使用例如VIM,Gedit),新手推荐使用Gedit。
以下例子以使用Gedit为准。
切换到用户根目录下cd~
建立自己的文件夹mkdiryour_document_name
进入刚刚新建的文件夹cdyour_document_name
新建一个TCL脚本文件gedityour_TCL_file_name.tcl
将如下代码复制粘贴到你的文件中:
#Hereisthebeginningofthiscodefile
setval(stop)5.0;#模拟器结束时间
#新建一个NS模拟对象
setns[newSimulator]
#打开NS追踪文件
settracefile[openout.trw]
$nstrace-all$tracefile
#打开NAM追踪文件
setnamfile[openout.namw]
$nsnamtrace-all$namfile
#新建6个节点
setn0[$nsnode]
setn1[$nsnode]
setn2[$nsnode]
setn3[$nsnode]
setn4[$nsnode]
setn5[$nsnode]
#建立节点之间的链路,格式解释如下
#duplex-link双向链路可选选项(duplex-link,simple-link单向链路)
#$n0$n2表明从0号节点到2号节点
#2.0Mb申明链路传输速率,可使用Mb,Kb,b
#10ms申明链路传输延迟
#DropTail队列类型
$nsduplex-link$n0$n22.0Mb10msDropTail
#申明链路队列长度
$nsqueue-limit$n0$n210
$nsduplex-link$n1$n22.0Mb10msDropTail
$nsqueue-limit$n1$n210
$nsduplex-link$n4$n32.0Mb10msDropTail
$nsqueue-limit$n4$n310
$nsduplex-link$n3$n21.0Mb20msDropTail
$nsqueue-limit$n3$n210
$nsduplex-link$n3$n52.0Mb10msDropTail
$nsqueue-limit$n3$n510
#为NAM创建节点位置描述,以第一个为例,2号节点在0号节点的右下方
$nsduplex-link-op$n0$n2orientright-down
$nsduplex-link-op$n1$n2orientright-up
$nsduplex-link-op$n4$n3orientleft-down
$nsduplex-link-op$n3$n2orientleft
$nsduplex-link-op$n3$n5orientright-down
#新建一个UDP连接
setudp0[newAgent/UDP]
#将0号节点Agent/UDP绑定,以下类似
$nsattach-agent$n0$udp0
setnull2[newAgent/Null]
$nsattach-agent$n4$null2
#将Agent/UDP及Agent/Null节点进行连接
$nsconnect$udp0$null2
#设置Agent/UDP包大小
$udp0setpacketSize_1500
#新建另一个UDP连接
setudp1[newAgent/UDP]
$nsattach-agent$n1$udp1
setnull3[newAgent/Null]
$nsattach-agent$n5$null3
$nsconnect$udp1$null3
$udp1setpacketSize_1500
#在UDP连接上新建一个CBR应用
setcbr0[newApplication/Traffic/CBR]
$cbr0attach-agent$udp0
$cbr0setpacketSize_1500
$cbr0setrate_1.0Mb
$cbr0setrandom_null
#在第1秒,$cbr0服务开始发送
$nsat1.0"$cbr0start"
#在第4秒,$cbr0服务停止发送
$nsat4.0"$cbr0stop"
#在UDP连接上新建一个CBR应用
setcbr1[newApplication/Traffic/CBR]
$cbr1attach-agent$udp1
$cbr1setpacketSize_1500
$cbr1setrate_1.0Mb
$cbr1setrandom_null
$nsat2.0"$cbr1start"
$nsat3.0"$cbr1stop"
#定义一个'finish'过程用以处理模拟结束之后需要完成的动作
procfinish{}{
#申明使用外部变量
globalnstracefilenamfileval
$nsat$val(stop)"$nsnam-end-wireless$val(stop)"
#清空追踪区域
$nsflush-trace
#关闭trace文件
close$tracefile
#关系nam文件
close$namfile
#执行系统命令namout.nam
execnamout.nam&
exit0
}
#在val(stop)时间调用finish过程
$nsat$val(stop)"finish"
$nsat$val(stop)"puts\"done\";$nshalt"
#启动ns
$nsrun
保存退出,在当前目录下,使用nsyour_TCL_file_name.tcl
观察仿真过程
六实验结果及数据分析
网络拓扑结构图和数据传输图:
由实验代码可知:
实验通过NS模拟软件建立了六个节点,各节点均采用全双工形式,两条UDP连接(数据发送方向如图),0-2,1-2,4-3,5-3的链路速率均为2.0Mb,延迟10ms,DropTail队列形式,而2-3的链路速率只有1.0Mb,延迟10ms,DropTail队列形式。
数据包包的大小为1500字节,传输速率为1.0Mb。
具体流程截图如图:
n0通过udp0向n4开始发送数据
n2通过udp1向n5发送数据:
由于在节点n2出数据传进的速率大于传出的速率,发生丢包:
n1发送数据停止,丢包现象消失:
n0发送数据停止,流程结束:
7.新的发现
在代码中修改n2-n3的数据链路的速率,可以避免丢包现象的发生。
原因是,通过增大n2-n3的传输速率可以使n2节点的数据传出速率大于传进速率,这样数据就可以很快的被转发,从而不会因数据传出过慢而产生排队,进而丢包的现象。
实验二TCP性能仿真实验
一.实验室名称:
主楼A2412
二.实验目的:
复习TCP相关性能知识;实现TCP性能仿真实验在NS上
三.实验原理:
NS仿真TCP/IP的工作原理和工作方式。
四,实验环境
Ubuntu12.04/kernel3.5
GCC4.6.3
NS-2.33
五实验步骤
修改tcp.cc代码
Gedit~/ns-allinone-2.33/ns-2.33/tcp/tcp.cc
(将窗口阈值一半变为的窗口阈值1/3——wt_tcp1.cc)
第一处:
……
if(cwnd_slowstart=1;
if(precision_reduce_){
//halfwin=windowd()/2;//
halfwin=windowd()/3;
……
第二处:
……
}else{
inttemp;
//temp=(int)(window()/2);//
temp=(int)(window()/3);
halfwin=(double)temp;
……
第三处:
……
switch(how){
case0:
/*timeouts*/
//ssthresh_=int(window()/2);//
ssthresh_=int(window()/3);
if(ssthresh_<2)
ssthresh_=2;
cwnd_=int(wnd_restart_);
break;
case1:
……
第四处
……
case4:
/*Tahoedupacks*/
//ssthresh_=int(window()/2);//
ssthresh_=int(window()/3);
if(ssthresh_<2)
ssthresh_=2;
cwnd_=1;
break;
default:
abort();
……
返回ns根目录
执行./install执行安装(此时间较长,请耐心等待)
参照实验1代码,编写tcl代码,实现一个简单的3节点,2条链路的网络
网络如下图
这个是该网络结构对应代码
setval(stop)5.0
setns[newSimulator]
#设置用XGRAPH软件打开的跟踪文件,通常可以一条完整链路对应一个文件
setf0[openout.trw]
settracefd[openwired.trw]
$nstrace-all$tracefd
setnf[openwired.namw]
$nsnamtrace-all$nf
#record过程用以记录仿真过程,然后通过使用XGRAPH画图软件来表现
procrecord{}{
globalsinkf0
setns[Simulatorinstance]
#设置经过多少时间再次调用该过程
settime0.5
#计数sink节点接受了多少数据
setbw[$sinksetbytes_]
#设置当前时间
setnow[$nsnow]
#计算网络流量并写入文件中
puts$f0"$now[expr$bw/$time*8/1000000]"
#重置计数器
$sinksetbytes_0
#循环调用该过程
$nsat[expr$now+$time]"record"
}
$nsat0.0"record"
procfinish{}{
globalnstracefdnfvalf0
$nsat$val(stop)"$nsnam-end-wireless$val(stop)"
$nsflush-trace
close$f0
close$tracefd
close$nf
execnamwired.nam&
exit0
}
setn0[$nsnode]
setn1[$nsnode]
setn2[$nsnode]
$nsduplex-link$n0$n12Mb10msDropTail
$nsduplex-link$n1$n22Mb10msDropTail
$nsqueue-limit$n0$n110
$nsqueue-limit$n1$n210
$nsduplex-link-op$n0$n1orientright
$nsduplex-link-op$n1$n2orientright
settcp[newAgent/TCP]
$nsattach-agent$n0$tcp
setsink[newAgent/TCPSink]
$nsattach-agent$n2$sink
$nsconnect$tcp$sink
setftp[newApplication/FTP]
$ftpattach-agent$tcp
$nsat0.5"$ftpstart"
$nsat4.5"$ftpstop"
$nsat$val(stop)"finish"
$nsat$val(stop)"puts\"done\";$nshalt"
$nsrun
保存并返回
在当前目录调用nsyour_TCL_file_name.tcl观察nam效果
在当前目录调用graphout.tr-geometry800x400用Xgraph软件观察仿真过程
六实验结果及数据分析
网络拓扑结构和数据传输图:
由实验代码可知:
实验通过NS模拟软件建立了三个节点,各节点均采用全双工形式,一条TCP连接(数据发送方向如图),0-1,1-2的链路速率均为2.0Mb,延迟10ms,DropTail队列形式。
具体流程截图如图:
tcp连接启动,进入慢启动过程:
慢启动阶段,拥塞窗口大小指数增长:
达到阈值,拥塞窗口大小线性增长:
整个过程中的网络流量如图:
实验三数据通信NS2仿真实验
一.实验室名称:
主楼A2412
二.实验目的:
掌握网络设计的基本方法,设计出所要求的网络结构并实现相关功能。
三.实验原理:
请按照以下要求,根据上次实验的代码,设计一个网络拓扑,并用NAM(能用XGRAPH分析更好)查看网络流量变化并分析结果。
要求如下:
网络包含4个node,各节点之间都是以全双工的链路相连(duplex-link)。
n0和n2之间链路的带宽为2Mbps,延迟为10ms,为DropTail队列方式;n1和n2之间链路带宽为2Mbps,延迟为10ms,也为DropTail队列方式;n2和n3之间链路的带宽为1.7Mbps,延迟为20ms,为RED方式(将DropTail替换成为RED)。
n0处有一个FTP的TCP流量产生器,n1处为CBR的UDP流量产生器,n3有一个接收TCP的sink和接收UDP的NULL。
节点间位置关系如下图:
四,实验环境
Ubuntu12.04/kernel3.5
GCC4.6.3
NS-2.33
五实验步骤
相关代码如下:
代码:
setval(stop)5.5
setns[newSimulator]
$nscolor1Blue
$nscolor2Red
#设置用XGRAPH软件打开的跟踪文件,通常可以一条完整链路对应一个文件
setf0[openout.trw]
settracefd[openwired.trw]
$nstrace-all$tracefd
setnf[openwired.namw]
$nsnamtrace-all$nf
#record过程用以记录仿真过程,然后通过使用XGRAPH画图软件来表现
procrecord{}{
globalsinkf0
setns[Simulatorinstance]
#设置经过多少时间再次调用该过程
settime0.5
#计数sink节点接受了多少数据
setbw[$sinksetbytes_]
#设置当前时间
setnow[$nsnow]
#计算网络流量并写入文件中
puts$f0"$now[expr$bw/$time*8/1000000]"
#重置计数器
$sinksetbytes_0
#循环调用该过程
$nsat[expr$now+$time]"record"
}
$nsat0.0"record"
procfinish{}{
globalnstracefdnfvalf0
$nsat$val(stop)"$nsnam-end-wireless$val(stop)"
$nsflush-trace
close$f0
close$tracefd
close$nf
execnamwired.nam&
exit0
}
#新建4个节点
setn0[$nsnode]
setn1[$nsnode]
setn2[$nsnode]
setn3[$nsnode]
$nsduplex-link$n0$n22.0Mb10msDropTail
$nsduplex-link$n1$n22.0Mb10msDropTail
$nsduplex-link$n2$n31.7Mb20msRED
$nsqueue-limit$n1$n210
$nsqueue-limit$n0$n210
$nsqueue-limit$n2$n310
$nsduplex-link-op$n0$n2orientright-down
$nsduplex-link-op$n1$n2orientright-up
$nsduplex-link-op$n2$n3orientright
#UDP连接
setudp[newAgent/UDP]
$nsattach-agent$n1$udp
setnull[newAgent/Null]
$nsattach-agent$n3$null
$nsconnect$udp$null
$udpsetpacketSize_1500
$udpsetfid_2
#CBR应用
#在UDP连接上新建一个CBR应用
setcbr[newApplication/Traffic/CBR]
$cbrattach-agent$udp
$cbrsetpacketSize_1500
$cbrsetrate_1.0Mb
$cbrsetrandom_null
#在第1秒,$cbr0服务开始发送
$nsat1.0"$cbrstart"
#在第4秒,$cbr0服务停止发送
$nsat4.0"$cbrstop"
#TCP连接
settcp[newAgent/TCP]
$nsattach-agent$n0$tcp
setsink[newAgent/TCPSink]
$nsattach-agent$n3$sink
$nsconnect$tcp$sink
$tcpsetfid_1
#FTP应用
setftp[newApplication/FTP]
$ftpattach-agent$tcp
$nsat0.5"$ftpstart"
$nsat4.5"$ftpstop"
$nsat$val(stop)"finish"
$nsat$val(stop)"puts\"done\";$nshalt"
$nsrun
ns_3.tcl
六实验结果集数据分析
网络拓扑结构和数据传输图:
由实验代码可知:
实验通过NS模拟软件建立了4个节点,各节点均采用全双工形式,一条TCP连接一条UDP连接(数据发送方向如图),0-1,1-2的链路速率均为2.0Mb,延迟10ms,DropTail队列形式,而2-3的链路速率只有1.7Mb,延迟20ms,RED队列形式。
udp数据包大小1500字节,发送速率为1.0Mb。
具体流程截图如图:
tcp连接发送数据:
n2节点堵塞,发生丢包,进行流量控制:
udp发送数据,n2节点堵塞,发生丢包:
tcp拥塞控制,乘性减:
整个阶段,网络流量如图,与上面的过程分析相符:
7.新的发现
TCP协议能通过拥塞控制,流量控制和分组重传等机制,来实现可靠的数据传输服务,通过观察nam可以看出,每个TCP数据报文后面都会有接收方返回的一个ACK报文,而对于不可靠数据传输的UDP协议,则接收方不会想发送方返回一个确认报文。
TCP与UDP的区别可见一斑。
实验四数据通信NS2仿真实验
一.实验室名称:
主楼A2412
二.实验目的:
掌握网络设计的基本方法,设计出所要求的网络结构并实现相关功能。
三.实验原理:
本实验使用文本处理工具gwak对仿真生成的trace文件进行解析,处理,然后用以画图或者数据分析网络的实时情况。
四,实验环境
Ubuntu12.04/kernel3.5
GCC4.6.3
NS-2.33
五实验步骤
1,使用文本编辑工具(例如gedit,vim)新建tcl文本文件
Gedityout_tcl_file_name.tcl
2,复制一下代码到你的tcl文件中:
setns[newSimulator]
$nscolor1Blue
$nscolor2Red
setnf[openout.namw]
$nsnamtrace-all$nf
setnd[openout.trw]
$nstrace-all$nd
procfinish{}{
globalnsnfnd
$nsflush-trace
close$nf
close$nd
execnamout.nam&
exit0
}
setn0[$nsnode]
setn1[$nsnode]
setn2[$nsnode]
setn3[$nsnode]
$nsduplex-link$n0$n22Mb10msDropTail
$nsduplex-link$n1$n22Mb10msDropTail
$nsdup