基于Tcl語(yǔ)言配置簡(jiǎn)單網(wǎng)絡(luò)環(huán)境過(guò)程解析
1. Tcl腳本文件circle.tcl代碼注釋
#設(shè)定模擬需要的一些屬性 set val(chan) Channel/WirelessChannel set val(prop) Propagation/TwoRayGround set val(netif) Phy/WirelessPhy set val(mac) Mac/802_11 #將協(xié)議設(shè)置為 DSR 后,同時(shí)將隊(duì)列設(shè)置為 CMUPriQueue set val(ifq) CMUPriQueue set val(ll) LL set val(ant) Antenna/OmniAntenna set val(ifqlen) 50 #將節(jié)點(diǎn)個(gè)數(shù)預(yù)設(shè)為 0,待用戶(hù)輸入。此項(xiàng)要求用戶(hù)一定輸入,否則不執(zhí)行模擬。 set val(nn) 0 set val(rp) DSR #場(chǎng)景大小默認(rèn)值為 1000*1000 set val(x) 1000 set val(y) 1000 #圓的半徑缺省值為 400 set val(r) 400 #該過(guò)程用于在屏幕上打印在終端輸入 ns circle.tcl 后添加參數(shù)的格式 proc usage {} { global argv0 puts "\nusage: $argv0 \[-nn nodes\] \[-r r\] \[-x x\] \[-y y\]\n" puts "note: \[-nn nodes\] is essential, and the others are optional.\n" } #該過(guò)程用來(lái)根據(jù)用戶(hù)的輸入更改一些預(yù)設(shè)參數(shù)的值 proc getval {argc argv} { global val lappend vallist nn r x y z #argc 為參數(shù)的個(gè)數(shù),argv 為整條參數(shù)構(gòu)成的字符串 for {set i 0} {$i < $argc} {incr i} { #變量 arg 為 argv 的第 i 部分,以空格為分界 set arg [lindex $argv $i] #略過(guò)無(wú)字符“-”的字符串,一般是用戶(hù)鍵入的數(shù)字 #string range $arg m n 表示取字符串$arg 的第 m 個(gè)字符到第 n 個(gè)字符 if {[string range $arg 0 0] != "-"} continue set name [string range $arg 1 end] #更改預(yù)設(shè)變量(節(jié)點(diǎn)個(gè)數(shù),半徑,場(chǎng)景大?。? set val($name) [lindex $argv [expr $i+1]] } } #調(diào)用 getval 過(guò)程 getval $argc $argv #用戶(hù)沒(méi)有輸入?yún)?shù),只鍵入了 ns circle.Tcl,則節(jié)點(diǎn)個(gè)數(shù)認(rèn)為0 if { $val(nn) == 0 } { #打印用法 usage exit } #創(chuàng)建模擬實(shí)例 set ns [new Simulator] #設(shè)置記錄文件 set tracefd [open circle.tr w] $ns trace-all $tracefd set namtracefd [open circle.nam w] $ns namtrace-all-wireless $namtracefd $val(x) $val(y) #關(guān)閉trace文件并調(diào)用nam程序演示動(dòng)畫(huà) proc finish { } { global ns tracefd namtracefd $ns flush-trace close $tracefd close $namtracefd exec nam circle.nam & exit 0 } set topo [new Topography] $topo load_flatgrid $val(x) $val(y) create-god $val(nn) #節(jié)點(diǎn)配置。由于版本原因,addressType設(shè)為def $ns node-config -addressType def\ -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac)\ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -topoInstance $topo \ -agenttrace ON \ -routertrace ON \ -mactrace OFF \ -movementtrace OFF #初始化節(jié)點(diǎn) for {set i 0} {$i < $val(nn)} {incr i} { #創(chuàng)建節(jié)點(diǎn) set node_($i) [$ns node] $node_($i) random-motion 0 #計(jì)算節(jié)點(diǎn)位置并設(shè)置,使用三角函數(shù)進(jìn)行計(jì)算 $node_($i) set X_ [expr $val(r) * cos($i * 2 * 3.14159 / $val(nn))] $node_($i) set Y_ [expr $val(r) * sin($i * 2 * 3.14159 / $val(nn))] $node_($i) set Z_ 0 #設(shè)置在nam中移動(dòng)節(jié)點(diǎn)顯示大小,否則,nam中無(wú)法顯示節(jié)點(diǎn) $ns initial_node_pos $node_($i) [expr $val(x) / 10] } #在node_(0)節(jié)點(diǎn)上建立一個(gè)UDP代理 set tcp [new Agent/UDP] $ns attach-agent $node_(0) $tcp #在node(0)節(jié)點(diǎn)沿直徑對(duì)面的節(jié)點(diǎn)上建立一個(gè)數(shù)據(jù)接收器 set null [new Agent/Null] $ns attach-agent $node_([expr $val(nn)/2]) $null #新建CBR流量發(fā)生器,分組大小500B,間隔0.05s set cbr [new Application/Traffic/CBR] $cbr set packetSize_ 5000 $cbr set interval_ 0.05 #連接UDP和Null $cbr attach-agent $tcp $ns connect $tcp $null #在0.1s時(shí)發(fā)送數(shù)據(jù),3.0s時(shí)停止發(fā)送數(shù)據(jù),5.0s時(shí)調(diào)用finish過(guò)程 $ns at 0.1 "$cbr start" $ns at 3.0 "$cbr stop" $ns at 5.0 "finish" $ns run
2. gawk腳本代碼analysis.awk注釋
BEGIN { #設(shè)置初始變量 num_D = 0; #丟包數(shù) num_s = 0; #發(fā)送包數(shù) num_r = 0 ; #收到包數(shù) rate_drop = 0; #丟包率 sum_delay = 0; #總延遲時(shí)間 average_delay = 0; #平均延遲時(shí)間 } { #讀取trace文件記錄 event = $1; #第一列為包的操作(s為發(fā)送包,r為接收包) time = $2; #第二列為操作時(shí)間 node = $3; #第三列為節(jié)點(diǎn)號(hào) trace_type = $4; #第四列為操作層 flag = $5; #第五列為標(biāo)志位 uid = $6; #第六列為節(jié)點(diǎn)標(biāo)識(shí) pkt_type = $7; #第七列為包類(lèi)型 pkt_size = $8; #第八列為包的大小 #操作 if (event == "s" && trace_type == "AGT" && pkt_type == "cbr") { send_time[uid] = time; #創(chuàng)建數(shù)組記錄發(fā)包時(shí)間 num_s++; #記錄發(fā)送包總數(shù) } if (event == "r" && trace_type == "AGT" && pkt_type =="cbr") { delay[uid] = time - send_time[uid]; #創(chuàng)建數(shù)組記錄延遲時(shí)間 num_r++; #記錄收到包總數(shù) } if (event == "D" && pkt_type == "cbr") delay[uid] = -1; #-1表示包丟失,該包不會(huì)記入延遲時(shí)間 } END { #計(jì)算丟包數(shù)和丟包率 num_D =num_s-num_r; #丟包總數(shù) rate_drop = num_D / num_s * 100.0; #計(jì)算丟包率 #計(jì)算延遲 for ( i = 0; i < num_s; i++) {if (delay[i] >= 0) sum_delay += delay[i]; }#總延遲時(shí)間 average_delay = sum_delay / num_r; #平均延遲時(shí)間 #打印結(jié)果 printf("number of packets droped: %d \n",num_D); printf("number of packets sent: %d \n",num_s); printf("drop rate: %.3f%% \n",rate_drop); printf("average delay time: %.9f \n",average_delay); }
3. 實(shí)驗(yàn)結(jié)果
(1)
將網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)設(shè)置為12,運(yùn)行結(jié)果如下,生成了兩個(gè)記錄文件nam文件和trace文件。
此時(shí)的trace文件大小為91.8kb,nam文件大小為76.0kb。
接下來(lái)通過(guò)gawk工具對(duì)生成的trace文件進(jìn)行分析。如果沒(méi)有安裝gawk工具,使用命令sudo apt-get install gawk進(jìn)行安裝。
結(jié)果得到網(wǎng)絡(luò)模擬過(guò)程的丟包數(shù)、發(fā)包數(shù)、丟包率和平均延時(shí)。
(2)重新修改節(jié)點(diǎn)數(shù)為8,運(yùn)行結(jié)果如下,但此時(shí)文件夾中并沒(méi)有新增額外的circle.nam和circle.tr文件。
查看兩文件的屬性,發(fā)現(xiàn)大小發(fā)生了改變,說(shuō)明應(yīng)該是新建的網(wǎng)絡(luò)模擬環(huán)境的記錄文件發(fā)生了覆蓋。
同樣適用gawk對(duì)生成的trace文件進(jìn)行分析。發(fā)現(xiàn)隨著網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)的增加,導(dǎo)致丟包率和平均延時(shí)都增加了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- VMware虛擬機(jī)下的CentOS7網(wǎng)絡(luò)配置(主機(jī)無(wú)線上網(wǎng))
- Linux虛擬機(jī)修改ip地址,查看網(wǎng)關(guān),網(wǎng)絡(luò)環(huán)境配置的教程
- CentOS8.0 網(wǎng)絡(luò)配置的實(shí)現(xiàn)
- VMWare虛擬機(jī)15.X局域網(wǎng)網(wǎng)絡(luò)配置教程圖解
- VMware下Centos7橋接方式網(wǎng)絡(luò)配置步驟詳解
- 虛擬機(jī)中Linux新手入門(mén)配置IP以及重啟網(wǎng)絡(luò)
- linux網(wǎng)絡(luò)NAT配置方式詳解
- Docker 默認(rèn)bridge網(wǎng)絡(luò)中配置DNS的方法
相關(guān)文章
Git發(fā)現(xiàn)git push origin master 報(bào)錯(cuò)的解決方法
本篇文章主要介紹了Git發(fā)現(xiàn)git push origin master 報(bào)錯(cuò)的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11在idea打包并上傳到云服務(wù)項(xiàng)目流程分析
這篇文章主要介紹了在idea打包并上傳到云服務(wù)項(xiàng)目流程分析,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03云服務(wù)器+ASF實(shí)現(xiàn)全天掛卡掛時(shí)長(zhǎng)的方法
我的服務(wù)器部署在騰訊云上,系統(tǒng)為Ubuntu?amd64,下面的wget使用了萌歪大大的GH代理,所以可以直接一條一條地輸入,下面通過(guò)本文給大家分享云服務(wù)器+ASF實(shí)現(xiàn)全天掛卡掛時(shí)長(zhǎng)的方法,感興趣的朋友跟隨小編一起看看吧2024-05-05使用Keepalived如何實(shí)現(xiàn)SFTP服務(wù)的高可用
這篇文章主要介紹了使用Keepalived如何實(shí)現(xiàn)SFTP服務(wù)的高可用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04服務(wù)器(VPS)安裝WebSite Panel面板教程(圖文)
這篇文章主要為大家分享下WebsitePanel的安裝方法,WebsitePanel簡(jiǎn)稱(chēng)WSP是微軟旗下,開(kāi)源免費(fèi)的虛擬主機(jī)系統(tǒng),需要win2008 r2環(huán)境2013-12-12django項(xiàng)目、vue項(xiàng)目部署云服務(wù)器的詳細(xì)過(guò)程
這篇文章主要介紹了django項(xiàng)目、vue項(xiàng)目部署云服務(wù)器的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程詳解
這篇文章主要介紹了Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程詳解,需要的朋友可以參考下2017-01-01如何將pem證書(shū)轉(zhuǎn)換為.crt和.key與證書(shū)格式介紹
這篇文章主要介紹了如何將pem證書(shū)轉(zhuǎn)換為.crt和.key與證書(shū)格式介紹,需要的朋友可以參考下2024-01-01