2008年8月30日 星期六

NS-2-TCP Agent



############################################################
# set option value
############################################################
set opt(trace) out.nam                  ;# 設定nam檔為out.nam
set opt(nodes) 10                       ;# 節點個數
set opt(rtproto) DV                     ;# 路由協定
set opt(src.packet.size) 1000           ;# 來源端封包大小
set opt(src.packet.int) 0.005           ;# 來源端封包間隔

############################################################
# 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

proc finish {} {                        ;# 新增一個procedure "finish" 
  global ns nf opt                      ;# 讓這個proc能讀取這個scrpit的其他變數
  $ns flush-trace                       ;# Use new trace format 使用新的trace format

  close $nf
  exec nam $opt(trace) &
  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 tcpS0 [new Agent/TCP]                   ;# TCP Sender
$ns attach-agent $n(0) $tcpS0               ;# 將TCP Sender裝在$n(0)
set tcpR0 [new Agent/TCPSink]               ;# TCP Sink with one ACK per packet
$ns attach-agent $n(2) $tcpR0               ;# 將TCP Sink裝在$n(2)

$ns connect $tcpS0 $tcpR0                   ;# 將TCP Sender 和TCP Sink做連結

set ftp [$tcpS0 attach-app FTP]             ;# TCP上層的流量是FTP

$ns at 0.5 "$ftp start"
$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 7.5 "$ftp stop"
$ns at 9.5 "finish"                         ;# 在第9.5秒,結束模擬

$ns run                                     ;# 開始執行模擬

沒有留言: