Tcl 언어 설정 기반 간단 한 네트워크 환경 프로 세 스 분석
#
set val(chan) Channel/WirelessChannel
set val(prop) Propagation/TwoRayGround
set val(netif) Phy/WirelessPhy
set val(mac) Mac/802_11
# DSR , CMUPriQueue
set val(ifq) CMUPriQueue
set val(ll) LL
set val(ant) Antenna/OmniAntenna
set val(ifqlen) 50
# 0, 。 , 。
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
proc usage {} {
global argv0
puts "
usage: $argv0 \[-nn nodes\] \[-r r\] \[-x x\] \[-y y\]
"
puts "note: \[-nn nodes\] is essential, and the others are optional.
"
}
#
proc getval {argc argv} {
global val
lappend vallist nn r x y z
#argc ,argv
for {set i 0} {$i < $argc} {incr i} {
# arg argv i ,
set arg [lindex $argv $i]
# “-” ,
#string range $arg m n $arg m n
if {[string range $arg 0 0] != "-"} continue
set name [string range $arg 1 end]
# ( , , )
set val($name) [lindex $argv [expr $i+1]]
}
}
# getval
getval $argc $argv
# , ns circle.Tcl, 0
if { $val(nn) == 0 } {
#
usage
exit
}
#
set ns [new Simulator]
#
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)
# trace 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)
# 。 ,addressType 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
#
for {set i 0} {$i < $val(nn)} {incr i} {
#
set node_($i) [$ns node]
$node_($i) random-motion 0
# ,
$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
# nam , ,nam
$ns initial_node_pos $node_($i) [expr $val(x) / 10]
}
# node_(0) UDP
set tcp [new Agent/UDP]
$ns attach-agent $node_(0) $tcp
# node(0)
set null [new Agent/Null]
$ns attach-agent $node_([expr $val(nn)/2]) $null
# CBR , 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 ,3.0s ,5.0s 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 {
#
num_D = 0; #
num_s = 0; #
num_r = 0 ; #
rate_drop = 0; #
sum_delay = 0; #
average_delay = 0; #
}
{
# trace
event = $1; # (s ,r )
time = $2; #
node = $3; #
trace_type = $4; #
flag = $5; #
uid = $6; #
pkt_type = $7; #
pkt_size = $8; #
#
if (event == "s" && trace_type == "AGT" && pkt_type == "cbr")
{ send_time[uid] = time; #
num_s++; #
}
if (event == "r" && trace_type == "AGT" && pkt_type =="cbr")
{ delay[uid] = time - send_time[uid]; #
num_r++; #
}
if (event == "D" && pkt_type == "cbr")
delay[uid] = -1; #-1 ,
}
END {
#
num_D =num_s-num_r; #
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; #
#
printf("number of packets droped: %d
",num_D);
printf("number of packets sent: %d
",num_s);
printf("drop rate: %.3f%%
",rate_drop);
printf("average delay time: %.9f
",average_delay);
}
3.실험 결과(1)
네트워크 노드 수 를 12 로 설정 하고 실행 결 과 는 다음 과 같 습 니 다.두 개의 기록 파일 nam 파일 과 trace 파일 을 생 성 했 습 니 다.
이 때 trace 파일 크기 는 91.8kb 이 고 nam 파일 크기 는 76.0kb 입 니 다.
다음은 gawk 도 구 를 통 해 생 성 된 trace 파일 을 분석 합 니 다.gawk 도구 가 설치 되 어 있 지 않 으 면 명령 sudo apt-get install gawk 를 사용 하여 설치 합 니 다.
그 결과 네트워크 시 뮬 레이 션 과정의 하 도 급 수,하 도 급 수,하 도 급 률 과 평균 지연 을 얻 었 다.
(2)노드 수 를 8 로 다시 수정 하고 실행 결 과 는 다음 과 같 습 니 다.그러나 이 폴 더 에는 추가 적 인 circle.nam 과 circle.tr 파일 이 추가 되 지 않 았 습 니 다.
두 파일 의 속성 을 보 니 크기 가 바 뀌 었 습 니 다.새로 만 든 네트워크 시 뮬 레이 션 환경의 기록 파일 이 겹 쳐 졌 음 을 설명 합 니 다.
생 성 된 trace 파일 을 gawk 에 적용 하여 분석 합 니 다.네트워크 노드 수가 증가 함 에 따라 하 도 급 률 과 평균 지연 시간 이 모두 증가 한 것 을 발견 했다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Macintosh에서 tcl/tk 그대로도 움직이는데 함정 5 개에 끼웠다.tcl/tk의 스크립트를 양으로 기동하는 것은 20년만 정도. 오른쪽도 왼쪽도 모르는 채, 어느 책의 스크립트가 에러가 되기 때문에 자료를 정리. Macintosh의 10.9(?) 이후에는 Tcl/Tk가 도입이 끝났...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.