Ubuntu安装NS2-计网实验Tahoe与Reno 运行机制对比分析

约定不等于承诺〃 2022-04-24 05:56 324阅读 0赞

目录

环境参数:

一、预备操作:换为国内镜像

二、安装NS2(2.35)

step1:更新系统安装包

step2:安装ns2运行时依赖包

step3:编译ns2.35安装包

step5:验证安装是否成功

三、你以为结束了?

附录 lab11.tcl


环境参数:

VMWARE Ubuntu16.04

20190418151702375.png

一、预备操作:换为国内镜像

此步操作主要是为了防止apt-get无法定位软件包以及下载速度贼慢等问题

cd /etc/apt

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70

上面是备份好的截图(多个sources.list.old);在修改source.list前先备份一下

sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

打开source.list sudo vim /etc/apt/source.list

复制源(清空原来的source.list中的内容,用下面的内容覆盖);网上有多种源,这里我用清华大学的

  1. deb-src http://mirror.neu.edu.cn/ubuntu/ xenial main restricted #Added by software-properties
  2. deb http://mirror.neu.edu.cn/ubuntu/ xenial main restricted
  3. deb-src http://mirror.neu.edu.cn/ubuntu/ xenial restricted multiverse universe #Added by software-properties
  4. deb http://mirror.neu.edu.cn/ubuntu/ xenial-updates main restricted
  5. deb-src http://mirror.neu.edu.cn/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
  6. deb http://mirror.neu.edu.cn/ubuntu/ xenial universe
  7. deb http://mirror.neu.edu.cn/ubuntu/ xenial-updates universe
  8. deb http://mirror.neu.edu.cn/ubuntu/ xenial multiverse
  9. deb http://mirror.neu.edu.cn/ubuntu/ xenial-updates multiverse
  10. deb http://mirror.neu.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
  11. deb-src http://mirror.neu.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
  12. deb http://archive.canonical.com/ubuntu xenial partner
  13. deb-src http://archive.canonical.com/ubuntu xenial partner
  14. deb http://mirror.neu.edu.cn/ubuntu/ xenial-security main restricted
  15. deb-src http://mirror.neu.edu.cn/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
  16. deb http://mirror.neu.edu.cn/ubuntu/ xenial-security universe
  17. deb http://mirror.neu.edu.cn/ubuntu/ xenial-security multiverse

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70 1

然后更新即可 sudo apt-get update

二、安装NS2(2.35)

先下载安装包:下载地址 https://www.isi.edu/nsnam/ns/ns-build.html#allinone

下载慢怎么办?用迅雷啊

step1:更新系统安装包

  1. sudo apt-get update #更新源列表
  2. sudo apt-get upgrade #更新已经安装的包
  3. sudo apt-get dist-upgrade #更新软件,升级系统

第一步之前做了,第二步有点久,第三步反正我是没做…

step2:安装ns2运行时依赖包

  1. sudo apt-get install build-essential
  2. sudo apt-get install tcl8.5 tcl8.5-dev tk8.5 tk8.5-dev #for tcl and tk
  3. sudo apt-get install libxmu-dev libxmu-headers #for nam

step3:编译ns2.35安装包

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70 2

把之前下好的安装包拖到Home目录下直接解压,这个目录其实就是 /home/用户名,放哪都行吧只要你环境变量懂配…

tar xvfz ns-allinone-2.35.tar.gz 或者右键解压

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70 3

20190418082519912.png

解压后文件夹改个名字叫ns,如上图(不改随意,环境变量把ns换成解压后的文件夹名即可)

然后cd进去之后发现有个install

cd ns 或者 cd ns-allinone-2.35(没改文件夹名字的话)

安装前先修改ls文件,位置是:ns-2.35/linkstate/ls.h

20190418083259220.png
第137行
void eraseAll() { erase(baseMap::begin(), baseMap::end()); }

改为:void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); }

保存后,再回去执行 ./install

step4:配置环境变量

sudo gedit ~/.bashrc # ~ 这个符号为当前用户根目录,即/home/用户名

最后加上,用户名用你自己的代替;因为之前改了文件夹名,下面的NS_HOME就是/home/用户名/ns了

  1. export NS_HOME=/home/用户名/ns
  2. export PATH=$PATH:$NS_HOME/bin:$NS_HOME/tcl8.5.10/unix:$NS_HOME/tk8.5.10/unix
  3. export LD_LIBRARY_PATH=$NS_HOME/otcl-1.14:$NS_HOME/lib
  4. export TCL_LIBRARY=$NS_HOME/tcl8.5.10/library:$NS_HOME/tk8.5.10/library

然后注意TCL_LIBRARY这个环境变量跟网上其他的可能不一样(后面加了:$NS_HOME/tk8.5.10/library),反正我不加后面nam命令会出错

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70 4

配置好环境变量记得 source ~/.bashrc

step5:验证安装是否成功

重新打开一个新的终端:

  1. cd ns/ns-2.35/tcl/ex/
  2. ns simple.tcl

弹出下图应该就成功了

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70 5

还要验证下nam命令

20190418084233802.png

如果nam没有的话参考下 https://blog.csdn.net/circle2015/article/details/52490582

最后再看下gunplot安装了没有,没有就sudo apt install gunplot

20190418084423375.png

安装成功后如下

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70 6

PS:如果你在安装过程中遇到了各种莫名奇妙的问题,请自行百度,毕竟……

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70 7

三、实验记录

实验报告给的lab11.tcl是错的,注意换成附录的(无力吐槽)

然后就OK了

20190418085135170.png

  1. Gnuplot>set title Tahoe
  2. Gnuplot>set xlabel time
  3. Gnuplot>set ylabel cwnd
  4. Gnuplot>set terminal gif
  5. Gnuplot>set output cwnd-Tahoe.gif
  6. Gnuplot>plot cwnd-Tahoe.tr with linespoints 1

" class="reference-link">watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70 8

" class="reference-link">watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjA1NzA4_size_16_color_FFFFFF_t_70 9

附录 lab11.tcl

  1. if {$argc != 1} {
  2. puts"Usage: ns lab11.tcl TCPversion"
  3. puts"Example:ns lab11.tcl Tahoe or ns lab11.tcl Reno"
  4. exit
  5. }
  6. set par1 [lindex $argv 0]
  7. #产生一个仿真的对象
  8. set ns [new Simulator]
  9. #打开一个trace file, 用来记录封包传送的过程
  10. set nd [open out-$par1.tr w]
  11. $ns trace-all $nd
  12. #打开一个文件用来记录cwnd 变化情况
  13. set f0 [open cwnd-$par1.tr w]
  14. #定义一个结束的程序
  15. proc finish {} {
  16. global ns nd f0 tcp
  17. #显示最后的平均吞吐量
  18. puts [format "average throughput:%.1f Kbps"\
  19. [expr [$tcp set ack_]*([$tcp set packetSize_])*8/1000.0/10]]
  20. $ns flush-trace
  21. #关闭文件
  22. close $nd
  23. close $f0
  24. exit 0
  25. }
  26. #定义一个记录的程序
  27. #每格0.01s就去记录当时的cwnd
  28. proc record {} {
  29. global ns tcp f0
  30. set now [$ns now]
  31. puts $f0 "$now [$tcp set cwnd_]"
  32. $ns at [expr $now+0.01] "record"
  33. }
  34. #产生传送结点,路由器r1,r2和接收结点
  35. set r0 [$ns node]
  36. set r1 [$ns node]
  37. set n0 [$ns node]
  38. set n1 [$ns node]
  39. #建立链路
  40. $ns duplex-link $n0 $r0 10Mb 1ms DropTail
  41. $ns duplex-link $r0 $r1 1Mb 4ms DropTail
  42. $ns duplex-link $r1 $n1 10Mb 1ms DropTail
  43. #设置队列长度为18个封包大小
  44. set queue 18
  45. $ns queue-limit $r0 $r1 $queue
  46. #根据用户的设置,指定TCP版本
  47. if {$par1 == "Tahoe"} {
  48. set tcp [new Agent/TCP]
  49. } else {
  50. set tcp [new Agent/TCP/Reno]
  51. }
  52. $ns attach-agent $n0 $tcp
  53. set tcpsink [new Agent/TCPSink]
  54. $ns attach-agent $n1 $tcpsink
  55. $ns connect $tcp $tcpsink
  56. #建立FTP应用程序
  57. set ftp [new Application/FTP]
  58. $ftp attach-agent $tcp
  59. #在0.0s时,开始传送
  60. $ns at 0.0 "$ftp start"
  61. #在10.0s时,结束传送
  62. $ns at 10.0 "$ftp stop"
  63. #在0.0s时调用record来记录TCP的cwnd变化情况
  64. $ns at 0.0 "record"
  65. #在第10.0s时调用finish来结束模拟
  66. $ns at 10.0 "finish"
  67. #执行模拟
  68. $ns run

发表评论

表情:
评论列表 (有 0 条评论,324人围观)

还没有评论,来说两句吧...

相关阅读