1. 程式人生 > >NS節點及其配置[轉載]

NS節點及其配置[轉載]

原文網址:http://www.cnblogs.com/xyl-share-happy/archive/2012/04/17/2453598.html

---------------------------------------------

1、  NS中節點分為兩類:單播(一對一通訊)和多播(一點對多點通訊)。

2、  單播節點:

建立單播節點的基本方法是呼叫Simulator類的node過程:

Set ns [new Simulator]
Set n0 [$ns node]

以上TCL指令碼建立了一個單播節點n0。單播節點的基本結構如下圖所示,它包括兩個TCL物件:地址分類器(address classifier)和埠分類器(port classifier),他們用來判斷分組的目標地址以及分組的目標Agent。

3、  配置節點:

在建立節點之前定義它的各種屬性,包括節點的地址型別、移動節點的各個網路構件的型別、ad-hoc網路中移動節點的路由協議型別、是否開啟各層(Agent、Router、MAC)的trace功能等。(具體配置引數及意義自己看相關程式)

節點屬性配置以後,建立的所有節點都具有所配置的屬性。若需要建立一個和移動節點相同的基站:$ns_ node-config –wiredRouting ON   (基站支援有線路由)

Set base_node [$ns node]

4、  分類器:(Classifier)

節點收到一個分組後,需要檢查分組的某些域(大多情況下是檢查目的地址,某些時候會檢查源地址),然後尋找與這個域的值匹配的接受者,這個工作由分類器Classifier完成。NS中有不同的Classifier物件,分別檢查分組不同部分,來完成不同的匹配、篩選工作。

Classifier的功能是從邏輯上匹配一個分組,並基於匹配的結果把該分組傳遞給相應的物件。每個Classifier都包括一個由slot number做索引的物件表。Classifier的工作是檢查收到的分組的slot number,然後把分組轉發給由該slot number索引的物件。C++中的Classifier類是各種不同型別的Classifier基類。

當分組到達時,recv(Packet *p,Handler *h)函式最先被呼叫,recv函式又呼叫find函式,find函式又呼叫了Classify函式,不同型別的分類器對Classify函式的定義不同,但各種Classify函式都會對分組做檢查後返回一個slot索引值,如果索引值是有效的,並指向一個有效的TclObject,recv()函式就會把分組傳遞給該TclObject物件,即呼叫該TclObject的recv()函式,如果索引是無效的就會清楚該分組並返回。

此外,alloc()成員函式動態地分配足夠空間來放置slot,install()成員函式用來在物件表中增加物件,而clear()函式用來刪除表中的一個物件。

AddressClassifier按照分組的目的地址進行匹配,用來支援單播分組轉發。

PortClassifier根據分組的埠進行匹配,將分組傳遞給相應的Agent物件。

Replicator也是從Classifier繼承而來,但它不使用classify()函式,它的作用是生成一個分組的多分拷貝,並把這些拷貝轉發給slot表中的所有物件。

Classify類提供的例項過程,使得使用者可以在Tcl中對classifier物件進行控制。

(dmux_是節點的PortClassifier物件,命令[$node set dmux_]會返回$node的PortClassifier物件)

set ns [new Simulator]
set node [$ns node]
set udp0 [new Agent/UDP]
set udp1 [new Agent/UDP]
set null [new Agent/Null]

$ns attach-agent $node $udp0
puts "[[$node set dmux_] slot 0]"    //查詢號碼為0的slot對應的物件名
puts "$udp0"
puts "[[$node set dmux_] findslot $udp0]"  //查詢objest所在的slot號碼,如果在表//中沒有找到該objest,返回-1
puts "[[$node set dmux_] findslot $null]"

puts "====================================="

puts "[[$node set dmux_] installNext $udp1]" //在最後一個slot後插入一個新的指向udp1的表項,並返回該表項的slot號碼
puts "[[$node set dmux_] slot 1]"
puts "$udp1"


puts "====================================="
[$node set dmux_] install 0 $udp1  //將號碼為0的slot所指的物件設為udp1
puts "[[$node set dmux_] slot 0]"  


puts "======================================"
puts "[[$node set dmux_] alloc-port $null]"    //尋找一個空閒的slot
[$node set dmux_] clear 0         //將號碼為0的slot清空
puts "[[$node set dmux_] alloc-port $null]"


puts "======================================"

puts "[[$node set dmux_] slot 0]"

$ns run

執行結果如下圖所示:


5 移動節點

移動節點由一系列的網路構建構成,包括鏈路層(LL),連線到LL上的ARP模組、介面佇列(IFq)、MAC層、網路介面等。

下圖顯示了MobileNode的結構。


無線網路模擬場景的建立:

(1)  建立一個拓補物件,設定移動節點運動的範圍。

Set topo [new Topography]
$topo load_flatgrid $opt(x) $opt(y)

(2)  配置節點,呼叫模擬器物件ns的內部過程node-config{}配置節點

(3)  建立一個God物件,動態地儲存個移動節點之間的連線關係。

Set god [create-god $val(nn)]

其中create-god方法用於建立God物件,引數$val(nn)為無線網路的移動節點數,該命令實際上是建立了一個$val(nn)*$val(nn)的矩陣,儲存個移動節點之間的連線關係。

(4)  呼叫模擬器物件ns的node{}內部過程建立移動節點。

(5)  呼叫god物件的set-dist{}內部過程,設定個節點之間的最短跳數。

(6)  利用setdest引發節點運動。