实验要求与目的
- 1人独立完成
- 学习无线网络中隐藏和暴露节点问题
- 利用 NS2 分析隐藏和暴露节点问题
- 了解 OTcl 脚本语言的基础知识
实验环境与资源
ns2仿真环境、实验代码
实验背景
隐藏节点
指处于接收节点的覆盖范围内而在发送节点的覆盖范围外的节点。由于监听不到
发送节点的数据传输,隐藏节点不受限制地发送分组到该接收节点,导致分组在接收节点处冲突
。隐藏节点可以分为隐发送节点和隐接收节点。
暴露节点
是指在发送节点覆盖范围内而在接收节点覆盖范围外的节点,暴露节点因监听
到发送节点的发送而可能延迟发送
。但它其实是在接收节点的通信范围之外,它的发送不会造成冲突
,这种延迟发送并不必要。
实验过程
隐藏节点与暴露节点问题仿真
- 之前我们完成了ns仿真环境的安装,现在我进入终端中运行本实验,命令为:
cd ~/wireless/experiments/exp7
- 运行:
ns Hidden_Terminal.tcl
(隐藏节点)ns Exposed_Terminal.tcl
(暴露节点) - 发现报错
原因:缺少模块(mUDP是UDP的延伸,除了具有UDP的功能外,还能记录所发送的包的信息。mUdpSink可以把接收到的包的信息记录到文件中) - 安装所需模块,在 ~/wireless/ns/ns-2.35 下新建
measure
文件夹,放入以下四个文件
cd ~/wireless/ns/ns-2.35
mkdir measure
5. 修改 ~/wireless/ns/ns-2.35/common 下的packet.h
,将如下代码添加到 struct hdr_cmn{}
中(注:在gedit中可以用CTRL+F进行关键字查找哦~)
cd ~/wireless/ns/ns-2.35/common
sudo gedit packet.h
-----文件添加如下代码:
int frametype_;
double sendtime;
unsigned int pkt_id_;
unsigned int frame_pkt_id_;
6. 修改 ~/wireless/ns/ns-2.35/ 下的Makefile
文件,将如下代码添加到OBJ_CC
中
cd ~/wireless/ns/ns-2.35/
sudo gedit Makefile
-----文件添加如下代码:
measure/mudp.o measure/mudpsink.o \
7. 重新 make
cd ~/wireless/ns/ns-2.35
sudo make clean
sudo make (make的时间会长一点,耐心等待)
8. 修改 ~/wireless/ns/ns-2.35/tcl/lib 下的ns-default.tcl
文件,将如下代码添加到文件最后
cd ~/wireless/ns/ns-2.35/tcl/lib
sudo gedit ns-default.tcl
-----文件添加如下代码:
Agent/mUDP set packetSize_ 1000
- 修改 mudp.cc 源代码
cd ~/wireless/ns/ns-2.35/measure
sudo gedit mudp.cc
-----文件修改如下:
修改前
修改后
- 再次运行(2)中文件,观察弹出的NAM动画窗口,观察实验结果,修改运行时间为2ms
隐藏节点
暴露节点
总结与体会
隐藏节点问题需要延迟发送
,暴露节点需要去掉
延迟发送,这两个问题都可以通过RTS/CTS
机制解决。
隐藏节点:发送方送出RTS包,告知范围内节点不要进行发送操作,目前接收方空闲,就响应CTS包。
暴露节点:某个节点侦听到邻节点的RTS而未侦听到CTS,可推测自己为暴露节点,可以发送数据。