1、實驗四:亂數產生器指導教授:許子衡學生:董藝興亂數產生器 亂數產生器所產生的數值是由種子和分佈所控制的,不同的種子或者是分佈就會產生出不同的亂數。我們可以這樣思考,當一個種子和分佈決定之後,亂數產生器會產生出一個表格,表格內是由一長串不同數字所組成,當我們需要一個亂數,亂數產生器就會去選取這個表格中第一個數字,當再需要另一個亂數,亂數產生器就會去選取這個表格中第二個數字,以此類推,所以當使用種子和分佈相同時,得到的亂數會相同,若不同時,得到的亂數會不同。而在NS2中,若是種子的值為0的話,則表示每次執行程式的時候,亂數產生器都會在產生出不同的表格,也就是說每次得到的亂數都不相同。分佈有五種:P
2、areto Constant Uniform Exponential HyperExponentail Pareto Distribution與Constant:Pareto Distribution:要提供avg_ 和 shape_。set r1 new RandomVariable/Pareto$r1 use-rng$rng$r1 set avg_ 10.0$r1 set shape_ 1.2Constant:要提供平均值參數avg_ set r2 new RandomVariable/Constant$r2 use-rng$rng$r2 set avg_ 5.0Uniform與Expon
3、entialUniform distribution:要提供最小值和最大值set r3 new RandomVariable/Uniform$r3 use-rng$rng$r3 set min_ 0.0$r3 set max_ 10.0Exponential distribution:要提供平均值set r4 new RandomVariable/Exponential$r4 use-rng$rng$r4 set avg_ 5HyperexponentialHyperexponential distribution:set r5 new RandomVariable/HyperExponent
4、ial$r5 use-rng$rng$r5 set avg_ 1.0$r5 set cov_ 4.0cov_:參數:參數隨機變數的應用 set ns new Simulator#建立物件 set nd open out.tr w$ns trace-all$nd#開啟一個 trace file,用來紀錄封包傳送的過程 set nf open out.nam w$ns namtrace-all$nf#開啟一個 NAM trace file,用來觀察動態模擬過程$ns color 1 Blue$ns color 2 Red$ns color 3 Green#設定三條 color隨機變數的應用 set
5、 nflow 3#設定 TCP Flow 數目 set r1$ns node set r2$ns node#r1.r2 用來當路由器$ns duplex-link$r1$r2 1Mb 100ms DropTail$ns duplex-link-op$r1$r2 orient right#建立實體鏈路以及位置$ns queue-limit$r1$r2 10#設定 queue limit 為 10 個 Packet隨機變數的應用 for set i 1$i=$nflow incr i#設定 TCP 來源節點&TCP 目的節點#建立來源和目的節點與路由器的鏈路 set s($i)$ns node#來
6、源端 s(0)s(1)s(2)s(3)節點 set d($i)$ns node#目的端 d(0)d(1)d(2)d(3)個節點隨機變數的應用$ns duplex-link$s($i)$r1 10Mb 10ms DropTail$ns duplex-link$r2$d($i)10Mb 10ms DropTail#建立實體鏈路#=設定節點位置=$ns duplex-link-op$s(1)$r1 orient right-down$ns duplex-link-op$s(2)$r1 orient right$ns duplex-link-op$s(3)$r1 orient right-up#=隨機
7、變數的應用$ns duplex-link-op$r2$d(1)orient right-up$ns duplex-link-op$r2$d(2)orient right$ns duplex-link-op$r2$d(3)orient right-down#=設定節點位置=for set i 1$i=$nflow incr i#建立 TCP 的連線,並在 TCP 連線上建立 FTP 應用 set tcp($i)new Agent/TCP set sink($i)new Agent/TCPSink#建立 TCP&TCPSink$ns attach-agent$s($i)$tcp($i)$ns at
8、tach-agent$d($i)$sink($i)$ns connect$tcp($i)$sink($i)#node 與通訊協定兩兩聯繫起來,最後通訊協定再做連接 set ftp($i)new Application/FTP$ftp($i)attach-agent$tcp($i)$ftp($i)set type_ FTP#建立 FTP 應用,並且去跟 TCP 做 attach$tcp($i)set class_$i#TCP 封包設定顏色,比較好區別 set rng new RNG#隨機變數應用,目的讓三個 Flow 在隨機的時間開始傳送封包 0-1秒之間$rng seed 0#設定種子為 0
9、就像是每次執行都擷取不同種子隨機變數的應用#=Uniform Distribution=set RVstart new RandomVariable/Uniform$RVstart set min_ 0$RVstart set max_ 1$RVstart use-rng$rng#=Uniform Distribution=for set i 1$i=$nflow incr i#由亂數產生器去決定每一條 Flow 的起始時間 set startT($i)expr$RVstart value#設定開始的時間 puts startT($i)$startT($i)sec#顯示在視窗上隨機變數的應用
10、set endT($i)expr$startT($i)+5#設定結束時間為開始時間加五秒 puts endT($i)$endT($i)secn#顯示在視窗上#在指定時間內讓 ftp 開始傳輸,每條 flow 傳輸五秒 data$ns at$startT($i)$ftp($i)start$ns at$endT($i)$ftp($i)stop 隨機變數的應用 proc finish#結束的副函式 global ns nf nd$ns flush-trace close$nf close$nd exec nam out.nam&exit 0$ns at 7.0 finish#結束$ns run#執行