http://www.pixnet.net/NS2lab
相信有許多人的專題方向大多是在做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

以上僅供大家參考,若有問題希望能不吝賜教
創作者介紹
創作者 NS2lab 的頭像
NS2lab

『網路節點模擬』 研究日誌

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


留言列表 (19)

發表留言
  • 拉茲
  • 謝謝

    你好,因為小弟本身也是在做routing的相關專題,看了本篇覺得幫助很大,謝謝你
  • 謝謝~~
    也希望如果你也有東西或問題可以提出來分享喔! ^_^

    NS2lab 於 2008/07/22 23:41 回覆

  • Tom
  • 請問這個routing
    如要設定node0 要傳pkt 要經過node1 node2 node3 到最後幕目地node4,請問要怎麼設定 ?
  • set cmd "[$node(0) set ragent_] routing $val(nn) 0 0 1 1 2 1 3 1 4 1"
    set cmd "[$node(1) set ragent_] routing $val(nn) 0 0 1 1 2 2 3 2 4 2"
    set cmd "[$node(2) set ragent_] routing $val(nn) 0 0 1 1 2 2 3 3 4 3"
    set cmd "[$node(3) set ragent_] routing $val(nn) 0 0 1 1 2 2 3 3 4 4"
    set cmd "[$node(4) set ragent_] routing $val(nn) 0 0 1 1 2 2 3 3 4 4"

    一般static routing都會給一個adjacency matrix
    必須紀錄傳送到每個節點的封包 應該下一個給誰
    試試看囉~有問題再提出來討論

    NS2lab 於 2008/09/22 22:19 回覆

  • Tom
  • 太謝謝你了
    1.
    node0 要傳pkt 要經過node1 node2 node3 到最後幕目地nod,這個flow設定要都向上面你po的設定node0 node1 node2 node3 node4

    2.
    如果我要設定兩個flow,會互相干擾嗎
    第一條 node0 要傳pkt 要經過node1 node2 node3 到最後幕目地nod4
    第二條 node3 要傳pkt 要經過node0 node1 node2 到最後幕目地nod4
    這樣我要怎麼設定

    謝謝^^
    你有msn嗎 我們互相交換一下 我也是做ns2研究者



    我的問題有點多
    想在問一下

  • 嗯可以阿~Profile有MSN
    只是不一定可以解決你的問題囉

    NS2lab 於 2008/09/23 01:20 回覆

  • chou0809
  • 您好 先謝謝您 ~在Blog 介紹有關 NOAH用法~ 受益良多~ 目前在Run NOAH for ns-2.31 有些問題~目前是否可以麻煩您 給我一些相關程式碼 如noah.cc noah.h noah.tcl (要跟您要的原因是 發現make 起來會有問題) 另外 是否您有一個完整的NOAH 的TCL 可以在NS2正常執行~ 方便的話 ~要拜託您寄送這四個程式碼給我 ~小弟的mail 是chou197589gmail .com
    麻煩您了~謝謝
  • m&amp;m
  • 要經常發表文章 最愛你了呦
  • 超有趣
  • 來喔點小防子喔看網站喔

    看一下唄
  • 雋語
  • Many a true word is spoken in jest.
  • CJ_CLUB
  • 新春愉快
  • Van
  • 如此動感的blog!!!
  • 雅茵
  • 很喜歡你的blog哦...加油唷
  • ST
  • hello
    我想跟你討論一下tcl內的與法
    不知道能不能給我你的MSN以及EMAIL
  • 咖喱
  • 加油來給你灌水
  • 加菲丁
  • 在莫非定律中有項笨蛋定律:「一個組織中的笨蛋,恆大於等於三分之二。」
  • Weak
  • 我想要請問一下,如果要設計傳送方式與傳送內容,是不是需要自己去設計一個routing模組,還是只需要寫腳本就好
  • robertachavez071
  • 樂觀進取,勇往直前,持之以恒,是克服困難的妙方。
  • robertso119
  • 天生我材必有用,千金散盡還復來。
  • colekristina152
  • 書籍是全世界的營養品,生活裡沒有書籍,就好像沒有陽光
  • mini1975
  • 道歉是人類一定必要的禮節
  • 訪客
  • 唯一提供100%滿意保證的網路賺錢平台-網址:http://345.tw/92d52