Download presentation
Presentation is loading. Please wait.
Published byColt Wormald Modified over 9 years ago
1
شبیه سازی شبکه توسط نرم افزار NS2 ارائه دهنده : حسین معمارزاده
2
NS یک شبیه ساز شبکه است NS می تواند سناریوهای متفاوت شبکه را شبیه سازی کند NS می تواند ترافیکهای متفاوتی را شبیه سازی کند و خروجی مورد نیاز برای اندازه گیری پارامترهایی مثل تاخیر و میزان گم شدن بسته ها را فراهم کند NS مورد نیاز است زیرا نیاز به صحت و اندازه گیری کارآیی الگوریتهمای جدید شبیه سازی در محیط واقعی هزینه بر و خطا پذیر است
4
C++ برای پردازش بسته ها ، OTcl برای سناریوها 100K خط کد C++ ، 70 K خط کد Otcl http://www.isi.edu/nsnam/ns http://www.isi.edu/nsnam/ns نسخه فعلی 2.32 قابل نصب در بیشتر UNIX ها (Linux,Solaris,Freebsd) و ویندوز (9x/NT/2000/2003)
8
اجزاء NS NS Nam(Network animator) خروجی NS را می توان مشاهده کرد مراحل پردازش پیش از شبیه سازی مراحل پردازش پس از شبیه سازی
9
NS شبکه را بصورت اتفاقات گسسته شبیه سازی می کند زمانبند NS اتفاقات را پشت سرهم اجرا می کند زمان وقوع هر اتفاق مجازی است
12
C++ برای اطلاعات پردازش هر بسته – هسته مرکزی NS سرعت بالا ، کاملا شی گرا OTCL برای کنترل ایجاد سناریوهای شبیه سازی راحتی برای کاربر عملیات دوره ای یا تحریک شده
15
Tcl/Tk Download source: A modestly up to date Tcl/Tk version Tcl-8.4.14 Tk-8.4.14Tcl-8.4.14Tk-8.4.14 web page: Tcl Developer Xchange resources. Note that while more up to date versions of Tcl/Tk are available and may work, we have only tested up through version 8.4.14.Tcl Developer Xchange resources otcl Download source: version 1.13 (released Mar 10, 2007)version 1.13 (released Mar 10, 2007) daily snapshot daily snapshot anonymous CVS (package "otcl") anonymous CVS web page: http://otcl-tclcl.sourceforge.net/otcl/.http://otcl-tclcl.sourceforge.net/otcl/ TclCL (the package formerly known as libTcl) Download source: The latest version tclcl-1.19 (released Mar 10, 2007)tclcl-1.19 (released Mar 10, 2007) daily snapshot daily snapshot anonymous CVS (package "tclcl") anonymous CVS web page: http://otcl-tclcl.sourceforge.net/tclcl/.http://otcl-tclcl.sourceforge.net/tclcl/ ns-2 Download source: most recent release (ns-2.34 released Jun 17 2009)most recent release daily snapshot, daily snapshot anonymous cvs (module "ns-2"). anonymous cvs There may be known problems with the current version of ns; please check the ns installation problems web page for patches. nam-1 (optional) Download source: most recent release (nam-1.14 released Jun 17 2009)ns installation problems web pagemost recent release daily snapshot, daily snapshot anonymous cvs (module "nam-1"). anonymous cvs web page: http://www.isi.edu/nsnam/nam/http://www.isi.edu/nsnam/nam/
20
4 گره wireless این گره ها در یک صفحه به مساحت 400*400 حرکت می کنند پروتکل روتینگ DSR شبیه سازی مکانیزم IEEE 802.11 PS
21
ATIM Window Beacon Interval ATIM Window Host A Host B Beacon BT A =2, BT B =5 power saving mode Beacon ATIM ACK active state data frame ACK Target Beacon Transmission Time (TBTT) No ATIM means no data to send or to receive
22
فایلهایی که باید تغییر کنند Mac-802_11.cc Mac-802_11.h Mac-timers.cc Mac-timers.h Mac.cc Mac.h
23
#include // #define DEBUG //#include #include /* * Force timers to expire on slottime boundries. */ // #define USE_SLOT_TIME // change wrt Mike's code #ifdef USE_SLOT_TIME #error "Incorrect slot time implementation - don't use USE_SLOT_TIME..." #endif #define ROUND_TIME()\ { \ assert(slottime);\ double rmd = remainder(s.clock() + rtime, slottime);\ if(rmd > 0.0)\ rtime += (slottime - rmd);\ else \ rtime += (-rmd);\ }
24
void MacTimer::start(double time) { Scheduler &s = Scheduler::instance(); assert(busy_ == 0); busy_ = 1; paused_ = 0; stime = s.clock(); rtime = time; assert(rtime >= 0.0); s.schedule(this, &intr, rtime); } void MacTimer::stop(void) { Scheduler &s = Scheduler::instance(); assert(busy_); if(paused_ == 0) s.cancel(&intr); busy_ = 0; paused_ = 0; stime = 0.0; rtime = 0.0; }
25
void BeaconIntervalTimer::handle(Event *) { busy_ = 0; paused_ = 0; stime = 0.0; rtime = 0.0; mac->beaconIntervalHandler(); } void ATIMWindowTimer::handle(Event *) { busy_ = 0; paused_ = 0; stime = 0.0; rtime = 0.0; mac->atimWindowHandler(); } void InitialBeaconIntervalTimer::handle(Event *) { busy_ = 0; paused_ = 0; stime = 0.0; rtime = 0.0; mac->initialBeaconIntervalHandler(); }
26
Mac802_11::beaconIntervalHandler() { in_atim_=true; totalBi_++; EnergyModel *em = netif_->node()->energy_model(); if(em != NULL && !netif_->is_on()) netif_->node_wake(); atim_tx_=true; EnergyModel *em = netif_->node()->energy_model(); if(em != NULL && !netif_->is_on()) netif_->node_wake(); } // Schedule the next beacon interval double bi_time = msec2sec(macmib_.BeaconInterval); mhBeaconInterval_.start(bi_time); mhAtimWindow_.start(msec2sec(macmib_.ATIMWindowSize)); got_beacon_=false; sendBeacon(); stay_awake_=false; bufferEntry *tmp = NULL; bufferEntry *cur = pktBuffer_.firstElement(); while(cur != NULL) { Host *h = NULL; if(cur->addr() != MAC_BROADCAST) h = &cache_[cur->addr()]; if(false && cur->age_ >= MAX_PKT_BUFFER_AGE && ( h == NULL )) {
27
if(!cur->sent_data_ && cur->p_ != 0) { hdr_cmn *ch = HDR_CMN(cur->p_); if (ch->xmit_failure_) { //ch->size() -= ETHER_HDR_LEN11; // ch->xmit_reason_ = XMIT_REASON_BUF; ch->xmit_failure_(cur->p_->copy(), ch- >xmit_failure_data_); } discard(cur->p_, DROP_MAC_RETRY_COUNT_EXCEEDED); } tmp = cur; cur = pktBuffer_.nextElement(cur); pktBuffer_.removeElement(tmp); } else { // otherwise, update the age and reset interval info //cur->age_ += static_atim_thresh_ + 1; cur->age_++; cur->sent_atim_ = false; cur->recv_ack_ = false; cur = pktBuffer_.nextElement(cur); }
28
// Reset all of these variables at the beginning of the // beacon epoch rst_cw(); if( atim_tx_) { atim_scan(); } if((pktATIM_ != 0) || atim_to_send()) if(!netif_->is_on()) netif_->node_wake(); if(!mhBackoff_.busy() && !mhSend_.busy() && !mhDefer_.busy() && tx_state_ == MAC_IDLE && atim_tx_) if(( pktATIM_ != 0)) { // If the synch_err is true, we can't send for the first DELTA // of last DELTA of the ATIM mhBackoff_.start(2 * phymib_.CWMin, is_idle());}
29
set val(chan) Channel/WirelessChannel set val(prop) Propagation/TwoRayGround set val(netif) Phy/WirelessPhy set val(mac) Mac/802_11 set val(ifq) CMUPriQueue set val(ll) LL set val(ant) Antenna/OmniAntenna set val(x) 400 ;# X dimension of the topography set val(y) 400 ;# Y dimension of the topography set val(ifqlen) 1000 ;# max packet in ifq set val(seed) 1.0 set val(adhocRouting) DSR set val(nn) 4 ;# how many nodes are simulated set val(cp) "../mobility/scene/cbr-4" set val(sc) "../mobility/scene/scen-4" set val(stop) 400 ;# simulation time set ns_[new Simulator] # setup topography object set topo[new Topography]
30
set tracefd[open wireless1-out.tr w] set namtrace [open wireless1-out.nam w] $ns_ trace-all $tracefd $ns_ namtrace-all-wireless $namtrace $val(x) $val(y) # define topology $topo load_flatgrid $val(x) $val(y) set god_ [create-god $val(nn)] # # define how node should be created # #global node setting $ns_ node-config -adhocRouting $val(adhocRouting) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ # -energyModel EnergyModel \ # -initialEnergy 1000 \ # -txpower 1 \ # -rxpower 1.2 \ # -idlepower 1.0 \
31
# -sleepower 0.001 \ -topoInstance $topo \ -agentTrace ON \ -routerTrace OFF \ -macTrace ON # # Create the specified number of nodes [$val(nn)] and "attach" them # to the channel. for {set i 0} {$i < $val(nn) } {incr i} { set node_($i) [$ns_ node] $node_($i) random-motion 0;# disable random motion } # # Define node movement model # #puts "Loading connection pattern..." source $val(cp) # # Define traffic model # puts "Loading scenario file..." source $val(sc) # Define node initial position in nam
32
for {set i 0} {$i < $val(nn)} {incr i} { # 20 defines the node size in nam, must adjust it according to your scenario # The function must be called after mobility model is defined $ns_ initial_node_pos $node_($i) 20 } #11 # Tell nodes when the simulation ends # for {set i 0} {$i < $val(nn) } {incr i} { $ns_ at $val(stop).0 "$node_($i) reset"; } $ns_ at $val(stop).0002 "puts \"NS EXITING...\" ; $ns_ halt" puts $tracefd "M 0.0 nn $val(nn) x $val(x) y $val(y) rp $val(adhocRouting)" puts $tracefd "M 0.0 sc $val(sc) cp $val(cp) seed $val(seed)" puts $tracefd "M 0.0 prop $val(prop) ant $val(ant)" puts "Starting Simulation..." $ns_ run
33
# # nodes: 4, max conn: 3, send rate: 0.33333333333333331, seed: 1 # # 1 connecting to 2 at time 2.5568388786897245 # set udp_(0) [new Agent/UDP] $ns_ attach-agent $node_(1) $udp_(0) set null_(0) [new Agent/Null] $ns_ attach-agent $node_(2) $null_(0) set cbr_(0) [new Application/Traffic/Pareto] $cbr_(0) set packetSize_ 200 $cbr_(0) set idle_time_ 50ms $cbr_(0) set burst_time_ 500ms $cbr_(0) set rate_ [expr 64*4]k $cbr_(0) attach-agent $udp_(0) $ns_ connect $udp_(0) $null_(0) $ns_ at 2.5568388786897245 "$cbr_(0) start“
34
s 3.424723606 _1_ AGT --- 0 pareto 210 [0 0 0 0] ------- [1:0 2:0 32 0] s 3.425118606 _1_ MAC --- 0 AODV 106 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) r 3.425966712 _15_ MAC --- 0 AODV 48 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) r 3.425966874 _4_ MAC --- 0 AODV 48 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) r 3.425966969 _0_ MAC --- 0 AODV 48 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) r 3.425967116 _2_ MAC --- 0 AODV 48 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) r 3.425967200 _10_ MAC --- 0 AODV 48 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) r 3.425967376 _19_ MAC --- 0 AODV 48 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) r 3.425967413 _14_ MAC --- 0 AODV 48 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) r 3.425967416 _6_ MAC --- 0 AODV 48 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) r 3.425967429 _18_ MAC --- 0 AODV 48 [0 ffffffff 1 800] ------- [1:255 -1:255 30 0] [0x2 1 1 [2 0] [1 4]] (REQUEST) s 3.426207116 _2_ MAC --- 0 ARP 86 [0 ffffffff 2 806] ------- [REQUEST 2/2 0/1] r 3.426895548 _5_ MAC --- 0 ARP 28 [0 ffffffff 2 806] ------- [REQUEST 2/2 0/1] r 3.426895625 _1_ MAC --- 0 ARP 28 [0 ffffffff 2 806] ------- [REQUEST 2/2 0/1] r 3.426895627 _15_ MAC --- 0 ARP 28 [0 ffffffff 2 806] ------- [REQUEST 2/2 0/1] s 3.433492355 _1_ MAC --- 0 pareto 288 [13a 2 1 800] ------- [1:0 2:0 30 2] r 3.435796864 _2_ MAC --- 0 pareto 230 [13a 2 1 800] ------- [1:0 2:0 30 2] s 3.435806864 _2_ MAC --- 0 ACK 38 [0 1 0 0] r 3.435821864 _2_ AGT --- 0 pareto 230 [13a 2 1 800] ------- [1:0 2:0 30 2] r 3.436111374 _1_ MAC --- 0 ACK 38 [0 1 0 0]
35
#!/usr/local/bin/perl if (@ARGV < 2) { print "Usage: packetloss.pl \n"; exit; } $infile = $ARGV[0]; $kind = $ARGV[1]; $sum_sent = 0; $num_dropped = 0; open (DATA, "<$infile") || die "Can't open $infile $!"; while ( ) { $line = $_; @x = split(' '); last if ($x[4] =~ /END/); if ($x[0] eq 's' && $x[6] =~ /$kind/) { $num_sent++; #print $line; }
36
if ($x[0] eq 'D' && $line =~ /IFQ/ && $x[6] =~ /$kind/ && $x[4]!=~ /END/) { $num_dropped++; print $line; } $dropped_ratio = 100*($num_dropped/$num_sent); print STDOUT "Percentage of $kind packets that were dropped: ${dropped_ratio}%\n"; close DATA; exit(0);
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.