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
沒有留言:
張貼留言