ns2 第一次模擬

Posted by summer on October 4, 2021

ns2 的模擬檔案副檔名為 .tcl

首先新增檔案,這裡取名為 vegas.tcl

基礎設定

首先新增一個模擬物件

1
2
#create a simulator object
set ns [new Simulator]

然後為模擬結果產生一個輸出檔,並將結果導向檔案

1
2
3
#open a output file 
set nf [open out.nam w]
$ns namtrace-all $nf

以 w 方式開啟 out.nam 並附給 nf 變數 並將模擬物件 ns 產生的資料寫入 nf

加入一個 procedure finish 在結束時關閉輸出檔

1
2
3
4
5
6
proc finish {} {
	global ns nf
	$ns flush-trace
	close $nf
	exit 0
}

加入節點

新增四個變數並宣告成節點

1
2
3
4
5
6
7
set s1 [$ns node]

set g1 [$ns node]

set g2 [$ns node]

set r1 [$ns node]

連接節點

四個節點用三條線串起來

宣告三條 link

1
2
3
4
5
6
#create a duplex link connent s1 and g1 with bandwidth $accBw ,a delay $accDelay and a DropTail queue 
$ns duplex-link $s1 $g1 $accBw $accDelay DropTail

$ns duplex-link $g2 $r1 $accBw $accDelay DropTail 

$ns duplex-link $g1 $g2 $conBw $conDelay DropTail

設定 link 的時候用到了變數,需要在上方宣告變數

1
2
3
4
5
6
7
8
9
10
11
12
13
set accBw 2Mb

set accDelay 10ms

set conBw 1Mb

set conDelay 10ms

set qLenLimit 100

set pktSize 1000bytes

set advWndUpbnd 100

很神奇,變數是帶單位的

設定 queue limit

1
2
3
4
5
#set queue limit

$ns queue-limit $g1 $g2 $qLenLimit

$ns queue-limit $g2 $g1 $qLenLimit

宣告 Agent

宣告兩個 Agent ,vegas1 和 sink1

1
2
3
4
5
6
7
8
9
10
11
12
13
#create a tcp vegas agent  
#set packetsize and window
#attach to s1

set vegas1 [new Agent/TCP/Vegas]
$vegas1 set packetSize_ $pktSize
$vegas1 set window_ $advWndUpbnd
$ns attach-agent $s1 $vegas1

#create a TCPSink attach to $r1

set sink1 [new Agent/TCPSink]
$ns attach-agent $r1 $sink1

宣告 Application

1
2
3
4
#create a Application 

set ftp1 [new Application/FTP]
$ftp1 attach-agent $vegas1

連結事件

ns2 資料是由 Agent 發出與接收的

1
$ns connect $vegas1 $sink1

設定開始與結束時間

1
2
3
4
5
$ns at 0.5 "$ftp1 start"
$ns at 4.5 "$ftp1 stop"

$ns at 5.0 "finish"
$ns run

參考資料