2015年11月18日 星期三

NS2(1)_基礎


STEP 1:


下圖是一個要模擬出來的場景。

STEP 2:

撰寫 Tcl Script

[一] 定義網路拓墣


1. 先看種共有多少節點。然後利用 Tcl 建立這些節點出來。

共有四個節點,此時則建立出四個節點出來。

set n0 [$ns node]

set n1 [$ns node]

set n2 [$ns node]

set n3 [$ns node]

2. 建立節點之間的連線關係。

$ns duplex-link $n0 $n2 1Mb 10ms DropTail

$ns duplex-link $n1 $n2 1Mb 10ms DropTail

$ns duplex-link $n2 $n3 1Mb 10ms DropTail

[Note] : 

duplex-link 代表雙向連通

1Mb 代表頻寬

10ms 代表延遲時間

duplex-link 後面的節點編號,代表是所連接的兩個節點

3. 設定節點之間的相對關係(可有可無)

$ns duplex-link-op $n0 $n2 orient right-down

$ns duplex-link-op $n1 $n2 orient right-up

$ns duplex-link-op $n2 $n3 orient right

[Note]:

$n0 $n2 orient right-down

代表 n0 與 n2 節點的相對關係,以 n0 為原點,n2 在 n0 的右下角。
------------------------------------------------------------------------------------------------------------------------

[二] 定義所發生的事件


1. 設定節點使用的通訊協定

set udp0 [new Agent/UDP]

$ns attach-agent $n0 $udp0

[Note]:

產生一的 UDP 的通訊協定 Agent 命名他為 udp0。

這個 Agent 讓節點 n0 來做使用(attach-agent $n0 $udp0)

set udp1[new Agent/UDP]

$ns attach-agent $n1 $udp1

2. 節點通訊協定上所架設的應用程式

set cbr0 [new Application/Traffic/CBR]

$cbr0 set packetSize_ 500

$cbr0 set interval_ 0.005

 $cbr0 attach-agent $udp0

[Note]:

產一個 CBR 的應用程式。

設定 CBR 這個應用程式所發的封包大小(packetSize_)

設定 CBR 這應用程式的發封包的間距時間(interval_)

最後設定底層的通訊協定為 UDP。所以最後一行我們看到 cbr0 這個應用

程式會去連接剛剛所建立的 UDP Agent(attach-agent $udp0)

set cbr1 [new Application/Traffic/CBR]

$cbr1 set packetSize_ 500

$cbr1 set interval_ 0.005

$cbr1 attach-agent $udp1

[Note]:

當我們設定 CBR 這應用程式時,他會把封包丟到 NULL agent 去。所以要

設定 CBR 丟到哪個 NULL agent。我們設定 n3 為 null agent。

set null0 [new Agent/Null]

$ns attach-agent $n3 $null0

$ns connect $udp0 $null0

$ns connect $udp1 $null0

[Note]:

$ns connect $udp $null 不是連接$cbr $null。(udp、null 兩層才是相同層的

3. 設定開始的時間與結束時間

$ns at 0.5 “cbr0 start”

$ns at 1.0 “cbr1 start”

$ns at 4.0 “cbr0 stop”

$ns at 4.5 “cbr1 stop”

[Note]:

cbr0 這個應用程式在時間軸為 0.5 時開始運作、且在時間軸為 4.0 時聽停

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

[三] 更進一步的學習 – 標色


我們在模擬器上面看到傳輸流量他預設值都是黑色。但是我們若要判別他是從

CBR0 還是 CBR1 所來的資料時,我們就可以利用標不同顏色的技巧。就可以輕

易的從 NAM 中看出他是從哪個應用程式出來的流量。這邊就要學會怎樣幫這

些流量標上色彩。

1. 先設定群組

$udp0 set class_ 1

$udp1 set class_ 2

2. 設定該群組送出資料時所要用的顏色

$ns color 1 Blue

$ns color 2 Red
------------------------------------------------------------------------------------------------------------------------

[四]、其他基本的設定

1.建立出模擬物件

set ns [new Simulator]


2.把模擬過程寫成 nam 檔案

set nf [open out.nam w]

$ns namtrace-all $nf


3. 定義一個簡單的副程式來控制結束時所要做的事件

proc finish {} {

global ns nf

$ns flush-trace

close $nf

exec nam out.nam &

exit 0

}

[Note]:

設定兩個 global 變數 ns(建立了一個模擬-ns)、nf(建立了一個 nam 數值追蹤

-nf)。

close $nf(結束數值的追蹤)。

exec nam out.nam &(把 out.nam 開起來)。

exit()結束離開。

4. 設定模擬器結束時間與讓模擬器開始啟動

$ns at 5.0 “finish”

$ns run

[Note]:

模擬器在 0.5 秒的時候呼叫 finish 函數。

$ns run – 模擬器開始模擬(通常放在 Tcl 的最後一行)

STEP 3:

觀察剛自己所寫的結果。

1. 此時在終端機上輸入

ns <file_name>

2. ns 模擬器則會去讀取所寫好的 Tcl 開始模擬 Tcl 內所描述的情形。


set ns [new Simulator]

$ns color 1 Blue
$ns color 2 Red

set nf [open out.nam w]
$ns namtrace-all $nf

proc finish {} {
     global ns nf
     $ns flush-trace
     close $nf
     exec ./nam out.nam &
     exit 0
}

set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]

$ns duplex-link $n0 $n2 1Mb 10ms DropTail
$ns duplex-link $n1 $n2 1Mb 10ms DropTail
$ns duplex-link $n2 $n3 1Mb 10ms DropTail

$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right

set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0

set udp1 [new Agent/UDP]
$ns attach-agent $n1 $udp1

$udp0 set class_ 1
$udp1 set class_ 2

set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0

set cbr1 [new Application/Traffic/CBR]
$cbr1 set packetSize_ 500
$cbr1 set interval_ 0.005
$cbr1 attach-agent $udp1

set null0 [new Agent/Null]
$ns attach-agent $n3 $null0
$ns connect $udp0 $null0
$ns connect $udp1 $null0

$ns at 0 "puts start...."
$ns at 0.5 "$cbr0 start"
$ns at 1.0 "$cbr1 start"
$ns at 4.0 "$cbr0 stop"
$ns at 4.5 "$cbr1 stop"
$ns at 5.0 "finish"

$ns run
------------------------------------------------------------------------------------------------------------------------

@@@@@@@@@@練習題@@@@@@@@@@




set ns [new Simulator]

$ns color 1 Blue
$ns color 2 Red

set nf [open out.nam w]
$ns namtrace-all $nf

proc finish {} {
     global ns nf
     $ns flush-trace
     close $nf
     exec ./nam out.nam &
     exit 0
}

set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]

$ns duplex-link $n0 $n2 100Mb 5ms DropTail
$ns duplex-link $n1 $n2 100Mb 5ms DropTail
$ns duplex-link $n2 $n3 54Mb 10ms DropTail
$ns duplex-link $n2 $n4 54Mb 10ms DropTail

$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right-down
$ns duplex-link-op $n2 $n4 orient right

set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0

set tcp0 [new Agent/TCP]
set sink [new Agent/TCPSink]
$ns attach-agent $n1 $tcp0
$ns attach-agent $n4 $sink
$ns connect $tcp0 $sink

set ftp [new Application/FTP]
$ftp attach-agent $tcp0

$udp0 set class_ 1
$tcp0 set class_ 2

set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0


set null0 [new Agent/Null]
$ns attach-agent $n3 $null0
$ns connect $udp0 $null0
$ns connect $tcp0 $sink

$ns at 0 "puts start...."
$ns at 0.5 "$cbr0 start"
$ns at 1.0 "$ftp start"
$ns at 4.0 "$cbr0 stop"
$ns at 4.5 "$ftp stop"
$ns at 5.0 "finish"

$ns run

沒有留言:

張貼留言