ناسا هاست ارائه دهنده سرور مجازی لینوکس و هاست پرسرعت وردپرس به همراه سی پنل و دایرکت ادمین
نمایش نتایج: از شماره 1 تا 4 , از مجموع 4

موضوع: مثالی از کار با شبیه ساز شبکه Ns2

  1. #1
    کاربر عادی omid_mohajerani آواتار ها
    تاریخ عضویت
    Apr 2007
    محل سکونت
    Shiraz
    نوشته ها
    37
    تشکرها / پسندها

    پیش فرض مثالی از کار با شبیه ساز شبکه Ns2

    در این مثال می خواهیم یک شبکه با 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 باید یک شیئ شبیه ساز ایجاد کرد. این کار با دستور زیر انجام می شود :
    کد:
    set ns [new Simulator]
    این دستور یک شیئ شبیه ساز NS را ایجاد می کند و آنرا به متغیر NS منصوب می کند .
    با استفاده از روال ها و خصوصیات این شیئ می توان توپولوژی شبکه را پیاده سازی کرد.
    به عنوان مثال شیئ شبیه ساز دارای متدهایی است که عملیات زیر را انجام می دهند :
    • گره ها و خطوط ارتباطی بین آنها را ایجاد می کند .
    • اشیا مربوط به عناصر شبکه ( با attache-agent ) را به یکدیگر متصل می کند .
    • ارتباط بین منابع ترافیکی و دریافت کننده ها را برقرار می کند .
    • پارامتر های نمایش توسط نرم افزار NAM را مشخص می کند .
    (NAM ابزاری برای نمایش گرافیکی شبیه ساز NS است و محیطی را در اختیار می گذارد که بتوان با استفاده از آن حرکت واقعی بسته های داده ای را مشاهده کرد. )
    کد:
    $ns color 1 Blue
    $ns color 2 Red
    این خطوط برای تعیین رنگ جریان پکت ها استفاده می شود. Syntax کلی آن به صورت زیر است :
    کد:
    $ns color fid color
    در اینجا جریان پکت ها با fid شماره 1 با رنگ آبی و جریان پکت ها با fid شماره 2 با رنگ قرمز نمایش داده می شود.


    این بخش برای تنظیم محیط گرافیکی نمایش شبیه ساز ( 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
    همچنین می توان اندازه اندازه صف هر لینک را محدود کرد :

    کد:
    $ns queue-limit $n2 $n3 10
    اینجا اندازه لینک ارتباطی بین نود های 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 تغییر دهید و دوباره آنرا اجرا کنید :
    کد:
    $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
    تا این مرحله فقط سه نود و لینک ارتباطی بین آنها را ایجاد کرده و مکان آنها را در NAM مشخص کردیم ولی هنوز هیچ نوع داده ای برای تبادل بین نودها مشخص نشده است.
    در 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
    به عنوان مثال درکد زیر :

    کد:
    $ns connect $tcp $sink
    ارتباط منطقی بین عامل های tcp و sink برقرار شده است .


    در این مرحله منبع ترافیکی FTP را ایجاد میکنیم.
    کد:
    #Setup a FTP over TCP connection
    set ftp [new Application/FTP]
    $ftp attach-agent $tcp
    $ftp set type_ FTP
    ایجاد عامل udp و برقراری ارتباط از نوع udp بین n1 و n3
    کد:
    #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
    این خطوط یک تولید کننده ترافیک CBR را به عامل UDP متصل میکند. ( CBR مخففی است برای Constant Bit Rate )
    اندازه بسته روی 1000 بایت تنظیم شده است و سرعت تولید 1 مگابایت در ثانیه است.
    خوب هم اکنون تنظیمات شبکه انجام شده است . قدم بعدی نوشتن یک سناریوی شبیه سازی است .
    شیئ شبیه ساز توابع برنامه ریزی مختلفی دارد که مهمترین آن تابع time است :
    کد:
    $ns at time  "String"
    این شیئ برای زمانبندی شبیه ساز استفاده می شود .
    کد:
    $ns at 0.1 "$cbr start"
    $ns at 1.0 "$ftp start"
    $ns at 4.0 "$ftp stop"
    $ns at 4.5 "$cbr stop"
    CBR
    کار خود را در ثانیه 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
    ویرایش توسط omid_mohajerani : 2008/03/28 در ساعت 05:45 PM

  2. Thanks admin, mahtabz thanked for this post
  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    محل سکونت
    Advertising world
    نوشته ها
    Many
     

  4. #2
    کاربر عادی farzaddraz آواتار ها
    تاریخ عضویت
    Jun 2010
    نوشته ها
    6
    تشکرها / پسندها

    پیش فرض شبیه سازی شبکه های کامپیوتری به کمک برنامه ns2

    آموزش نحوه نصب برنامه شبیه ساز ns2 به کمک برنامه cygwin، و نحوه شبیه سازی (مقدماتی) به زبان ساده با این ابزار

    لینک مستقیم:

    [فقط اعضا می توانند لینک ها را مشاهده کنند برای ثبت نام اینجا را کلیک کنید]

    آینه (لینک غیر مستقیم):

    [فقط اعضا می توانند لینک ها را مشاهده کنند برای ثبت نام اینجا را کلیک کنید]

  5. Thanks admin, mahtabz thanked for this post
  6. #3
    کاربر عادی epsell آواتار ها
    تاریخ عضویت
    Jul 2011
    محل سکونت
    TEH
    نوشته ها
    4
    تشکرها / پسندها

    پیش فرض

    با سلام
    از پست های خوب شما متشکرم
    موفق باشید

  7. #4
    کاربر عادی roozhayebikhatere آواتار ها
    تاریخ عضویت
    Sep 2010
    نوشته ها
    47
    تشکرها / پسندها

    پیش فرض

    نقل قول نوشته اصلی توسط omid_mohajerani نمایش پست ها
    در این مثال می خواهیم یک شبکه با 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 باید یک شیئ شبیه ساز ایجاد کرد. این کار با دستور زیر انجام می شود :
    کد:
    set ns [new Simulator]
    این دستور یک شیئ شبیه ساز NS را ایجاد می کند و آنرا به متغیر NS منصوب می کند .
    با استفاده از روال ها و خصوصیات این شیئ می توان توپولوژی شبکه را پیاده سازی کرد.
    به عنوان مثال شیئ شبیه ساز دارای متدهایی است که عملیات زیر را انجام می دهند :
    • گره ها و خطوط ارتباطی بین آنها را ایجاد می کند .
    • اشیا مربوط به عناصر شبکه ( با attache-agent ) را به یکدیگر متصل می کند .
    • ارتباط بین منابع ترافیکی و دریافت کننده ها را برقرار می کند .
    • پارامتر های نمایش توسط نرم افزار NAM را مشخص می کند .
    (NAM ابزاری برای نمایش گرافیکی شبیه ساز NS است و محیطی را در اختیار می گذارد که بتوان با استفاده از آن حرکت واقعی بسته های داده ای را مشاهده کرد. )
    کد:
    $ns color 1 Blue
    $ns color 2 Red
    این خطوط برای تعیین رنگ جریان پکت ها استفاده می شود. Syntax کلی آن به صورت زیر است :
    کد:
    $ns color fid color
    در اینجا جریان پکت ها با fid شماره 1 با رنگ آبی و جریان پکت ها با fid شماره 2 با رنگ قرمز نمایش داده می شود.


    این بخش برای تنظیم محیط گرافیکی نمایش شبیه ساز ( 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
    همچنین می توان اندازه اندازه صف هر لینک را محدود کرد :

    کد:
    $ns queue-limit $n2 $n3 10
    اینجا اندازه لینک ارتباطی بین نود های 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 تغییر دهید و دوباره آنرا اجرا کنید :
    کد:
    $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
    تا این مرحله فقط سه نود و لینک ارتباطی بین آنها را ایجاد کرده و مکان آنها را در NAM مشخص کردیم ولی هنوز هیچ نوع داده ای برای تبادل بین نودها مشخص نشده است.
    در 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
    به عنوان مثال درکد زیر :

    کد:
    $ns connect $tcp $sink
    ارتباط منطقی بین عامل های tcp و sink برقرار شده است .


    در این مرحله منبع ترافیکی FTP را ایجاد میکنیم.
    کد:
    #Setup a FTP over TCP connection
    set ftp [new Application/FTP]
    $ftp attach-agent $tcp
    $ftp set type_ FTP
    ایجاد عامل udp و برقراری ارتباط از نوع udp بین n1 و n3
    کد:
    #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
    این خطوط یک تولید کننده ترافیک CBR را به عامل UDP متصل میکند. ( CBR مخففی است برای Constant Bit Rate )
    اندازه بسته روی 1000 بایت تنظیم شده است و سرعت تولید 1 مگابایت در ثانیه است.
    خوب هم اکنون تنظیمات شبکه انجام شده است . قدم بعدی نوشتن یک سناریوی شبیه سازی است .
    شیئ شبیه ساز توابع برنامه ریزی مختلفی دارد که مهمترین آن تابع time است :
    کد:
    $ns at time  "String"
    این شیئ برای زمانبندی شبیه ساز استفاده می شود .
    کد:
    $ns at 0.1 "$cbr start"
    $ns at 1.0 "$ftp start"
    $ns at 4.0 "$ftp stop"
    $ns at 4.5 "$cbr stop"
    CBR
    کار خود را در ثانیه 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

    میشه کد ها رو با c++ نوشت و در NS2 اجرا کرد؟

    یعنی در کل میشه در NS2 از زبان TCL استفاده نکنیم از همون C++ خودمون استفاده کنیم؟

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •