1. 程式人生 > 其它 >無線網路技術實驗七——隱藏節點和暴露節點模擬實驗

無線網路技術實驗七——隱藏節點和暴露節點模擬實驗

實驗要求與目的

  1. 1人獨立完成
  2. 學習無線網路中隱藏和暴露節點問題
  3. 利用 NS2 分析隱藏和暴露節點問題
  4. 瞭解 OTcl 指令碼語言的基礎知識

實驗環境與資源

ns2模擬環境、實驗程式碼

實驗背景

隱藏節點指處於接收節點的覆蓋範圍內而在傳送節點的覆蓋範圍外的節點。由於監聽不到傳送節點的資料傳輸,隱藏節點不受限制地傳送分組到該接收節點,導致分組在接收節點處衝突。隱藏節點可以分為隱傳送節點和隱接收節點。
暴露節點是指在傳送節點覆蓋範圍內而在接收節點覆蓋範圍外的節點,暴露節點因監聽到傳送節點的傳送而可能延遲傳送。但它其實是在接收節點的通訊範圍之外,它的傳送不會造成衝突,這種延遲傳送並不必要。

實驗過程

隱藏節點與暴露節點問題模擬

  1. 之前我們完成了ns模擬環境的安裝,現在我進入終端中執行本實驗,命令為:cd ~/wireless/experiments/exp7
  2. 執行:ns Hidden_Terminal.tcl(隱藏節點) ns Exposed_Terminal.tcl(暴露節點)
  3. 發現報錯

    原因:缺少模組
  4. 安裝所需模組,在 ~/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 \
  1. 如果許可權不夠不能儲存,可以通過以下命令更改許可權
sudo chattr -i Makefile
sudo chmod 777 Makefile
  1. 修改 ~/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


9. 修改 mudp.cc 原始碼

cd ~/wireless/ns/ns-2.35/measure
sudo gedit mudp.cc

-----檔案修改如下:
修改前

修改後

  1. 再次執行(2)中檔案,觀察彈出的NAM動畫視窗,觀察實驗結果,修改執行時間為2ms
    隱藏節點

    暴露節點

總結與體會

隱藏節點問題需要延遲傳送,暴露節點需要去掉延遲傳送,這兩個問題都可以通過RTS/CTS機制解決。
隱藏節點:傳送方送出RTS包,告知範圍內節點不要進行傳送操作,目前接收方空閒,就響應CTS包。
暴露節點:某個節點偵聽到鄰節點的RTS而未偵聽到CTS,可推測自己為暴露節點,可以傳送資料。