set ns [new Simulator]
目的在創造一個 NS2 模擬的物件,主要的功能在
1. 初使化封包格式( packet format)
2. 創造一個Scheduler
set node1[$ns node]
建立一個名稱叫做 node1 的 Node
$ns simplex-link < n0 > < n1 > < bandwidth > < delay > < queuetype >
建立一條 Node n0 到 n1 的一條實體連結,並設定頻寬、延遲時間和 queue 的 type,queue 的 type 有 DropTail(a FIFO queue)、FQ、SFQ、DRR、RED、CBQ、CBQ/WRR 等 type
範例如下 :
# 在 n0 及 n1 間建立一個頻寬為2Mb, DropTail Queue 的 Link
$ns duplex-link $n0 $n1 2Mb 20ms DropTail
$ns attache-agent < node > < agent >
將一個 agent 結合到一個 node 上, agent 簡單來說也就表示一個 node 上所用的 protocol,而一開始建立Node ,預設的 agent 是 Null
範例如下:
# 創造一個TCP的Agent
set tcp [new Agent/TCP]
# TCP agent
結合到
node(n0)
$ns attach-agent $n0 $tcp
#
但光只有
TCP
是無法產生任何
Traffic,
所以我們都會再建立一些Application
的
Protocol
於
TCP
上(如
FTP)
set ftp [new Application/FTP] $ftp attach-agent $tcp
$ns connect < agent1 > < agent2 >
在兩個 agent 中建立一條 logical 的連結,不同於 Simplex-link 等方式所建立的實體連結,如 agent1 和 agent2 之間可能相隔好幾個點
$ns trace-all < tracefile >
將 ns2 模擬的內容寫回到在 < tracefile > 檔案中
範例如下:
set nf [open out.tr w]
$ns trace-all $nf
ps.
建議此指令最好放在程式的前面
(在建立
node
和
link
之前),
以免模擬結果無法完整寫回檔案。
$ns namtrace-all < tracefile >
同樣是將 ns2 模擬的內容寫回到在 < tracefile > 檔案中,不過可以放在 nam 上去顯示模擬畫面
$ns at < time > < event >
在特定的時間 < time > 讓這個事件 < event > 被執行.
範例如下 :
# 在4.5秒的時候執行 ftp
$ns at 4.5 "$ftp start"
# 在5秒時候執行我們自己所定義的 finish 函式
$ns at 5.0 "finish"
$ns run
開始執行 scheduler.
3.3.2 NS2圖形分析工具介紹
Nam
是一個能將
NS2
模擬結果視覺化顯示出來的工具,
他能顯示封包的流向和
Drop
等資訊.
執行方式:
nam < trace-file >
畫面
:
此外再介紹關於在
nam
中顯示的NS2語法(如顯示顏色、標籤等)
Node options - color,
shape,
label
# 設定 node 顏色
$node color red
# 設定 node 形狀(預設圓形)
$node shape square (circle,
square,
and hexagon)
#
設定
node
的標籤
$node label "Text"
#
設定
node
標籤的顏色
$node label-color blue
Link options
# 設定 Link 顏色
$ns duplex-link-op $n1 $n2 color green
#
設定
Link
的標籤
$ns duplex-link-op $n1 $n2 label "Text"
# 設定 Link 標籤的顏色
$ns duplex-link-op $n1 $n2 label-color blue
3.3.3 NS2產生的trace file
trace file 的檔案格式
假如我們的 tcp script 有做 trace-all 的動作,那當我們執行完 ns2 之後,就會產生一個紀錄的檔案,而這個檔案主要就是紀錄一些 packet 在我們模擬中的傳輸情況,我們可以試著去打開這個檔案來研究看看,如下:
檔案中,每行的每個欄位所代表的意義分別如下:
1 代表事件的類別
2 代表事件發生的時間
3 代表 packet 的 source node
4 代表 packet 的 destination node
5 代表 packet 的類別
6 代表 packet 的大小 (encoded in IP header)
7 代表 packet 的 flags
8 代表 connection(flow) 的 id
9 代表 source address ( node.port )
10 代表 destinations address ( node.port )
11 代表 packet 的 sequence number ( network layer protocol's )
12 代表 packet 的 id ( unique )