相信有許多人的專題方向大多是在做Routing的部份
有時候需要建置的網路環境,並不是像ad-hoc routing需要時常變動路徑的
例如像我們的專題:一個wireless sensor network的環境, 由數個nodes給特定幾個clusterhead, 再收集給base station
像這樣一個
hierarchical的網路環境, 他的路徑其實已經大抵決定了, 不會做任何的變動, 這時採用Static Routing得到的數據會比較正當

所以分別測試使用AODV和NOAH, 比較他們的節點存活數:

圖1. 這個是採用AODV數據畫出來的   [ 節點存活數-時間]  


圖2. 這個是採用NOAH數據畫出來的   [ 節點存活數-時間]  




看出哪裡不同了嗎?
雖然兩張圖都是以指數型態下降,但圖1在 1s~2.5s 似乎比圖2來的高一些
於是我們猜想是因為nodes沒有乖乖的照我們的方法做,偷偷的via我們非預期的節點
在NAM觀看下,的確出現了類似的情形


此問題困擾我們一段時間
因為拿掉Routing似乎也不太對
但其實我們不就是因為Dynamic Routing而困擾嗎?
改成Static Routing不就會乖乖的照著我們要的路徑走了!
在適當的網路環境採用適當的方法

那麼要怎樣來使用NOAH這個模組呢?
http://icapeople.epfl.ch/widmer/uwb/ns-2/noah/
首先,依照網頁上的step-by-step安裝上NOAH

p.s. 有時候在make clean的時候會出現
Makefile比Makefile.in還新的錯誤警告
這個時候將Makefile的內容也如同Makefile.in修改即可

在網頁上是使用NOAH的範例

# setup static routing for line of nodes

for {set i 0} {$i < $val(nn) } {incr i} {

set cmd "[$node_($i) set ragent_] routing $val(nn)"

for {set to 0} {$to < $val(nn) } {incr to} {

if {$to < $i} {

set hop [expr $i - 1]

} elseif {$to > $i} {

set hop [expr $i + 1]

} else {

set hop $i

}

set cmd "$cmd $to $hop"

}

eval $cmd

}

這個範例是在描述一個Sequential Node的環境
val(nn)則是決定有多少個節點
然後他將會一直hop到n0

如果不想要那麼複雜的寫法呢?
我們將整個for loop拿掉來看
set cmd "[$node_($i) set ragent_] routing $val(nn)"
set cmd "$cmd $to $hop"
決定整個Routing Table的是這兩個指令
分析以後發現後面那串數字是依照 to hop to hop 方式建立Rouing table的
講的還不夠清楚,我舉幾個範例:

set cmd "[$n(0) set ragent_] routing $val(nn) 0 0 1 1 2 2 3 3"
eval $cmd
set cmd "[$n(1) set ragent_] routing $val(nn) 0 2 1 1 2 0 3 0"
eval $cmd
set cmd "[$n(2) set ragent_] routing $val(nn) 0 0 1 1 2 2 3 3"
eval $cmd
set cmd "[$n(3) set ragent_] routing $val(nn) 0 0 1 1 2 2 3 3"
eval $cmd


這個網路環境有4個節點n0~n3
先看第一行
0 0 1 1 2 2 3 3   的意思是
如果n0要到n0就得經過n0
如果n0要到n1就得經過n1
如果n0要到n2就得經過n2
如果n0要到n3就得經過n3
也就是都直接跟目的地節點傳送

第三行
0 2 1 1 2 0 3 0  的意思是
如果n1要到n0要經過n2
如果n1要到n1要經過n1
如果n1要到n2要經過n0
如果n1要到n3要經過n0

以此類推

知道他的指令用法以後就非常容易使用了
如果網路環境不是很複雜使用這種方式的確很方便
但如果節點數一多,可能要多思考一下怎樣的寫法比較容易coding

以上僅供大家參考,若有問題希望能不吝賜教
arrow
arrow
    全站熱搜

    NS2lab 發表在 痞客邦 留言(19) 人氣()