NS-2 - UDP Agent
############################################################
# set option value
# 設定參數
############################################################
#利用陣利設定參數
set opt(trace) out.nam ;# 設定檔案參數
set opt(nodes) 10 ;# 節點個數
set opt(rtproto) DV ;# 路由協定
set opt(src.packet.size) 800 ;# 來源端封包大小
set opt(src.packet.int) 0.5 ;# 來源端封包間隔
set opt(udp.MMS) 100 ;# Max Sefment Size for UDP afent
set opt(udp.dest.addr) 1 ;# 還不知道這個怎麼用?
set opt(udp.dest.port) 80
set opt(udp.ttl) 6 ;# Time-To-Live
############################################################
# main program
############################################################
set ns [new Simulator] ;# 在檔案一開始會先建立一個的模擬環境
$ns rtproto $opt(rtproto) ;# 設定路由協定
set nf [open $opt(trace) w] ;# 開啟一個可寫入的檔案out.nam
$ns namtrace-all $nf ;# 將所有模擬的資料都寫入$nf這個檔案中
$ns use-newtrace ;# Use new trace format 使用新的trace format
proc finish {} { ;# 新增一個procedure "finish"
global ns nf opt ;# 讓這個proc能讀取這個scrpit的其他變數,其中opt是陣列,只要global這一個opt,陣列其它元素就可以使用
$ns flush-trace ;# 將所有的trace object 寫入 buffer
close $nf ;# 關掉out.nam檔
exec nam $opt(trace) & ;# 透過背景執行nam來開起out.nam檔
exit 0 ;# 離開
}
for {set i 0} {$i < $opt(nodes)} {incr i} {
set n($i) [$ns node] ;# 建立節點
}
for {set i 0} {$i < $opt(nodes)} {incr i} { ;# 建立一個環狀的topology
$ns duplex-link $n($i) $n([expr ($i+1)%$opt(nodes)]) 1Mb 10ms DropTail
}
set udp0 [new Agent/UDP] ;# 新增一個udp,第一個node裝UDP Agent
$udp0 set packetSize_ $opt(udp.MMS) ;# Max Segment Size for UDP agent
$udp0 set dst_addr_ $opt(udp.dest.addr) ;# 目的地IP
$udp0 set dst_port_ $opt(udp.dest.port) ;# 目的地Port number
$udp0 set ttl_ $opt(udp.ttl) ;# Time-To-Live
$ns attach-agent $n(0) $udp0 ;# 在$n(0)上裝上$udp0
set cbr0 [new Application/Traffic/CBR] ;# 先建立一個cbr,然後在udp上裝CBR
$cbr0 set packetSize_ $opt(src.packet.size) ;# 設定CBR封包大小
$cbr0 set interval_ $opt(src.packet.int) ;# 設定CBR發射封包的間隔時間
$cbr0 attach-agent $udp0 ;# 把cbr0架在udp0上,CBR應用程式是在UDP協定上運作的
set null0 [new Agent/Null] ;# 先建立一個NULL特性,在第3個node上裝Null Agent,NULL Agent是用來drop packet的
$ns attach-agent $n(2) $null0 ;# 把null0建立在n(2)上
$ns connect $udp0 $null0 ;# 將來源端和目的端連結起來
$ns at 0.5 "$cbr0 start" ;# 在第0.5秒開始送封包
$ns rtmodel-at 1.5 down $n(1) ;# 在第1.5秒$n(1)停掉所有的interface
$ns rtmodel-at 3.5 up $n(0) $n(1) ;# 在第2.5秒,將$n(0)和$n(1)的介面up
$ns rtmodel-at 5.5 up $n(1) $n(2) ;# 在第2.5秒,將$n(1)和$n(2)的介面up
$ns at 9.5 "finish" ;# 在第9.5秒,結束模擬
$ns run ;# 開始執行模擬
沒有留言:
張貼留言