ساخت توپولوژی در Ns3

بدون ديدگاه

ردیابی ASCII 

ns-3 از قابلیت های کمکی برخوردار است که سیستم ردیابی سطح پایین را پیچیده می کند تا به شما در جزئیات مربوط به پیکربندی برخی از موارد بسته بندی که به راحتی قابل درک هستند کمک کند. اگر این قابلیت را فعال کنید ، خروجی را در پرونده های ASCII مشاهده خواهید کرد – بنابراین نام. برای کسانی که با خروجی ns-2 آشنا هستند ، این نوع ردیاب مشابه out.tr تولید شده توسط بسیاری از اسکریپت ها است.

بیایید فقط به راست پرش کنیم و برخی از خروجی ردیابی ASCII را به scratch/myfirst.ccفیلمنامه خود اضافه کنیم . درست قبل از تماس با ، سطرهای کد زیر را اضافه کنید:Simulator::Run ()

AsciiTraceHelper ascii;
pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("myfirst.tr"));

مانند بسیاری از اصطلاحات ns-3 ns-3 ، این کد از یک شیء یاور نیز برای ایجاد آثار ASCII استفاده می کند. خط دوم شامل دو تماس با روش تو در تو است. روش “داخل” CreateFileStream()از یک اصطلاح شیء بدون نام برای ایجاد یک جریان جریان پرونده بر روی پشته استفاده می کند (بدون نام یک شی) و انتقال آن به روش به اصطلاح. ما در آینده بیشتر به این موضوع می پردازیم ، اما آنچه در این مرحله باید بدانید این است که شما در حال ایجاد شیئی هستید که یک پرونده با نام “myfirst.tr” را نمایندگی می کند و آن را وارد می کند ns-3. شما می خواهید ns-3با مسائل مربوط به طول عمر شیء ایجاد شده مقابله کنید و همچنین با مشکلات ناشی از محدودیت کمی شناخته شده (عمدی) C ++ اشیاء جریان در رابطه با سازنده های کپی مقابله کنید.

تماس خارجی ، به EnableAsciiAll()یاری دهنده می گوید که می خواهید ردیابی ASCII را در همه دستگاه های نقطه به نقطه در شبیه سازی خود فعال کنید. و شما می خواهید سینکهای ردیابی (ارائه شده) اطلاعاتی را درباره حرکت بسته ها با فرمت ASCII بنویسند.

برای کسانی که با ns-2 آشنا هستند ، رویدادهای ردیابی معادل نقاط ردیابی رایج است که وقایع “+” ، “-” ، “d” و “r” را وارد می کند.

اکنون می توانید اسکریپت را بسازید و آن را از خط فرمان اجرا کنید:

$ ./waf --run scratch/myfirst

درست همانطور که قبلاً بارها دیده اید ، پیام های Waf را مشاهده خواهید کرد و سپس با ساختن تعدادی پیام از برنامه در حال اجرا ، “ساخت” با موفقیت به پایان رسید.

هنگامی که اجرا شد ، این پرونده پرونده ای به نام ایجاد می کند myfirst.tr. به دلیل روشی که Waf کار می کند ، پرونده در فهرست محلی ایجاد نمی شود ، به طور پیش فرض در فهرست بالای سطح مخزن ایجاد می شود. اگر می خواهید مکانی را که ذخیره شده است کنترل کنید ، می توانید از --cwdگزینه Waf برای مشخص کردن این موضوع استفاده کنید. ما این کار را نکرده ایم ، بنابراین باید به دایرکتوری سطح بالا repo خود تغییر دهیم و به فایل ردیابی ASCII myfirst.trدر ویرایشگر مورد علاقه خود نگاهی بیندازیم .

ردیابی پارسی Ascii 

اطلاعات زیادی در آنجا به شکل بسیار متراکم وجود دارد ، اما اولین چیزی که باید توجه کنید این است که تعدادی خط مشخص در این پرونده وجود دارد. دیدن این مسئله دشوار است ، مگر اینکه پنجره خود را بطور قابل توجهی گسترش دهید.

هر خط در پرونده با یک رویداد ردیابی مطابقت دارد . در این مورد ، ما در حال ردیابی وقایع در صف انتقال موجود در هر دستگاه خالص نقطه به نقطه در شبیه سازی هستیم. صف انتقال یک صف است که از طریق آن باید تمام بسته های تعیین شده برای کانال نقطه به نقطه منتقل شود. توجه داشته باشید که هر خط در فایل ردیابی با یک کاراکتر تنها شروع می شود (بعد از آن فاصله ای دارد). این شخصیت این معنی را دارد:

  • +: یک عملیات enqueue در صف دستگاه رخ داده است.
  • -: یک عملیات خاموش کردن در صفح occurred دستگاه روی داد.
  • d: بسته بسته شد ، به طور معمول به دلیل اینكه صف پر بود.
  • r: یک بسته توسط دستگاه خالص دریافت شد.

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
+
2
/NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue
ns3::PppHeader (
  Point-to-Point Protocol: IP (0x0021))
  ns3::Ipv4Header (
    tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
    length: 1052 10.1.1.1 > 10.1.1.2)
    ns3::UdpHeader (
      length: 1032 49153 > 9)
      Payload (size=1024)

بخش اول این رویداد ردیابی گسترده (مرجع شماره 0) این عملیات است. ما یک +شخصیت داریم ، بنابراین این مربوط به یک عملیات enqueue در صف انتقال است. بخش دوم (مرجع 1) زمان شبیه سازی بیان شده در ثانیه است. ممکن است به یاد بیاورید که از ما خواسته شده است که UdpEchoClientApplicationبسته های ارسال را در دو ثانیه شروع کند. در اینجا ما تأیید می کنیم که این در واقع اتفاق می افتد.

بخش بعدی از نمونه اثری (مرجع 2) به ما می گوید که منبع اثرگذار منشاء این رویداد است (در نام نام ردیابی بیان شده است). می توانید فضای نام ردیابی را تا حدودی مانند فضای نام فایل سیستم فکر کنید. ریشه فضای نام است NodeList. این مربوط به کانتینر مدیریت شده در کد اصلی ns-3 است که شامل تمام گره هایی است که در یک اسکریپت ایجاد می شوند. درست همانطور که یک سیستم فایل ممکن است دارای فهرست هایی در زیر ریشه باشد ، ما ممکن است شماره گره ها را نیز در آن داشته باشیم NodeList/NodeList/0بنابراین رشته به گره صفر اشاره می کند که در NodeList آن معمولاً به عنوان “گره 0” فکر می کنیم. در هر گره لیستی از دستگاههای نصب شده وجود دارد. این لیست بعدی در فضای نام مشاهده می شود. می بینید که این رویداد اثرگذار برگرفته استDeviceList/0 دستگاه صفر نصب شده در گره است.

رشته بعدی ، $ns3::PointToPointNetDeviceبه شما می گوید چه نوع وسیله ای در موقعیت صفر لیست دستگاه برای گره صفر قرار دارد. به یاد بیاورید که عملیاتی +که در مرجع 00 مشاهده شد به این معنی است که یک عملیات انکوب در صف انتقال دستگاه رخ داده است. این در بخشهای پایانی “مسیر ردیابی” که نشان داده شده است TxQueue/Enqueue.

بخش های باقیمانده در ردپای باید نسبتاً شهودی باشند. منابع 3-4 نشان می دهد که بسته در پروتکل نقطه به نقطه محصور می شود. منابع 5-7 نشان می دهد که این بسته دارای یک نسخه ی IP چهار نسخه است و از آدرس IP 10.1.1.1 سرچشمه گرفته است و برای 10.1.1.2 تعیین شده است. منابع 8-9 نشان می دهد که این بسته دارای یک هدر UDP است و در آخر ، مرجع 10 نشان می دهد که میزان بار 1024 بایت مورد انتظار است.

خط بعدی در فایل ردیابی همان بسته را نشان می دهد که از صف انتقال در همان گره خارج می شود.

خط سوم در پرونده ردیابی بسته دریافتی توسط دستگاه خالص روی گره با سرور echo را نشان می دهد. من آن رویداد را در زیر تکثیر کرده ام.

1
2
3
4
5
6
7
8
9
r
2.25732
/NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx
  ns3::Ipv4Header (
    tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
    length: 1052 10.1.1.1 > 10.1.1.2)
    ns3::UdpHeader (
      length: 1032 49153 > 9)
      Payload (size=1024)

توجه کنید که عملیات ردیابی اکنون است rو زمان شبیه سازی به 2.25732 ثانیه افزایش یافته است. اگر مراحل آموزش را از نزدیک دنبال کرده اید ، این بدان معنی است که DataRateدستگاه های خالص و کانال را Delayروی مقادیر پیش فرض آنها قرار داده اید. این زمان باید همانطور که قبلاً در بخش قبلی مشاهده کرده اید ، آشنا باشد.

ورودی فضای نام ردیابی منبع (مرجع 02) تغییر کرده است تا نشان دهد که این رویداد از گره 1 ( /NodeList/1) و منبع ردیابی دریافت بسته ( /MacRx) دریافت می کند. با نگاه کردن به بقیه آثار موجود در پرونده ، می توانید پیشرفت بسته را از طریق توپولوژی دنبال کنید.

PCAP ردیابی 

NS-3 یاران دستگاه همچنین می تواند مورد استفاده برای ایجاد فایل های ردیابی در .pcapفرمت. مخفف اختصاری pcap (معمولاً با حروف کوچکتر نوشته می شود) مخفف ضبط بسته ها است و در واقع API است که شامل تعریف .pcapفرمت پرونده است. محبوب ترین برنامه ای که می تواند این قالب را بخواند و نمایش دهد ، Wireshark (که قبلاً Ethereal نام داشت) است. با این حال ، بسیاری از آنالیزرهای ردپای موجود است که از این قالب بسته استفاده می کنند. ما کاربران را ترغیب می کنیم تا از بسیاری از ابزارهای موجود برای تجزیه و تحلیل آثار pcap استفاده کنند. در این آموزش ، تمرکز ما بر روی مشاهده ردپاهای pcap با tcpdump است.

کدی که برای فعال کردن ردیابی pcap استفاده می شود ، یک لاینر است.

pointToPoint.EnablePcapAll ("myfirst");

پیش بروید و بعد از کد ردیابی ASCII که اخیراً به آن اضافه شده ایم ، این خط کد را وارد کنید scratch/myfirst.cc. توجه کنید که ما فقط رشته “myfirst” را گذراندیم ، و نه “myfirst.pcap” یا چیزی مشابه آن را. دلیل این امر این است که پارامتر پیشوند است ، نه یک نام کامل فایل. یاور در واقع یک شبیه ساز فایل برای هر دستگاه نقطه به نقطه ایجاد می کند. نام پرونده ها با استفاده از پیشوند ، شماره گره ، شماره دستگاه و پسوند “.pcap” ساخته می شوند.

در اسکریپت مثال ما ، در نهایت پرونده هایی با نام های “myfirst-0-0.pcap” و “myfirst-1-0.pcap” را مشاهده خواهیم کرد که به ترتیب ردیابی pcap برای گره 0-دستگاه 0 و گره 1-دستگاه 0 هستند.

پس از افزودن خط کد برای فعال کردن ردیابی pcap ، می توانید اسکریپت را به روش معمول اجرا کنید:

$ ./waf --run scratch/myfirst

اگر به فهرست بالای سطح توزیع خود نگاه می کنید ، اکنون باید سه پرونده log را مشاهده کنید: myfirst.trآیا پرونده ردیابی ASCII است که قبلاً بررسی کرده ایم. myfirst-0-0.pcapو myfirst-1-0.pcap فایلهای pcap جدیدی هستند که ما تازه تولید کرده ایم.

خواندن خروجی به کمک TCPDump 

ساده ترین کاری که در این مرحله انجام می شود ، استفاده از آنها tcpdumpبرای بررسی pcapپرونده ها خواهد بود.

$ tcpdump -nn -tt -r myfirst-0-0.pcap
reading from file myfirst-0-0.pcap, link-type PPP (PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024

tcpdump -nn -tt -r myfirst-1-0.pcap
reading from file myfirst-1-0.pcap, link-type PPP (PPP)
2.257324 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.257324 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024

می توانید در کمپرسی myfirst-0-0.pcap(دستگاه مشتری) مشاهده کنید که بسته echo در 2 ثانیه به شبیه سازی ارسال می شود. اگر به myfirst-1-0.pcapحوض دوم ( ) نگاهی بیندازید ، می توانید این بسته را در 2.257324 ثانیه دریافت کنید. می بینید که این بسته در 2.257324 ثانیه در زباله دوم تکرار می شود ، و سرانجام ، می بینید که بسته دریافت شده در اولین زباله با سرعت 2.514648 ثانیه در مشتری دریافت می شود.

خواندن خروجی با وایرشارک 

اگر با Wireshark ناآشنا هستید ، وب سایتی در دسترس است که می توانید برنامه ها و مستندات را بارگیری کنید: http://www.wireshark.org/ .

Wireshark یک رابط کاربر گرافیکی است که می تواند برای نمایش این پرونده های ردیابی استفاده شود. اگر Wireshark را در دسترس دارید ، می توانید هرکدام از پرونده های ردیابی را باز کرده و محتویات را به گونه ای نمایش دهید که گویی بسته ها را با استفاده از یک خرگیرنده بسته دستگیر کرده اید .

ساخت توپولوژی 

ساخت توپولوژی شبکه اتوبوس 

در این بخش می خواهیم تسلط خود را بر دستگاه ها و کانال های شبکه ns-3 گسترش دهیم تا نمونه ای از شبکه اتوبوس را پوشش دهیم. ns-3 یک دستگاه و کانال خالص را که CSMA نامیده می شود (Carap Sense Multiple Access) فراهم می کند.

دستگاه ns-3 CSMA یک شبکه ساده را با روحیه اترنت مدل می کند. یک اترنت واقعی از طرح CSMA / CD (Carrier Sense Multiple Access with Detection Collision) با افزایش پشتیبان بصورت نمایی استفاده می کند تا از این طریق برای رسانه انتقال مشترک تقاضا کند. NS-3 دستگاه CSMA و مدل های کانال تنها یک زیر مجموعه از این.

دقیقاً همانطور که در هنگام ساخت توپولوژی های نقطه به نقطه ، اشیاء یاور توپولوژیکی نقطه به نقطه را دیدیم ، یاران مساوی توپولوژی CSMA را در این بخش مشاهده خواهیم کرد. ظاهر و عملکرد این یاران باید برای شما کاملاً آشنا به نظر برسد.

ما یک اسکریپت نمونه در examples/tutorialفهرست خود ارائه می دهیم . این اسکریپت روی اسکریپت ساخته شده first.ccاست و یک شبکه CSMA را به شبیه سازی نقطه به نقطه که قبلاً در نظر گرفته بودیم اضافه می کند. پیش بروید و examples/tutorial/second.ccدر ویرایشگر مورد علاقه خود باز کنید. شما قبلاً كدهاي ns-3 را كافي ديديد تا بيشتر آنچه را كه در اين مثال مي گذرد را بفهميد ، اما كل اسكريپت را مرور خواهيم كرد و برخي از خروجي ها را بررسي خواهيم كرد.

دقیقاً مانند first.ccمثال (و در همه مثالهای ns-3) پرونده با یک خط حالت emacs و مقداری از دیگ بخار GPL شروع می شود.

کد واقعی با بارگیری ماژول شروع می شود و شامل پرونده هایی است که در first.ccمثال انجام شده است.

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/ipv4-global-routing-helper.h"

نکته ای که می تواند به طرز شگفت آوری مفید باشد ، کمی از هنر ASCII است که کارتونی از توپولوژی شبکه ساخته شده در مثال را نشان می دهد. در بیشتر نمونه های ما “ترسیم” مشابهی پیدا خواهید کرد.

در این حالت ، می بینید که می خواهیم مثال خود را از نقطه به نقطه (پیوند بین گره های n0 و n1 در زیر) با قطع کردن یک شبکه اتوبوس از سمت راست گسترش دهیم. توجه کنید که این توپولوژی شبکه پیش فرض است زیرا در واقع می توانید تعداد گره های ایجاد شده در LAN را تغییر دهید. اگر nCsma را روی یک تنظیم کنید ، در کل LAN (کانال CSMA) دو گره وجود خواهد داشت – یک گره مورد نیاز و یک گره اضافی. به طور پیش فرض سه گره “اضافی” وجود دارد که در زیر مشاهده می شود:

// Default Network Topology
//
//       10.1.1.0
// n0 -------------- n1   n2   n3   n4
//    point-to-point  |    |    |    |
//                    ================
//                      LAN 10.1.2.0

سپس فضای نام ns-3 است usedو یک جزء ورود به سیستم تعریف شده است. این همه دقیقاً مانند گذشته بود first.cc، بنابراین هنوز چیز جدیدی وجود ندارد.

using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("SecondScriptExample");

برنامه اصلی با پیچ و تاب کمی متفاوت شروع می شود. ما برای تعیین اینکه آیا اجزاء UdpEchoClientApplicationو UdpEchoServerApplicationورود به سیستم فعال هستند یا از یک پرچم شفاف استفاده می کنیم . این پرچم به صورت پیش فرض پیش می رود (اجزای ورود به سیستم فعال هستند) اما به ما امکان می دهد تا هنگام تست رگرسیون این مثال ، ورود به سیستم را خاموش کنیم.

کد آشنایی را مشاهده خواهید کرد که به شما امکان می دهد تعداد دستگاه های موجود در شبکه CSMA را از طریق آرگومان خط فرمان تغییر دهید. ما هنگامی که اجازه دادیم تعداد بسته های ارسال شده در بخش مربوط به آرگومان های خط فرمان تغییر کند ، مشابه کارهایی انجام دادیم. آخرین خط اطمینان می دهد که حداقل یک گره “اضافی” دارید.

کد شامل تغییرات API قبلاً پوشیده شده است ، بنابراین در این مرحله از آموزش شما باید با کد زیر کاملاً راحت باشید.

bool verbose = true;
uint32_t nCsma = 3;

CommandLine cmd;
cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma);
cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose);

cmd.Parse (argc, argv);

if (verbose)
  {
    LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
    LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
  }

nCsma = nCsma == 0 ? 1 : nCsma;

مرحله بعدی ایجاد دو گره است که ما از طریق لینک نقطه به نقطه به آنها متصل خواهیم شد. NodeContainerاستفاده می شود برای انجام این کار فقط به عنوان در انجام شد first.cc.

NodeContainer p2pNodes;
p2pNodes.Create (2);

در مرحله بعد ، ما NodeContainerبرای نگه داشتن گره هایی که بخشی از شبکه اتوبوس (CSMA) هستند ، به دیگری اعلام می کنیم . در ابتدا ، ما فقط خود شیء ظرف را فوری می کنیم.

NodeContainer csmaNodes;
csmaNodes.Add (p2pNodes.Get (1));
csmaNodes.Create (nCsma);

خط بعدی کد Getsگره اول (مانند داشتن یک شاخص) از ظرف گره نقطه به نقطه و آن را به ظرف گره هایی اضافه می کند که دستگاه های CSMA را دریافت می کنند. گره مورد نظر با یک دستگاه نقطه به نقطه و یک دستگاه CSMA به پایان می رسد . سپس تعدادی گره “اضافی” ایجاد می کنیم که باقی مانده شبکه CSMA را تشکیل می دهند. از آنجا که در شبکه CSMA قبلاً یک گره داریم – دستگاهی که دارای یک شبکه خالص نقطه به نقطه و CSMA باشد ، تعداد گره های “اضافی” به معنی گره های عدد مورد نظر شما در بخش CSMA منهای یک است.

کد بعدی کد باید تا الان کاملاً آشنا باشد. ما یک آنالوگ را PointToPointHelperتنظیم می کنیم و پیش فرض مربوط را تنظیم Attributesمی کنیم تا در دستگاه های ایجاد شده با کمک یا یک تأخیر دو مگابیت در ثانیه ایجاد کنیم و دو میلی ثانیه با تأخیر در کانال های ایجاد شده توسط یاور ایجاد کنیم.

PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

NetDeviceContainer p2pDevices;
p2pDevices = pointToPoint.Install (p2pNodes);

سپس a را NetDeviceContainerبرای ردیابی دستگاههای خالص نقطه به نقطه آنالوگ می کنیم و Installدر گره های نقطه به نقطه قرار می گیریم .

ما در بالا اشاره کردیم که شما برای کمک به دستگاه ها و کانال های CSMA می خواستید و خطوط بعدی آنها را معرفی می کنید. این CsmaHelperنسخهها کار درست مانند PointToPointHelper، اما دستگاه ها و کانال های CSMA را ایجاد و وصل می کند. در مورد یک دستگاه CSMA و یک جفت کانال ، توجه داشته باشید که نرخ داده به جای یک دستگاهتوسط یک کانال مشخص شده Attributeاست Attribute. این امر به این دلیل است که یک شبکه CSMA واقعی اجازه نمی دهد که مثلا دستگاه های 10Base-T و 100Base-T در یک کانال معین مخلوط شوند. ابتدا نرخ دیتا را روی 100 مگابیت در ثانیه تنظیم می کنیم و سپس تأخیر سرعت نور کانال را برابر 6560 نانو ثانیه (که به طور دلخواه به عنوان 1 نانو ثانیه در هر فوت در یک قطعه 100 متر انتخاب شده است) تنظیم می کنیم. توجه کنید که می توانید Attributeنوع داده داده بومی خود را تنظیم کنید .

نوشتن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد.

یک × چهار =