ns2
دانلود فایل
http://www.uplooder.net/cgi-bin/dl.cgi?key=e61ab064f560b2b16951a1f0207006b4
+ نوشته شده در جمعه سی ام فروردین ۱۳۹۲ ساعت 8:28 توسط قطره
|
http://www.uplooder.net/cgi-bin/dl.cgi?key=e61ab064f560b2b16951a1f0207006b4
در این مثال می خواهیم یک شبکه با 4 نود به نام های n1 ، n2 ، n3 و n4 پیاده سازی کنیم که لینک ارتباطی بین n0 و n2 و همچنین n1 و n2 از نوع duplex با پهنای باند 2 مگابیت در ثانیه و تاخیر 10 میلی ثانیه است و لینک duplex بین n2 و n3 دارای پهنای باند 1.7 مگابیت در ثانیه و تاخیر 20 میلی ثانیه است .
هر نود از یک صف از نوع DropTail با حداکثر اندازه 10 استفاده میکند.
n0 حاوی یک عامل tcp و n1 حاوی یک عامل tcp-sink است .
عامل هاي شبکه نشانگر نقاط انتهايي يک اتصال لايه شبکه اند که بسته هاي اين لايه توليد کرده و در طرف ديگر تحويل لايه متناظر مي دهند . بخشي از عامل توسط OTCL و بخشي از آن به زبان C++ طراحي شده است . عامل در پياده سازي پروتکل هاي لايهاي مختلف استفاده ميشود .
) به طور پیش فرض اندازه پکت هایی که یک عامل tcp میتواند تولید کند 1 کیلو بایت است .
یک عامل tcp sink پکت های Ack تولید و به فرستنده پیام ارسال میکند و پکت هاب دریافت شده را آزاد میکند . (
جزئیات بیشتر را در حین نوشتن اسکریپت ارائه خواهم داد .
خوب نوشتن اولین اسکریپت Tcl برای پیاده سازی توپولوژی شکل 1-1 را شروع میکنیم:
میتوانید اسکریپت هایی Tcl را در هر برنامه ویرایشگر متن بنویسید.
nano ns_example.tcl
کد:#Create a simulator object set ns [new Simulator] #Define different colors for data flows (for NAM) $ns color 1 Blue $ns color 2 Red #Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #Define a 'finish' procedure proc finish {} { global ns nf $ns flush-trace #Close the NAM trace file close $nf #Execute NAM on the trace file exec nam out.nam & exit 0 } #Create four nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] #Create links between the nodes $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail #Set Queue Size of link (n2-n3) to 10 $ns queue-limit $n2 $n3 10 #Give node position (for NAM) $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right #Monitor the queue for link (n2-n3). (for NAM) $ns duplex-link-op $n2 $n3 queuePos 0.5 #Setup a TCP connection set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1 #Setup a FTP over TCP connection set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP #Setup a UDP connection set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null $udp set fid_ 2 #Setup a CBR over UDP connection set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR $cbr set packet_size_ 1000 $cbr set rate_ 1mb $cbr set random_ false #Schedule events for the CBR and FTP agents $ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop" #Detach tcp and sink agents (not really necessary) $ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink" #Call the finish procedure after 5 seconds of simulation time $ns at 5.0 "finish" #Print CBR packet size and interval puts "CBR packet size = [$cbr set packet_size_]" puts "CBR interval = [$cbr set interval_]" #Run the simulation $ns run
و برای اجرای آن دستور زیر را اجرا کنید :
ns ns_example.tcl
توضیحات ns_example.tcl :
قبل از هر کار در هر اسکریپت tcl برای NS2 باید یک شیئ شبیه ساز ایجاد کرد. این کار با دستور زیر انجام می شود :
این دستور یک شیئ شبیه ساز NS را ایجاد می کند و آنرا به متغیر NS منصوب می کند .کد:set ns [new Simulator]
با استفاده از روال ها و خصوصیات این شیئ می توان توپولوژی شبکه را پیاده سازی کرد.
به عنوان مثال شیئ شبیه ساز دارای متدهایی است که عملیات زیر را انجام می دهند :
• گره ها و خطوط ارتباطی بین آنها را ایجاد می کند .
• اشیا مربوط به عناصر شبکه ( با attache-agent ) را به یکدیگر متصل می کند .
• ارتباط بین منابع ترافیکی و دریافت کننده ها را برقرار می کند .
• پارامتر های نمایش توسط نرم افزار NAM را مشخص می کند .
(NAM ابزاری برای نمایش گرافیکی شبیه ساز NS است و محیطی را در اختیار می گذارد که بتوان با استفاده از آن حرکت واقعی بسته های داده ای را مشاهده کرد. )
این خطوط برای تعیین رنگ جریان پکت ها استفاده می شود. Syntax کلی آن به صورت زیر است :کد:$ns color 1 Blue $ns color 2 Red
در اینجا جریان پکت ها با fid شماره 1 با رنگ آبی و جریان پکت ها با fid شماره 2 با رنگ قرمز نمایش داده می شود.کد:$ns color fid color
این بخش برای تنظیم محیط گرافیکی نمایش شبیه ساز ( NAM ) است و تاثیری در شبیه سازی ندارد .
NAM برای داده های ترسیم نیاز به یک فایل باز دارد که در اولین خط کد این بخش فایل out.nam رابرای نوشتن باز کرده و نام nf را به آن می دهیم . در خط دوم مشخص میکنیم که شیئ شبیه ساز ، همه ی داده های شبیه سازی که به NAM مربوط می شود را در فایل out.nam بنویسد.
کد:set nf [open out.nam w] $ns namtrace-all $nf
تعریف روال پایان :یک روال پایان تعریف کردیم تا در خاتمه کار با فراخوانی آن از شبیه ساز خارج شویم.کد:proc finish {} { global ns nf $ns flush-trace #Close the NAM trace file close $nf #Execute NAM on the trace file exec nam out.nam & exit 0 }
در این مرحله 4 نود شبکه ایجاد می کنیم . هر نود را با ایجاد یک شیئ جدید با دستور $node تولید کرده و آنرا با دستور set به متغیر های n0 تا n4 اختصاص می دهیم.
کد:set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node]
اکنون نوبت به ایجاد لینک ارتباطی بین نود ها رسیده است :
پس لینک های ارتباطی را با مشخصات داده شده ( پهنای باند – تاخیر – نوع صف ) تعریف می نماییم.کد:$ns duplex-link $node1 $node2 Bandwidth Delay Queue-type
همچنین می توان اندازه اندازه صف هر لینک را محدود کرد :کد:$ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail
اینجا اندازه لینک ارتباطی بین نود های n2 و n3 را 10 محدود کردیم .کد:$ns queue-limit $n2 $n3 10
برای بهبود شمای توپولوژی شبکه بهتر است مکان نودها را مشخص کرد .
کد:$ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right
برای مشاهده ی تاثیر این خطوط بر ظاهر شبیه ساز پیشنهاد میکنم اسکریپت را بدون این خطوط نیز اجرا کنید .
امکان مانیتور کردن پرقدرت در NS یکی از مزایای آن است . در NS میتوان صف هر لینک را نیز مانیتور کرد :
کد:$ns duplex-link-op $n2 $n3 queuePos 0.5
حال می توانید بسته ها را در صف ببینید و مشاهده کنید کدام یک دور انداخته می شوند . در اینجا با صف از نوع Droptail فقط پکت های آبی دور ریخته میشود . برای مشاهده تاثیر نوع صف آنرا به SFQ تغییر دهید و دوباره آنرا اجرا کنید :
تا این مرحله فقط سه نود و لینک ارتباطی بین آنها را ایجاد کرده و مکان آنها را در NAM مشخص کردیم ولی هنوز هیچ نوع داده ای برای تبادل بین نودها مشخص نشده است.کد:$ns duplex-link $n0 $n2 2Mb 10ms SFQ $ns duplex-link $n1 $n2 2Mb 10ms SFQ $ns duplex-link $n2 $n3 1.7Mb 20ms SFQ
در NS همیشه داده از یک عامل ) agent ) به دیگری ارسال می شود . بنابراین گام بعدی ایجاد عامل های ارسال کننده ( منابع ترافیکی ) و دریافت کننده داده است.
برقراری یک اتصال TCP :
کد:set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1
در این خطوط یک عامل TCP ایجاد کردیم. کاربران NS2 می توانند هر نوع عامل یا منبع ترافیکی را ایجاد کنند . در واقع عامل ها و منابع ترافیکی شیئ های اصلی در NS هستند که عمدتا در C++ پیاده سازی شده و در OTCL لینک می شوند. برای ایجاد عامل ها و منابع ترافیکی ، کاربر باید نام کلاس های این اشیا را بداند ( Agent/TCP ، Agent/TCPSink ، Application/Ftp ). این اطلاعات در مستندات NS موجود است ولی یک راه میانبر برای آن فایل
کد:/ns-2/tcl/libs/ns-default.tcl
است. این فایل حاوی مقادیر پیش فرض پارامتر های قابل پیکربندی برای اشیا شبکه در NS است .بنابراین راهنمای خوبی برای مشخص کردن اینکه چه نوع شی های شبکه در NS قابل دسترس است و پارامتر های قابل تغییر در NS است .
می توانید پارامتر های مناسب برای هر نوع عامل را در صفحه راهنمای NS ببینید :
روال attach-agent یک عامل ایجاد شده را به یک نود پیوند می دهد .
به عنوان مثال :کد:$ns attach-agent node agent
قدم بعدی ساختن یک اتصال شبکه منطقی بین اتصالات است. کد زیر یک ارتباط شبکه را با تنظیم آدرس مقصد و گروه آدرس پورت برای هر شبکه برقرار می کند .کد:$ns attach-agent $n0 $tcp
به عنوان مثال درکد زیر :کد:$ns connect agent1 agent2
ارتباط منطقی بین عامل های tcp و sink برقرار شده است .کد:$ns connect $tcp $sink
در این مرحله منبع ترافیکی FTP را ایجاد میکنیم.
ایجاد عامل udp و برقراری ارتباط از نوع udp بین n1 و n3کد:#Setup a FTP over TCP connection set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP
این خطوط یک تولید کننده ترافیک CBR را به عامل UDP متصل میکند. ( CBR مخففی است برای Constant Bit Rate )کد:#Setup a UDP connection set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null $udp set fid_ 2 set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR $cbr set packet_size_ 1000 $cbr set rate_ 1mb $cbr set random_ false
اندازه بسته روی 1000 بایت تنظیم شده است و سرعت تولید 1 مگابایت در ثانیه است.
خوب هم اکنون تنظیمات شبکه انجام شده است . قدم بعدی نوشتن یک سناریوی شبیه سازی است .
شیئ شبیه ساز توابع برنامه ریزی مختلفی دارد که مهمترین آن تابع time است :
این شیئ برای زمانبندی شبیه ساز استفاده می شود .کد:$ns at time "String"
CBRکد:$ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop"
کار خود را در ثانیه 0.1 شروع می کند و در ثانیه 4.5 خاتمه می دهد و همچنین منبع ترافیکی ftp کار خود را در ثانیه 1.0 آغاز و در ثانیه 4.0 به اتمام می رسد .
در آخر کار عامل ها را از یکدیگر جدا می کنیم . اگر چه این کار لازم نیست .
”کد:$ns at 4.5 “$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink
خط آخر نیز برای اجرای ns است .
Omid dot Mohajerani at Gmail dot com

بهار ثانیه ثانیه می اید…
و اینجا کسی هست که به اندازه شکوفه های بهاری برایت آرزوهای خوب دارد…
::
::
نون و پنیر و سبزی میبوسمت بلرزی نون پنیر و گندم یادت تو قلبه مردم نون و
پنیر و فندق لبت همیشه خندون نون و پنیر و رامک! جیگر عیدت مبارک.
::
::
به علت نبودن چرت و پرت از هم اکنون سال نو را به شما تبریک عرض مینماییم
.
از طرف انجمن بیکاران اس ام اس باز ایران
::
::
و بر آمد بهاری دیگر
مست و زیبا و فریبا ، چون دوست
سبدی پیدا کن ،
پر کن از سوسن و سنبل که نکوست
همره باد بهاری بفرست :
پیک نوروزی و شادی بر دوست !
::
::