无线网络技术实验七——隐藏节点和暴露节点仿真实验
实验要求与目的
1人独立完成
学习无线网络中隐藏和暴露节点问题
利用 NS2 分析隐藏和暴露节点问题
了解 OTcl 脚本语言的基础知识
实验环境与资源
ns2仿真环境 ns2.35、Ubuntu 18.04、实验代码
实验背景
隐藏节点指处于接收节点的覆盖范围内而在发送节点的覆盖范围外的节点。由于监听不到发送节点的数据传输,隐藏节点不受限制地发送分组到该接收节点,导致分组在接收节点处冲突。隐藏节点可以分为隐发送节点和隐接收节点。
暴露节点是指在发送节点覆盖范围内而在接收节点覆盖范围外的节点,暴露节点因监听到发送节点的发送而可能延迟发送。但它其实是在接收节点的通信范围之外,它的发送不会造成冲突,这种延迟发送并不必要。
实验过程
隐藏节点与暴露节点问题仿真
之前我们完成了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. 修改 ~/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
cd ~/wireless/ns/ns-2.35/measure
sudo gedit mudp.cc
-----文件修改如下:
修改前
修改后
cd ~/wireless/ns/ns-2.35
sudo make clean
sudo make (make的时间会长一点,耐心等待)
// 此时可以输 ns 看命令能否使用 如果时候发现 ns 命令不存在,但是输入 nam 还是会有弹窗那么我们可以这样,进行安装:
cd ~/wireless/ns
sudo ./install
10. 再次运行(2)中命令,观察弹出的NAM动画窗口,观察实验结果,修改运行时间为2ms
隐藏节点
暴露节点
总结与体会
隐藏节点问题需要延迟发送,暴露节点需要去掉延迟发送,这两个问题都可以通过RTS/CTS机制解决。
隐藏节点:发送方送出RTS包,告知范围内节点不要进行发送操作,目前接收方空闲,就响应CTS包。
暴露节点:某个节点侦听到邻节点的RTS而未侦听到CTS,可推测自己为暴露节点,可以发送数据。