gedit打开/home/*user*/.bashrc,分别加入下面代码:(*user*换成自己的相应目录)在. bashrc加入(根据安装完成后终端的提示来设置环境变量): PATH=\/bin:/usr/local/ns-allinone-2.35/tcl8.5.10/unix:/usr/local/ns-allinone-2.35/tk8.5.10/unix \LD_LIBRARY_PATH=\/otcl-1.14:/usr/local/ns-allinone-2.35/lib\TCL_LIBRARY=\/tcl8.5.10/library \编辑完成,source /home/*user*/.bashrc(注意前提是要用root登陆,不然的话输入$sudo -s,以root角色登陆。) source命令是把文件中的命令执行一次的意思。
(5)验证安装
在重启后的终端中输入ns命令,出现%,说明安装成功,如图所示:
2.NS2网络协议仿真
这个实验主要是观察链路状态发生变化时,使用静态路由和动态路由的差异性。实验的结构如图1所示,节点n0会使用ftp将数据传送到n5,传送时间为0.1s~3.0s,在1.0s时,链路n1到n4发生问题,所以数据无法从n1到n4之间的链路传送。在2.0s时,链路n1到n4问题解决,数据有可以从此路传送。
图1 网络拓扑结构
TCL程序:
10
11
静态路由执行方法 1、运行TCl脚本
2、运行Nam程序,观察结果
(1)使用静态路由,传送数据从n0到n5的路径是n0----n1----n4---n5.如图2-1
图2-1
图2-2
12
(2)在1.0s时,n1到n4链路发生问题,因为使用静态路由算法,路由表不会更新,所以数据无法发送到n4. 如图2-2
(3)在3.0s时,n1到n4链路的问题得到解决,所以数据又按路径n0----n1----n4---n5传送到n5. 如图2-3
图2-3
动态路由执行方式 1、运行TCL脚本
2、运行nam程序,观察结果
(1)因为使用动态路由方式,所以一开始,节点与节点之间必须互换信息,以建立路由表,如图3-1
图3-1
图3-2
(2)路由表建立后,数据传送的路径是n0----n1----n4---n5.如图3-2
(3)在1.0s时,n1到n4链路发生问题,因为使用动态路由算法,所以节点互相通信,因此n0到n5数据发送的路径更新为n0----n1----n2---n3----n5. 如图3-4
13
图3-3
图3-4
(4)在3.0s时,n1到n4之间的链路恢复,节点互相通信后,路由表更新,因此n0到n5
数据发送的路径也恢复为n0----n1---n4----n5.如图3-5
图3-4
3.修改NS2核心模块
(1)预设实验结果:修改队列的丢包策略,当接收队列中未丢包,数据包正常入队列,一旦出现队列丢包现象,则暂停接受数据包,一直到队列为空再接受。
(2)在NS-2 核心模块中找到队列的丢包模块(在ns-allinone-2.35/ns-2.35/queue 路径下)
a.修改drop-tail.h 文件,在类DropTail 中添加一个布尔变量isdrop(初始值为
false),用于判断队列是否已经发生丢包,再添加一个int 型变量n(初始值为0)用于记录发生丢包时不接受包的个数。
b.在入队函数enque 中,判断如下: if(如果发生队列已满) { 14