加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 原创教程 > NS2网络模拟与仿真

实验三 TCP与UDP模拟实验(转)

时间:2011-08-07 16:02:16  来源:  作者:

1.仿真的网络结构

  在这一部分,结合所配的网络结构图,柯老师将整个仿真场景的建立介绍的非常清楚。

  FTP联机的建立:FTP构建在TCP之上,源端使用TCP Agent产生tcp发送TCP封包,目的端使用TCPSink Agent产生sink接收TCP数据并产生回复ACK返回源端,还要用connect把这两个agent连起来。

  CBR:CBR在UDP之上,源端使用UDP Agent产生udp发送UDP封包,目的端使用Null Agent产生sink接收UDP封包,同样用connect把这两个agent连起来。

2. TCL程序代码

  这部分没什么特别需要注意的,对于每小部分代码的用途,柯老师都有介绍,跟着过一遍,加强熟悉就好。

  只是在运行时出了点问题。因为我从实验二开始,都是将代码放在/home/lily/labs中,这是一个和/home/lily/ns-allinone-2.29并行的目录,并且将ns.exe和nam.exe复制到了该目录,运行中没有什么问题(偶尔使用ns ***.tcl会提示找不到ns命令,只需改用./ns.exe ***.tcl就好)。

  当我把写好的代码保存为lab3.tcl,开始运行的时候,在set ns [new Simulator]处便中断,提示TCL没有安装好。检查并非输入错误后,把CD中的lab3.tcl复制到该文件夹,仍然提示同样的问题,再把安装时曾成功运行过的example2.tcl复制过来,仍然提示同样的问题。开始怀疑是路径出了问题,于是把CD中的lab3.tcl(保险起见,防止自己刚才写的lab3.tcl还有别的输入错误)复制到ns-allinone-2.29/ns-2.29/ns-turorial/examples目录中,运行成功。又把lab3.tcl连同ns.exe及nam.exe复制到ns-allinone-2.29目录下,仍然提示先前的问题,再进一步,复制到ns-allinone-2.29/ns-2.29目录下,成功,遂得出结论:在cygwin环境下进行ns仿真实验时,tcl脚本需要在ns-allinone-2.29/ns-2.29目录内运行。

  于是在该目录下建立mylabs文件夹,今后的学习路径改为:/home/lily/ns-allinone-2.29/ns-2.29/mylabs。打开.bashrc看了看,不知道这个问题是不是这里的环境变量设置造成的。

  另外一点:观察网络仿真的过程这个图中,有几个箭头标错位置了,同时少了一个指向队列状态的箭头。

3. Trace文件分析

  用PSPad把产生的out.er文件打开,简单看了一下,发现一个问题,不太明白:前文说TCP封包默认设置为1KB,CBR封包大小设为1KB,在out.tr中,cbr包的pkt-size为1000,但tcp包的为1040,不明白为什么不同样是1000?

  另外,简单跟了几个tcp包,工作原理如下:发端发出分组0,收端收到分组0,立刻发送ack0;发端收到ack0,开始发送分组1,2,收端收到分组1,立刻发送ack1,发端收到ack1,立刻发送分组3,4;收端收到分组2,立刻发送ack2,发端收到ack2,立刻发送分组5,6,……,即,收端收到一个分组,就立即发送ack,发端每收到一个ack,就发送2个分组,实现拥塞窗口的倍性增加。

  且,对于seq-num,tcp自1.0s开始,从0开始顺序增加;对于pkt-id,tcp自1.0s开始,与cbr共享序号增加过程。这个还没太搞明白到底代表什么意思?

4. 用awk处理out.tr

  跟着measure-delay.awk的代码过了一遍,第一次接触这种语言,并且书中对此描述甚少,有些似懂非懂,还需要慢慢加强。比如,变量使用前不需要声明,数组元素初始值默认为0?

  从输出的cbr_delay文件可以看出,cbr封包端到端的延迟在1.0s(tcp流开始的时间)之前保持恒定,之后有所增加,4.0s,tcp流结束之后又恢复为之前的恒定值。

  跟着measure-jitter.awk的代码过了一遍,开始熟悉awk,这种语言很简单,格式差不多完全可以套用,不需要花费很多心思。变量不需要预先声明,直接使用(如果不赋值就使用,则按0计),这一点要注意,由于我在读入时将flow_id变量拼写错了,后来使用该变量时又用正确的拼写方式,导致使用了一个未赋值的变量,后面的if和for的判断都不成立,费了很多周折,在很多处用printf输出测试才发现这一问题。另外,表示事件的$1是字符变量,输出时要用printf("%s",***)。对抖动的计算公式还不是太明白,不知道为什么计算传输时间差后还要除以封包id差?

  封包遗失率measure-loss.awk比较简单,过了一遍,没什么问题。

  吞吐量measure-throughput.awk也基本没什么问题,就是在某个if判断的时候把==写成了=,结果出现了错误:因为tcl脚本中指定CBR流速度为1Mbps,所以在tcp流开始之前和结束之后,cbr的吞吐量都应该是1000kbps,否则就要检查是哪里出了问题。

5. 用gnuplot画图

  感觉这一部分柯老师的介绍稍显逊色,至少他给出的运行界面不是按照他介绍的命令一步步下来的。因为是直接在终端输入各种gnuplot命令,前一步的设置如果不取消,是会一直生效的,而柯老师的例子应该不是一次运行gnuplot的结果,或者中间撤销的前面的设置,但没有给出说明,用了一点点时间上网搜索了一下,用reset可以移除先前所有的set命令的效果并恢复默认值。

  另外,在errorbars处,按照柯老师写的:

plot sin(x) with errorbars

  提示:

warning: This plot style is only for datafiles, reverting to "points"

  貌似是说没有正确使用。

  最后是把图形输出到gif格式的文件中,需要说明的是,最后的输出图形,因为没有用过plot with lines命令,貌似不应该是图3.13显示的样子。

  我这个人就这毛病,吹毛求疵,呵呵,其实这些小疏忽丝毫不影响学习进程。

  在这里给出用gnuplot画前面awk处理out.tr后得出的三个文件:cbr_delay,cbr_jitter,cbr_throughput的命令代码(图省事,不再插入图片):

set title "cbr_delay"
set xlabel "simulation time"
set ylabel "delay time"
unset key
set label "constant delay=0.038706 sec" at 0.1,0.05
set arrow from 0.5,0.05 to 0.5,0.04
set terminal gif
set output "cbr_delay.gif"
plot "cbr_delay" with linespoints
reset

set title "cbr_jitter"
set xlabel "simulation time"
set ylabel "jitter time"
unset key
set label "no jitter" at 0.1,1e-05
set arrow from 0.5,0.8e-05 to 0.5,0.2e-05
set terminal gif
set output "cbr_jitter.gif"
plot "cbr_jitter" with linespoints
reset

set title "cbr_throughput"
set xlabel "simulation time"
set ylabel "throughput"
unset key
set label "constant throughput=1000 kbps" at 0.1,880
set arrow from 0.5,900 to 0.5,980
set terminal gif
set output "cbr_throughput.gif"
plot "cbr_throughput" with linespoints

  这里我把三个文件一同输出了。采用的是事先写入文件,用批处理方式,因为之前按照柯老师给出的方式画图会有一点儿问题:

set terminal gif

set output "***.gif"

plot "***"

  这时并不能直接查看gif文件(图片查看器和画图工具都不行,但IE6可以直接查看),可能是文件仍在使用中的缘故,用reset或者set terminal X11命令结束向gif文件输出都不行,必须退出gnuplot才能查看。

  而一旦遇到问题,又要把各种设置重新输入一遍,费时费力,上网搜索了一下:以批处理方式运行,事先将命令输入到文本中(我用的是.txt文件格式),这样不仅方便代码的修改重用,而且可以直接在cygwin shell中输入

gnuplot filename

  甚至不用再启用Xwin,如果直接把图形输入到图形文件,不需要在屏幕显示的话。这时可直接查看gif文件。

  需要注意的是,如果在一个文件中实现多个图形文件的输出,记得在每段代码的结束用reset命令,否则前面的设置对后面的输出依然有效。

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
在CentOS下搭建Android 开发环境
在CentOS下搭建Androi
轻松搭建属于自己的Ubuntu发行版
轻松搭建属于自己的Ub
利用SUSE Studio 打造自己的个性化Linux发行版
利用SUSE Studio 打造
那些采用PHP技术的IT大企业
那些采用PHP技术的IT大
相关文章
    无相关信息
栏目更新
栏目热门