数据通信实验电子科技大学Word文档下载推荐.docx
《数据通信实验电子科技大学Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据通信实验电子科技大学Word文档下载推荐.docx(36页珍藏版)》请在冰豆网上搜索。
#新建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"
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"
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
修改tcp.cc代码
Gedit~/ns-allinone-2.33/ns-2.33/tcp/tcp.cc
(将窗口阈值一半变为的窗口阈值1/3——wt_tcp1.cc)
第一处:
……
if(cwnd_<
ssthresh_)
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*/
cwnd_=1;
default:
abort();
返回ns根目录
执行./install执行安装(此时间较长,请耐心等待)
参照实验1代码,编写tcl代码,实现一个简单的3节点,2条链路的网络
网络如下图
这个是该网络结构对应代码
setval(stop)5.0
#设置用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"
globalnstracefdnfvalf0
$nsflush-trace
close$f0
close$tracefd
close$nf
execnamwired.nam&
$nsduplex-link$n0$n12Mb10msDropTail
$nsduplex-link$n1$n22Mb10msDropTail
$nsqueue-limit$n0$n110
$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"
保存并返回
在当前目录调用nsyour_TCL_file_name.tcl观察nam效果
在当前目录调用graphout.tr-geometry800x400用Xgraph软件观察仿真过程
网络拓扑结构和数据传输图:
实验通过NS模拟软件建立了三个节点,各节点均采用全双工形式,一条TCP连接(数据发送方向如图),0-1,1-2的链路速率均为2.0Mb,延迟10ms,DropTail队列形式。
tcp连接启动,进入慢启动过程:
慢启动阶段,拥塞窗口大小指数增长:
达到阈值,拥塞窗口大小线性增长:
整个过程中的网络流量如图:
实验三数据通信NS2仿真实验
掌握网络设计的基本方法,设计出所要求的网络结构并实现相关功能。
请按照以下要求,根据上次实验的代码,设计一个网络拓扑,并用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。
节点间位置关系如下图:
相关代码如下:
代码:
setval(stop)5.5
$nscolor1Blue
$nscolor2Red
#设置用XGRAPH软件打开的跟踪文件,通常可以一条完整链路对应一个文件
#record过程用以记录仿真过程,然后通过使用XGRAPH画图软件来表现
globalsinkf0
#计数sink节点接受了多少数据
setbw[$sinksetbytes_]
#设置当前时间
$nsat[expr$now+$time]"
globalnstracefdnfvalf0
$nsflush-trace
close$f0
close$tracefd
close$nf
execnamwired.nam&
exit0
#新建4个节点
$nsduplex-link$n2$n31.7Mb20msRED
$nsqueue-limit$n2$n310
$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服务开始发送
$cbrstart"
#在第4秒,$cbr0服务停止发送
$cbrstop"
#TCP连接
$nsattach-agent$n3$sink
$tcpsetfid_1
#FTP应用
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仿真实验
掌握网络设计的基本方法,设计出所要求的网络结构并实现相关功能。
本实验使用文本处理工具gwak对仿真生成的trace文件进行解析,处理,然后用以画图或者数据分析网络的实时情况。
1,使用文本编辑工具(例如gedit,vim)新建tcl文本文件
Gedityout_tcl_file_name.tcl
2,复制一下代码到你的tcl文件中:
setnf[openout.namw]
setnd[openout.trw]
$nstrace-all$nd
globalnsnfnd
close$nd
execnamout.nam&
$nsduplex-link$n0$n22Mb10msDropTail
$nsqueue-limit$n2$n3100
$nsduplex-link