最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Tcl語言配置簡單網(wǎng)絡(luò)環(huán)境過程解析

 更新時間:2020年07月29日 08:38:58   作者:Sno_W_olF  
這篇文章主要介紹了基于Tcl語言配置簡單網(wǎng)絡(luò)環(huán)境過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

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è)置為 CMUPriQueue
set val(ifq) CMUPriQueue
set val(ll) LL
set val(ant) Antenna/OmniAntenna
set val(ifqlen) 50
#將節(jié)點個數(shù)預(yù)設(shè)為 0,待用戶輸入。此項要求用戶一定輸入,否則不執(zhí)行模擬。
set val(nn) 0
set val(rp) DSR
#場景大小默認值為 1000*1000
set val(x) 1000
set val(y) 1000
#圓的半徑缺省值為 400
set val(r) 400
#該過程用于在屏幕上打印在終端輸入 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"
}
#該過程用來根據(jù)用戶的輸入更改一些預(yù)設(shè)參數(shù)的值
proc getval {argc argv} {
  global val
  lappend vallist nn r x y z
  #argc 為參數(shù)的個數(shù),argv 為整條參數(shù)構(gòu)成的字符串
  for {set i 0} {$i < $argc} {incr i} {
    #變量 arg 為 argv 的第 i 部分,以空格為分界
    set arg [lindex $argv $i]
    #略過無字符“-”的字符串,一般是用戶鍵入的數(shù)字
    #string range $arg m n 表示取字符串$arg 的第 m 個字符到第 n 個字符
    	if {[string range $arg 0 0] != "-"} continue
    set name [string range $arg 1 end]
    #更改預(yù)設(shè)變量(節(jié)點個數(shù),半徑,場景大?。?
    set val($name) [lindex $argv [expr $i+1]]
  }
}
#調(diào)用 getval 過程
getval $argc $argv
#用戶沒有輸入?yún)?shù),只鍵入了 ns circle.Tcl,則節(jié)點個數(shù)認為0
if { $val(nn) == 0 } {
  #打印用法
  usage
  exit
}

#創(chuàng)建模擬實例
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程序演示動畫
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é)點配置。由于版本原因,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é)點
for {set i 0} {$i < $val(nn)} {incr i} {
#創(chuàng)建節(jié)點
set node_($i) [$ns node]
$node_($i) random-motion 0
#計算節(jié)點位置并設(shè)置,使用三角函數(shù)進行計算
	$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中移動節(jié)點顯示大小,否則,nam中無法顯示節(jié)點
	$ns initial_node_pos $node_($i) [expr $val(x) / 10]
}

#在node_(0)節(jié)點上建立一個UDP代理
set tcp [new Agent/UDP]
$ns attach-agent $node_(0) $tcp
#在node(0)節(jié)點沿直徑對面的節(jié)點上建立一個數(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時發(fā)送數(shù)據(jù),3.0s時停止發(fā)送數(shù)據(jù),5.0s時調(diào)用finish過程
$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;	#總延遲時間
average_delay = 0;	#平均延遲時間

}
{
	#讀取trace文件記錄
	event = $1;	#第一列為包的操作(s為發(fā)送包,r為接收包)
	time = $2;	#第二列為操作時間
	node = $3;	#第三列為節(jié)點號
	trace_type = $4;	#第四列為操作層
	flag = $5;	#第五列為標志位
	uid = $6;	#第六列為節(jié)點標識
	pkt_type = $7;	#第七列為包類型
	pkt_size = $8;	#第八列為包的大小

#操作
	if (event == "s" && trace_type == "AGT" && pkt_type == "cbr")
	{	send_time[uid] = time;	#創(chuàng)建數(shù)組記錄發(fā)包時間
		num_s++;		#記錄發(fā)送包總數(shù)
	}
	if (event == "r" && trace_type == "AGT" && pkt_type =="cbr")
	{	delay[uid] = time - send_time[uid];	#創(chuàng)建數(shù)組記錄延遲時間
		num_r++;		#記錄收到包總數(shù)
	}
	if (event == "D" && pkt_type == "cbr")
		delay[uid] = -1;	#-1表示包丟失,該包不會記入延遲時間
}

END {
	#計算丟包數(shù)和丟包率
	num_D =num_s-num_r;	#丟包總數(shù)
	rate_drop = num_D / num_s * 100.0;	#計算丟包率
	
	#計算延遲
	for ( i = 0; i < num_s; i++)
		{if (delay[i] >= 0)
			sum_delay += delay[i];
		}#總延遲時間
	average_delay = sum_delay / num_r;	#平均延遲時間

	#打印結(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. 實驗結(jié)果

(1)

  將網(wǎng)絡(luò)節(jié)點數(shù)設(shè)置為12,運行結(jié)果如下,生成了兩個記錄文件nam文件和trace文件。


此時的trace文件大小為91.8kb,nam文件大小為76.0kb。



接下來通過gawk工具對生成的trace文件進行分析。如果沒有安裝gawk工具,使用命令sudo apt-get install gawk進行安裝。
  結(jié)果得到網(wǎng)絡(luò)模擬過程的丟包數(shù)、發(fā)包數(shù)、丟包率和平均延時。


(2)重新修改節(jié)點數(shù)為8,運行結(jié)果如下,但此時文件夾中并沒有新增額外的circle.nam和circle.tr文件。


查看兩文件的屬性,發(fā)現(xiàn)大小發(fā)生了改變,說明應(yīng)該是新建的網(wǎng)絡(luò)模擬環(huán)境的記錄文件發(fā)生了覆蓋。



同樣適用gawk對生成的trace文件進行分析。發(fā)現(xiàn)隨著網(wǎng)絡(luò)節(jié)點數(shù)的增加,導(dǎo)致丟包率和平均延時都增加了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解在阿里云上搭建自己的git服務(wù)器

    詳解在阿里云上搭建自己的git服務(wù)器

    本篇文章主要介紹了在阿里云上搭建自己的git服務(wù)器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 搭建hMailServer服務(wù)實現(xiàn)遠程發(fā)送郵件的圖文教程

    搭建hMailServer服務(wù)實現(xiàn)遠程發(fā)送郵件的圖文教程

    hMailServer是一個郵件服務(wù)器,通過它我們可以搭建自己的郵件服務(wù),本文主要介紹了搭建hMailServer服務(wù)實現(xiàn)遠程發(fā)送郵件的圖文教程,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • windows server 2003郵箱服務(wù)器安裝教程

    windows server 2003郵箱服務(wù)器安裝教程

    這篇文章主要為大家詳細介紹了windows server 2003郵箱服務(wù)器的安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 服務(wù)器做raid1問題集錦

    服務(wù)器做raid1問題集錦

    這篇文章主要是因為最近的服務(wù)器為了安全性考慮了做了raid1,但怕硬盤出問題,特整理了這篇文章,并根據(jù)自己的經(jīng)驗結(jié)合了下,希望能幫到需要的朋友
    2013-06-06
  • 如何通過網(wǎng)頁方式將jar包上傳到nexus的方法步驟

    如何通過網(wǎng)頁方式將jar包上傳到nexus的方法步驟

    這篇文章主要介紹了如何通過網(wǎng)頁方式將jar包上傳到nexus的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • IMail 的安裝和設(shè)置 圖文教程

    IMail 的安裝和設(shè)置 圖文教程

    IMail 的安裝和設(shè)置 圖文教程,使用IMail的朋友可以參考下。
    2011-09-09
  • 如何使用ansible批量初始化服務(wù)器

    如何使用ansible批量初始化服務(wù)器

    本文詳細介紹ansible怎么批量初始化服務(wù)器,包括ansible批量初始化服務(wù)器詳細配置和步驟,感興趣的朋友一起看看吧
    2023-12-12
  • 如何使用Linux搭建web服務(wù)器

    如何使用Linux搭建web服務(wù)器

    web?服務(wù)器提供的這些數(shù)據(jù)大部分都是文件,那么我們需要在服務(wù)器端先將數(shù)據(jù)文件寫好,并且放置在某個特殊的目錄下面,這個目錄就是我們整個網(wǎng)站的首頁,在?redhat?中,這個目錄默認在/var/www/html,這篇文章主要介紹了如何使用Linux搭建web服務(wù)器,需要的朋友可以參考下
    2023-12-12
  • Hadoop中namenode和secondarynamenode工作機制講解

    Hadoop中namenode和secondarynamenode工作機制講解

    今天小編就為大家分享一篇關(guān)于Hadoop中namenode和secondarynamenode工作機制講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 教你搭建dns服務(wù)器(圖文教程)

    教你搭建dns服務(wù)器(圖文教程)

    這篇文章主要介紹了搭建dns服務(wù)器的圖文教程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論

将乐县| 彩票| 磐安县| 朝阳县| 林口县| 虹口区| 金阳县| 长宁区| 阿克| 内丘县| 资阳市| 金川县| 开鲁县| 信丰县| 乌海市| 万宁市| 阿拉善左旗| 柳林县| 宁国市| 镶黄旗| 夹江县| 灌南县| 松江区| 纳雍县| 湄潭县| 安国市| 南涧| 尖扎县| 巴里| 晋城| 洛隆县| 淮阳县| 三亚市| 靖西县| 林周县| 遂平县| 南川市| 博爱县| 武安市| 二连浩特市| 宁德市|