تارا فایل

آشنایی با ساختار و نحوه عملکرد نرم افزار شبیه سازی شبکه




عنوان

آشنایی با ساختار و نحوه عملکرد نرم‏افزار
شبیه‏سازی شبکه (Network Simulator)

استاد

ارائه کننده

فهرست عناوین

عنوان صفحه

1 مقدمه 1
1-1 هدف 1
2-1 نمای کلی 1
2 مبانی NS 5
1-2 Otcl زبانی برای استفاده کاربر 5
2-2 مثال ساده‏ای از شبیه‏سازی 7
3-2 زمانبند رویداد 12
4-2 اجزای شبکه 14
5-2 بسته 17
3 بعد از شبیه‏سازی 19
1-3 مثالی از تحلیل ردیابی 19
4 توسعه NS 22
1-4 در کجا بدنبال چه چیزی باشیم؟ 22
2-4 اتصال Otcl 23
5 ارائه چند مثال 25
1-5 LAN 25
2-5 Multicasting 25
3-5 Web Server 26

1. مقدمه

1-1 هدف
NS شبیه‏سازی شئ گراست که بصورت گسسته مبتنی بر رویدادها شبکه را شبیه سازی می‏کند، این برنامه در دانشگاه برکلی با زبانهای C++ و Otcl ایجاد شده و بسط یافته است. NS اساساً برای پیاده‏سازی شبکه‏های محلی و گسترده مفید می‏باشد. هرچند استفاده از NS برای افرادی که با اصول شبیه‏سازها آشنا هستند ساده خواهد بود اما بکارگرفتن این برنامه برای کاربران مبتدی استفاده از شبیه سازها کاملاً دشوار است زیرا تعداد وستندات و راهنماهای مناسب برای کاربران مبتدی بسیار اندک می‏باشد. با وجود این مستندات زیادی وجود دارد که بوسیله افراد حرفه‏ای در شبیه سازی برای کاربران حرفه‏ای NS نوشته شده است. هدف از این نوشته ارائه برخی ایده از چگونگی عملکرد شبیه سازها، راهنمایی برای توسعه و ادامه راه، آشنایی با اجزای شبکه در کدهای شبیه ساز، چگونگی ایجاد اجزای شبکه جدید و …. می‏باشد. عمده مطالب با پرداختن به مثالهای ساده و توضیحات مختصر مبتنی بر تجربیات مختلف بیان شده است.

2-1 نمای کلی
NS یک شبیه ساز رویدادگراست که در دانشگاه برکلی برای شبیه‏سازی شبکه‏های مبتنی بر IP ایجاد گردیده. در این شبیه ساز پروتکلهای شبکه از قبیل TCP و UDP ، رفتار منابع ترافیک زا مانند Ftp ، Telnet و Web ، مکانیزم مدیریت صف در مسیریابها از قبیل DropTail ، RED و CBQ ، الگوریتمهای مسیریابی مانند Dijkestra و …. قابل اجرا می‏باشند. همچنین در NS، ارسال چندتایی (Multicast) و برخی از پروتکلهای لایه فیزیکی برای شبیه سازی LANها نیز قابل اجرا می‏باشند. پروژه NS در حال حاضر بخشی از پروژه VINT می‏باشد که ابزارهایی را برای نمایش نتایج شبیه سازی، آنالیز و تبدیل توپولوژهای شبکه ایجاد کرده و توسعه می‏دهد. توسعه VINT از طریق تولید کننده‏هایی که بخوبی توانایی بکارگیری NS را دارند. NS رایج کنونی در محیط C++ و Otcl ( Otcl یک زبان اسکریپت با الحاقات شئ گراست که در MIT ایجاد شده است)، نوشته شده و در دسترس می‏باشد. در این مقاله در مورد ساختار NS مختصری بحث می‏شود اما چگونگی استفاده بیشتر از NS بطور جزئی با مثالهایی توضیح داده خواهد شد.

شکل 1: NS از دیدگاهی ساده شده برای کاربر

همانگونه که در شکل 1 نشان داده شده است از دیدگاهی ساده شده برای کاربر، NS مفسر اسکریپت TCL بصورت شئ گراست که دارای یک فهرست کننده رویدادهای شبیه سازی و کتابخانه Object های اجزاء شبکه و کتابخانه‏های راه‏اندازی و تنظیم شبکه می‏باشد. بعبارت دیگر برای استفاده از NS شما در زبان اسکریپت Otcl برنامه می‏نویسید. برای تنظیم و راه‏اندازی شبکه، کاربر باید اسکریپت Otcl بنویسد که یک فهرست کننده رویداد (زمانبند) را ایجاد کند، برای تنظیم کردن توپولوژی‏های شبکه از Objectهای شبکه و توابع موجود در کتابخانه‏ها و بیان منابع ترافیک زا در هنگام شروع و توقف انتقال بسته‏ها از طریق زمانبند رویدادها استفاده می‏شود. لغت عمودی برای تنظیم شبکه استفاده شده است چون تنظیم نمودن شبکه بصورت عمودی (عمقی) امکان مسیرهای داده را از میان Objectهای شبکه بوسیله تنظیم اشاره‏گر از یک Object به آدرس Object دیگر، فراهم می‏کند. هنگامیکه یک کاربر بخواهد یک Object شبکه جدید ایجاد کند بسهولت می‏تواند با نوشتن یک Object جدید یا ایجاد یک Object مرکب از کتابخانه Object یک Object جدید ایجاد نماید و جریان داده را از طریق Objectها برقرار سازد.
از اجزاء مهم NS در کنار Objectهای شبکه زمتنبند رویدادهاست. هر رویداد در NS یک ID منحصر بفردی با زمان تنظیم شده‏ برای هر بسته است که به یک Object که رویدادها را موجب می‏شود، اشاره می‏کند. در NS یک زمنبند رویداد، زمان شبیه سازی و شروع همه رویدادها را نگه می‏دارد. اجزاء شبکه از طریق ارسال بسته‏ها با یکدیگر ارتباط برقرار می‏کنند، هرچند که این امر موجب مصرف زمان حقیقی شبیه سازی نمی‏شود. همه اجزاء شبکه بخشی از زمان شبیه سازی را صرف بکاربردن بسته‏ها می‏کنند. برای مثال سوئیچی در شبکه که با 20 میکروثانیه تاٌخیر خروج یک رویداد برای یک بسته شبیه سازی شده‏است، در جدول زمانبندی تاٌخیر هر رویداد برای آن 20 میکروثانیه تنظیم گردیده، زمانبند بعد از 20 میکروثانیه رویداد را از صف خارج کرده و آنرا به عنصر سوئیچ ارسال می‏کند، که آنهم بعد بسته را یک عنصر مرتبط خروجی مشخص ارسال می‏نماید. استفاده دیگری که از زمانبند رویداد می‏شود بعنوان تایمر است. برای مثال TCP نیازمند یک تایمر برای نگهداری زمان سرآمدن انتقال بسته‏ها می‏باشد. تنها تفاوت بین تایمرها و زمانبندها، آنست که تایمر مقدار زمان مرتبط با یک بسته را اندازه‏گیری می‏کند و یک عمل خاص را به آن بسته بعد از سپری شدن یک زمان مشخص نسبت می‏دهد.
NS نتنها در Otcl بلکه در C++ نیز نوشته شده است. بدلیل کارآمد بودن، NS مسیرهای عبوری داده‏ها را از مسیرهای عبوری کنترلی تفکیک ساخته است. بخاطر کاهش دادن بسته‏ها زمان پردازش رویدادها (نه زمان شبیه سازی)، زمانبند و Object های اجزای شبکه اصلی در مسیر داده‏ها با زبان C++ نوشته و کمپایل شده‏اند. این Objectهای کمپایل شده از طریق یک اتصال Otcl در دسترس مفسر Otcl قرار گرفته‏اند که هر اتصال Otcl یک Otcl Object جفت برای هر C++ Object ایجاد کرده و توابع کنترلی را می‏سازند. متغیرهای قابل تنظیم مشخص شده با Objectهای C++ بعنوان توابع و متغیرهای عضو Objectهای Otcl مخابره شده عمل می‏کنند. بدین طریق کنترل Objectهای C++ به Otcl واگذار شده است. همچنین افزودن توابع عضو و متغیرها به یک اتصال C++ در Otcl Object امکانپذیر است.
نیازی به کنترل کردن Objectهای C++ در شبیه سازی نمی‏باشد بعلاوه یک Object (نه در مسیر داده‏ها) بطور کامل می‏تواند در Otcl اجرا شود.

شکل 2: همزادی C++ و Otcl

شکل 2 نشاندهنده یک مثال سلسله مراتبی در C++ و Otcl است. چیزی که در این شکل قابل توجه می‏باشد Objectهای C++ی هستند که دارای یک اتصال سلسله مراتبی Otcl می‏باشند همانطور که نشان داده شده‏ یک جفت سلسله مراتبی Otcl Object بسیار مشابه به نوع C++ وجود دارد.

شکل3: معماری NS

شکل 3 معماری کلی NS را نشان می‏هد. در این تصویر یک کاربر عمومی (نه یک کاربر حرفه‏ای NS) می‏تواند با قرار گرفتن در گوشه سمت چپ پایین، طراحی و اجرای شبیه سازی را در Tcl با استفاده از Objectهای شبیه سازی موجود در کتابخانه Otcl انجام دهد. زمانبند رویدادها و اغلب اجزای شبکه در C++ اجرا می‏شوند و از طریق یک اتصال Otcl که با استفاده از Tclcl ایجاد شده در دسترس Otcl قرار می‏گیرند. تمام این چیزها با یکدیگر NS را که یک مفسر Tcl از نوع شئ گراست را با کتابخانه‏هایش می‏سازند.
در اینجا چیزی که می‏تواند جالب توجه باشد چگونگی بدست آوردن نتایج حاصل از شبیه سازی NS است. همانطور که در شکل 1 ملاحظه می‏شود، زمانیکه یک شبیه سازی پایان می‏یابد، NS یک یا چند فایل خروجی متنی که محتویات آنها جزئیات داده‏های شبیه سازی را شامل می‏شود، تولید می‏کند. این داده‏ها می‏تواند برای آنالیز کردن شبیه سازی (که در بخش بعد 2 مثال از آنالیز نتایج شبیه سازی ارائه شده است)، یا بعنوان یک ورودی یرای ابزار نمایش گرافیکی شبیه سازی که Network Animator نامیده می‏شود و در بخشی از پروژه VINT ایجاد شده، بکار رود. NAM (Network Animator)، دارای محیط گرافیکی مناسبی برای کاربران همانند یک برنامه CD Player (که دارای دکمه‏های Play، Fast Forward و … است) می‏باشد. همچنین در NAM یک کنترل کننده سرعت نمایش نیز تعبیه شده است. بعلاوه NAM می‏تواند اطلاعات را از قبیل توان گذردهی و تعداد افت بسته‏ها در هر اتصال بصورت گرافیکی نمایش دهد هرچند که از نتایج گرافیکی برای آنالیز دقیق شبیه سازی نمی‏توان استفاده کرد.

2. مبانی NS

1-2 Otcl : زبانی برای کاربر
همانگونه که در بخش قبل ذکر گردید. NS اساساً یک مفسر Otcl با با کتابخانه‏های Object شبیه سازی شبکه می‏باشد. دانستن چگونگی برنامه‏نویسی در محیط Otcl برای NS مفید خواهد بود که در این بخش مثالهایی به این منظور ارائه خواهد می‏گردد.

مثال 1 یک اسکریپت Tcl عمومیست که چگونگی ایجاد یک روال و فراخواندن آن، چگونگی مقدار دهی به متغیرها و چگونگی ایجاد یک حلقه را نشان می‏هد. دانستن اینکه Otcl تعمیم یافته شئ گرایی از Tcl است مشخص خواهد کرد که همه فرمانهای Tcl در Otcl قابل استفاده‏اند. وابستگی بین Tcl و Otcl عیناً مشابه C و C++ می‏باشد. برای اجرای این اسکریپت باید از برنامه ex-tcl.tcl در محیط NS استفاده نمود.

مثال1: مثالی از اسکریپت Tcl

در Tcl کلمه کلیدی proc برای تعریف یک روال بکار می‏رود، بدنبال آن یک نام روال و آرگومانها در دو براکت مشخص می‏گردند. کلمه کلیدی set برای نسبت دادن مقدار به یک متغیر استفاده می‏شود. [expr…] مقادیر مشخص شده در براکت‏های بعد از کلمه کلیدی را محاسبه می‏کند. نکته قابل توجه گرفتن مقدار نسبت داده شده به یک متغیر است، $ بهمراه نام متغیر به این منظور بکار می‏رود . کلمه کلیدی puts رشته‏های زیر را درون دو علامت گیومه چاپ می‏کند.
نتایج حاصل از مثال یک در اینجا نشان داده شده است.

مثال بعدی یک مثال برنامه نویسی شئ گرا در Otcl است. این مثال بسیار ساده است اما روش چگونگی ایجاد کردن و استفاده از Objectها را در Otcl نشان می‏دهد. شانس نوشتن یک Object برای یک کاربر مبتدی بسیار نادر است. بهرحال از اینرو همه Objectهای NSی که ما در برنامه‏نویسی شبیه سازی NS استفاده خواهیم کرد، چه در Otcl نوشته شد باشد چه در ++C ، اساساً Objectهای Otcl هستند.

مثال 2: مثالی از اسکریپت Tcl

مثال 2 یک اسکریپت Otcl است که 2 کلاس Object را تعریف می‏کند. "mom" و "kid" بطوریکه "kid" یک کلاس فرزند از "mom" است و یک تابع عضو برای هر کلاس بنام "greet" تعیین شده است. بعد از تعریف کردن کلاسها هر Object همان لحظه ایجاد و مشخص می‏گردد، متغیر "age" برای "mom" مقدار 45 و برای "kid" مقدار 15 تنظیم می‏شود و "greet" تابع عضو هر یک از Objectهای ایجاد شده می‏باشد. کلمه کلیدی class برای ایجاد یک کلاس شئی و کلمه instproc برای تعریف یک تابع عضو برای یک کلاس Object می‏باشند.
فرزندان کلاس با استفاده از کلمه کلیدی superclass مشخص شده‏اند. در تعریف توابع عضو، $self همانند اشاره‏گر "this" دز C++ عمل می‏کند. و instvar چک می‏کند که آیا نام متغیر در کلاس خودش تعریف شده‏است یا در سوپرکلاسش. اگر نام متغیر گرفته شده کنونی قبلاً تعریف شده باشد، متغیر به نام جدید دیگری ارجاع داده می‏شود. در نهایت برای ایجاد یک Object کلمه کلیدی new در مثال نشان داده شده است. اجرای برنامه ex-otcl.tcl در محیط NS روی این مثال نتایج زیر را نشان خواهد داد.

2-2 مثال ساده‏ای از شبیه سازی
در این بخش یک اسکریپت ساده NS نشان داده شده و عملیاتی که در هر سطر انجام می‏پذیرد توضیح داده شده است. مثال 3 یک اسکریپت Otcl است که پیکربنندی شبکه ساده‏ای را ایجاد کرده و عملیات شبیه‏سازی شکل 4 را انجام می‏دهد. برای اجرای این شبیه‏سازی، باید از برنامه ns-simple.tcl در محیط استفاده شود.

شکل4: یک توپولوژی ساده شبکه و سناریوی شبیه سازی
این شبکه دارای 4 گره می‏باشد که در شبکل فوق دیده می‏شوند. اتصالات دوطرفه بین n0 و n2 ، n1 و n2 با پهنای باند 2 Mbps و تاٌخیر 10 ms برقرار است. اتصالات دو طرفه بین n2 و n3 دارای 1.7 Mbps پهنای باند و 20 ms تاٌخیر می‏باشد. هر گره از یک صف دنباله دار بطول حداکثر 10 خانه استفاده می‏کند. یک نماینده (agent) ، Tcp به n0 پیوست شده است و یک اتصال به یک نماینده "sink" ، Tcp در n3 برقرار می‏باشد. بعنوان پیشفرض حداکثر اندازه بسته‏هایی که نماینده Tcp می‏تواند تولید نماید 1 Kbyte می‏باشد. نماینده "sink" Tcp، بسته‏های ack را برای فرستنده تولید و ارسال می‏کند و بسته‏های دریافتی را آزاد می‏سازد. نماینده "udp" که به n1 پیوست شده به نماینده "null" در n3 متصل گردیده است. یک نماینده "null" فقط بسته‏های دریافتی را آزاد می‏کند. یک تولید کننده ترافیک "ftp" و یک تولید کننده ترافیک "cbr" بترتیب به نماینده Tcp و Udp پیوست می‏شوند، و "cbr" برای تولید بسته‏های 1 Kbyte در نرخ 1 Mbps پیکربندی شده است. "cbr" برای شروع در ثانیه 0.1 و توقف در ثانیه 4.5 و ftp نیز برای شروع در ثانیه 0.1 و توقف در ثانیه 4 تنظیم شده‏اند.

مثال3: مثالی از اسکریپت Tcl

در اینجا اسکریپت بالا را توضیح می‏دهیم. عموماً یک اسکریپت NS با ایجاد یک Object شبیه‏ساز آغاز می‏شود.

* set ns [new Simulator]:
یک Object شبیه‏ساز NS ایجاد می‏کند و آنرا به متغیر ns نسبت می‏دهد و بعد از آن این عملیات‏ها انجام می‏گیرند.
* تعریف کردن شکل بسته
* ایجاد یک زمتنبند
* انتخاب شکل آدرس دهی پیش فرض

Object ؛شبیه‏ساز؛ توابع عضوی دارد که اعمال زیر را انجام می‏دهند.
* ایجاد Objectهای مرکب از قبیل گره‏ها، اتصالها
* اتصال Objectهای ایجاد شده اجزاء شبکه
* تنظیم پارامترهای اجزای شبکه
* ایجاد ارتباط بین نماینده‏ها
* مشخص کردن انتخاب‏های نمایش NAM

اغلب توابع عضو برای تنظیم و زمانبندی شبیه‏سازی بکار می‏روند، هر چند برخی از آنها برای نمایش NAM استفاده می‏شوند.

* $ns color fid color:
برای تنظیم رنگ بسته‏ها در هنگام گردش در شبکه استفاده می‏شود. این تابع عضو برای نمایش NAM است وتاٌثیری بر شبیه‏سازی واقعی ندارد.

* $ns namtrace-all file-descriptor:
این تابع عضو موجب می‏شود شبیه‏ساز رکوردهای نتیجه را در یک فایل با فرمتی که برای ورودی NAM بکار رود، ذخیره کند.

* proc finish {}:
این تابع بعد از پایان یافتن شبیه‏سازی فراخوانی می‏شود. در این تابع پردازشهای بعد از شبیه‏سازی مشخص شده‏اند.

* set n0 [$ns node]:
تابع عضو node یک گره ایجاد می‏کند. هر گره در NS یک Object مرکب است که دارای آدرس و پورت می‏باشد و کاربران می‏توانند بترتیب با یک آدرس و یک Object پورت گره ایجاد کنند و آنها را با هم اتصال دهند.

* $ns duplex-link node1 node2 bandwidth delay queue-type:
2 اتصال ساده با پهنای باند و تاٌخیر مشخص شده ایجاد می‏کند و 2 گره مشخص را بهم متصل می‏نماید. در NS صف خروجی هر گره بعنوان بخشی از یک اتصال محسوب می‏شوند از اینرو کاربران باید نوع صف را زمان ایجاد اتصالات مشخص کنند. در اسکریپت شبیه‏سازی بالا، صف دنباله دار استفاده شده است. اگر خواننده بخواهد از یک صف RED استفاده کند، بسادگی فقط کلمه Droptail را با RED جابجا می‏نماید. همانند یک گره هر اتصال یک Object مرکب می‏باشد و کاربران می‏توانند Sub-Objectهای خود و ارتباطات آنها و گره‏ها را ایجاد نمایند.

* $ns queue-limit node1 node2 number:
این خط محدوده صف را بین دو اتصال ساده‏ای که گره 1 و 2 را بهم متصل می‏کند، با عددهای مشخص شده تنظیم می‏نماید.

* $ns duplex-link-op node1 node2 …:
هر دو خط بعدی برای نمایش NAM استفاده شده‏اند. برای مشاهده تاٌثیر این خطوط، کاربر می‏تواند آنها را بعنوان توضیح مشخص کند و بعد شبیه‏سازی را تکرار نماید.

حال که تنظیم‏های اولیه شبکه انجام شده، نوبت تنظیم نماینده‏های ترافیکی از قبیل Tcp و Udp ، منابع ترافیک زا از قبیل ftp و cbr و پیوست آنها بترتیب به گره‏ها و نماینده‏ها می‏باشد.

* set tcp [new Agent/TCP]:
این خط چگونگی ایجاد نماینده را نشان می‏دهد. عموماً کاربران توانایی ایجاد هر نماینده یا منبع ترافیک زا را به این روش خواهند داشت. نماینده‏ها و منابع ترافیک زا در حقیقت Objectهای پایه‏ای می‏باشند (نه مرکب). غالباً در C++ ایجاد شده و به Otcl متصل شده‏اند. بدین جهت توابع عضو Object شبیه‏سازی مشخصی که بتوان این Objectها را در لحظه ایجاد کند، وجود ندارد. برای ایجاد نماینده‏ها یا منابع ترافیک زا هر کاربر باید نام‏های کلاس‏های این Object ها را بداند. این اطلاعات در مستندات NS موجود می‏باشند.

* $ns attach-agent node agent:
تابع عضو attach-agent یک Object نماینده ایجاد شده را به یک Object گره پیوست می‏کند.

* $ns connect agent1 agent2:
بعد از اینکه 2 نماینده‏ای که با همدیگر در ارتباط هستند ایجاد شدند نوبت به برقراری اتصال یک شبکه منطقی بیت آنها می‏رسد. این خط یک اتصال شبکه بوسیله تنظیم آدرس مقصد و آدرس پورت برای هر نماینده برقرار می‏کند با این فرض تمام پیکربندی شبکه انجام پذیرفته است نوبت به نوشتن یک سناریو برای شبیه‏سازی می‏رسد (زمانبندی شبیه‏سازی). Object شبیه‏ساز دارای تعدادی تابع عضو زمانبندی است. اما غالباً تابع زیر بیشترین کاربرد را در آن دسته دارد.

* $ns at time "string":
این تابع عضو یک Object شبیه‏ساز زمانبند را برای زمانبندی اجرای رشته‏های مشخص شده در زمان شبیه‏سازی، ایجاد می‏کند.
در NS معمولاً یک منبع ترافیک زا داده‏های واقعی و درستی را انتقال نمی‏دهند، اما نماینده در نظر گرفته شده را برای آمادگی ارسال دیتا آگاه می‏سازد و نماینده فقط از مقدار داده جهت انتقال مطلع است و ایجاد و ارسال بسته‏ها را انجام می‏دهد. بعد از پیکربندی تمام شبکه، زمانبندی و مشخص کردن رول‏های بعد از شبیه‏سازی تنها عمل باقی مانده اجرای شبیه‏سازیست که آن نیز با $ns run انجام می‏پذیرد.

3-2 زمانبند رویداد
در این بخش پیرامون زمانبند رویدادهای گسسته در NS صحبت می‏شود. همانگونه که در بخش‏های قبل آمده، استفاده کننده‏های اصلی زمانبند رویدادها اجزایی از شبکه‏اند که تاٌخیرهای بسته‏ها یا زمانهای مورد نیاز آنها را شبیه‏سازی می‏کنند. شکل 5 نشان می‏هد که هر Object شبکه از یک زمانبند رویداد استفاده می‏کند، بیاد داشته باشیم که یک Object از شبکه که یک رویداد را منتشر می‏کند کسی است که بعداً در زمانبندی، یک رویداد را بکار می‏برد. همچنین باید دانست که مسیر داده بین Objectهای شبکه و مسیر رویدادها از هم متفاوتند. در حقیقت بسته‏ها بین یک Object شبکه و Object شبکه دیگر با استفاده از روش send(Packet* p) {target_->recv(p)}; برای ارسال و روش recv(Packet*, Handler* h = 0) برای دریافت، دست به دست می‏شوند.

شکل5: زمانبند رویداد گسسته

NS دارای 2 نوع زمانبند رویداد متفاوت می‏باشد. نوع همزمان (Real Time) و نوع غیر همزمان (Un-RealTime) . برای یک زمانبند غیر همزمان 3 نوع اجرا برقرار می‏باشد (نوع فهرستی، کومه‏ای و تقویمی) با این وجود همگی بطور منطقی به یک صورت اجرا می‏گردند. وجود این تعدد بدلیل سازگاری با متدهای مانده از قبل می‏باشد. زمانبند غیرهمزمان تقویمی بعنوان پیش فرض تنظیم شده است. در زیر یک مثال از یک زمانبند رویداد مشخص انتخاب شده است،

. . .
set ns [new Simulator]
$ns use-scheduler Heap
. .

دیگر استفاده از زمانبند رویداد، زمانبندی رویدادهای شبیه‏سازی است، از قبیل اینکه چه وقتی کاربرد ftp شروع می‏شود، در چه زمان یک شبیه‏سازی متوقف می‏شود یا اینکه از آن برای تولید سناریوی شبیه‏سازی قبل از انجام یک شبیه‏سازی استفاده می‏شود. یک Object "AtEvent" در واقع یک کلاس فرزند از رویداد است، بطوریکه دارای یک متغیر اضافی برای نگهداری رشته گرفته شده، می‏باشد. هر چند که در زمانبند رویداد با آن همانند یک رویداد معمولی رفتار می‏شود. هنگامیکه یک شبیه‏سازی آغاز گردد و یک زمان برای یک tras در صف رویدادها رسید، AtEven به یک "AtEvent handler"داده می‏شود که یکبار برای همه AtEven ها ایجاد شده است و دستور Otcl مشخص شده بوسیله فیلد string از AtEven اجرا می‏گردد. در زیر خط زمانبندی رویدادهای شبیه‏سازی به مثال بالا افزوده شده است.

. . .
set ns [new Simulator]
$ns use-scheduler Heap
$ns at 300.5 "complete_sim"
. . .

proc complete_sim {} {
. . .
}

در مثال بالا ممکن است بنظر رسد که at time "string" یک تابع عضو از Object شبیه ساز می‏باشد. اما بخاطر داشته باشیم که Object شبیه‏ساز فقط بعنوان یک واسطه کاربر عمل می‏کند و در حقیقت توابع عضو Objectهای شبکه یا یک Object زمانبند را فراخوانی می‏نماید. در زیر بخشی از فهرست و توضیحات توابع عضو Objectهای شبیه‏ساز که در ارتباط با توابع عضو زمانبند هستند، آمده است.

Simulator instproc now

# return scheduler's notion of current time
Simulator instproc at args

# schedule execution of code at specified time
Simulator instproc at-now args

# schedule execution of code at now
Simulator instproc after n args

# schedule execution of code after n secs
Simulator instproc run args

# start scheduler
Simulator instproc halt

# stop (pause) scheduler

4-2 اجزای شبکه
در این بخش در مورد اجزای NS که غالباً اجزای شبکه مرکب می‏باشد، صحبت خواهد شد. شکل 6 بخشی از یک کلاس Otcl سلسله مراتبی NS را نشان می‏دهد که به درک اجزای پایه شبکه کمک خواهد کرد.

شکل6: سلسله مراتب کلاسها

ریشه این درخت، کلاس TclObject است که خود یک Superclass برای همه Objectهای کتابخانه Otcl، اجزا، تایمرها و دیگر Objectهای مثلاً مرتبط با NAM، محسوب می‏شود. بعنوان یک کلاس پدر از Otcl Object، کلاس NS Object، سوپرکلاس همه Objectهای پایه شبکه است که با بسته‏ها سروکار دارد. و ممکن است Objectهای مرکب شبکه را از قبیل گره‏ها و اتصالات ایجاد نماید. اجزای اصلی پایه شبکه مجدد بدرون 2 زیر کلاس بنام‏های Connector و Classifier که مبتنی بر تعداد مسیرهای داده‏های خروجی هستند، تقسیم می‏شوند. Objectهای اصلی شبکه که فقط دارای یک مسیر داده‏ای هستند در کلاس Connector و Objectهایی که ممکن است چند مسیر داده داشته باشند در کلاس Classifier قرار می‏گیرند.

* گره و مسیریابی
گره یک Object مرکب ایجاد شده از یک Object ورودی است همانگونه که در شکل 7 نشتن داده شده است، 2 نوع گره در NS وجود دارد. یک گره Unicast و یک گره Multicast.

شکل7: گره (Multicast & Unicast)

در NS گره‏های Unicast، گره‏های پیشفرض می‏باشند. برای ایجاد گره های Multicast کاربر باید درست بعد از ایجاد یک زمانبند Object مشخصاً در اسکریپت Otcl آنرا ذکر نماید. بعد از مشخص کردن نوع گره کاربر همچنین می تواند یک پروتکل مسیریابی مشخص بغیر از پیش فرض موجود انتخاب نماید.

* اتصال
هنگامیکه یک کاربر با استفاده از تابع عضو duplex-link از یک Object شبیه ساز، یک اتصال ایجاد نمود، 2 اتصال ساده در هر 2 جهت ایجاد خواهد شد (شکل زیر).

شکل8: اتصال

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

o ردیابی
در NS فعالیتهای شبکه از طریق اتصالات ساده ردیابی می‏شوند. اگر شبیه ساز برای ردیابی فعالیتهای شبکه تنظیم باشد، اتصالات ایجاد شده بعد از شروع Objectهای زیر را همانطور که در شکل 9 آمده انجام می‏دهند. کاربران همچنین می‏توانند مشخصاً یک Object ردیابی از نوع type بین گره‏های مشخص src و dst با استفاده از دستورcreate-trace {type file src dst} ایجاد کنند.

شکل9: وارد کردن Objectهای ردیابی

هنگامیکه هر Object ردیابی وارد شده (i.e. EnqT, DeqT, DrpT and RecvT) یک بسته دریافت می‏کند. آن در فایل ردیابی مشخصی بدون هیچ صرف زمان شبیه سازی نوشته می‏شود و بسته به Object شبکه بعدی داده خواهد شد.

o صف مانیتورینگ
اساساً Objectهای ردیابی برای ثبت بسته‏های ورودی در جایی که مستقر هستند، طراحی شده‏اند. هر چند که هر کاربر اطلاعات کافی از ردیابی کسب می‏کند، لیکن ممکن است او علاقمند به دانستن اتفاقات درون یک صف خروجی خاص باشد. برای مثال یک کاربر علاقمند به رفتار صف RED ممکن است بخواهد تغییرات متوسط اندازه صف و اندازه صف فعلی از یک صف RED مشخص را اندازه‏گیری نماید. مشاهده درون صف می‏تواند از طریق Objectهای جاسوس صف همانگونه که در شکل 10 آمده است، انجام شود.

شکل10: صف مانیتورینگ

* مثالی از جریان بسته‏ها
تا کنون 2 جزء بسیار مهم از شبکه (گره و اتصال)، آزموده شد. شکل 11 تنظیمات و جریان داده یک مثال شبیه سازی شبکه را نشان می‏دهد. شبکه شامل 2 گره است (n0 , n1) که بترتیب دارای آدرسهای شبکه 0 و 1 می‏باشند. نماینده tcp به n0 پیوست شده و از پورت 0 برای ارتباط با یک Tcp Sink Object که به پورت 0 از گره n1 پیوست شده استفاده می‏کند.

شکل11: مثالی از جریان بسته‏ها

قابل توجه است که شکل فوق رفتار دقیق یک ftp را بروی tcp نشان نمی‏دهد، بلکه نشاندهنده جزئیات درونی، تنظیم و جریان بسته‏ها در شبیه سازی شبکه نیز می‏باشد.

5-2 بسته
یک بسته NS از یک پشته هدرها و یک فضای داده اختیاری (شکل 12)، ایجاد شده است. بعنوان یک یادآوری از بخش ؛مثال ساده شبیه سازی؛ قالب یک هدر بسته زمانیکه یک Object شبیه ساز ساخته می‏شود، ایجاد می‏گردد. جاییکه همه هدرهای ثبت شده، از قبیل هدرهای مشترک که عموماً بوسیله هر Objectی که نیاز باشد استفاده می‏شوند، هدر IP، هدر Tcp، هدر Rtp و هدر ردیابی، تعریف شده‏اند. و افست هر هدر در پشته ثبت گردیده است. این بدان معناست که خواه یک هدر مشخص شده استفاده شده یا نشود، یک پشته از همه هدرهای ثبت شده وقتیکه یک بسته بوسیله یک نماینده معین گردید، ایجاد می‏شود و هر هدر Object شبکه می‏تواند با استفاده از مقدار متناظر افست به هر بسته در پشته دسترسی یابد.

شکل12: قالب بسته NS

معمولاً هر بسته فقط پشته هدر دارد (بهمراه یک اشاره‏گر به فضای دیتا که null می‏باشد). هرچند یک بسته می‏تواند داده‏های واقعی را (از یک برنامه کاربردی) بوسیله تعیین یک فضای داده حمل نماید، لیکن تعداد کمی از برنامه‏های کاربردی و نماینده‏های اجرایی این امر را پشتیبانی می‏کنند.

3. بعد از شبیه سازی

1-3 مثالی از تحلیل ردیابی
مثال 4 یک اسکریپت Otcl مشابه مثال نشانداده شده قبلی با اندکی خطوط بیشتر برای ایجاد یک فایل ردیابی و نوئشتن درون آن می‏باشد.

مثال4: اسکریپت شبیه سازی NS با فعال بودن ردیابی

اجرا کردن اسکریپت فوق یک فایل ردیابی NAM که بعنوان ورودی برای NAM می‏تواند استفاده گردد را با نام out.tr تولید می‏کند. شکل 13 نشاندهنده فرمت trace و مثال داده ردیابی از out.tr می‏باشد.

شکل13: مثالی از قالب ردیابی

هر خط ردیابی با یک توصیفگر رویداد (+ ، – ، d ، r) آغاز می‏شود که بدنبال آن زمان شبیه سازی (به ثانیه)، مربوط به آن رویداد بهمراه گره‏های مبداٌ و مقصد آمده است. اگر شکل 9 بخش اجزای شبکه جاییکه در یک اتصال هر نوع رویدادی ردیابی شده است نگاه کنیم، اطلاعات بعدی در خط قبل از پرچم‏ها (هنگامیکه پرچمی تنظیم نشد بصورت ؛—–؛ نمایان می‏شود)، نوع بسته و اندازه آنرا (به بایت) مشخص می‏کند. فیلد بعدی شناسه جریان داده از IPV6 می‏باشد (fid) که هر کاربر می‏تواندبرای هر جریان داده در ورودی اسکریپت Otcl آنرا تنظیم نماید. با ابن وجود ممکن است در شبیه سازی از fid استفاده نشود. کاربران می‏توانند از این فیلد بمنظور تجزیه و تحلیل استفاده نمایند. همچنین فیلد fid زمانیکه رنگ جریان برای نمایش NAM مشخص می‏شود، بکار می‏رود. 2 فیلد بعدی آدرس‏های مبداٌ و مقصد به شکل‏های ؛پورت و گره؛ هستند. فیلد بعدی شماره ترتیب بسته‏های مربوط به پروتکل‏های لایه‏های شبکه را نشان می‏دهد.
در زیر یک مثال انتقال داده کوچک آمده است. در این مثال از یک دستور نوشته شده در Perl بنام "Column" که ستونهایی را از داده ورودی انتخاب می‏کند، استفاده شده است.

cat out.tr | grep " 2 3 cbr " | grep ^r | column 1 10 | awk '{dif = $2 – old2; if(dif==0) dif = 1; if(dif > 0) {printf("%dt%fn", $2, ($1 – old1) / dif); old1 = $1; old2 = $2}}' > jitter.txt

این فرمان پوسته رویداد (event shell) دریافت بسته cbr را در n3 انتخاب می‏کند، همچنین شماره ستون 10 و زمان 1 را انتخاب می‏نماید و تفاوت زمان دریافت آخرین بسته را تقسیم بر تفاوت شماره ترتیب (برای بسته‏های تلف شده) برای هر شماره ترتیب محاسبه می‏نماید. در شکل محور X نشاندهنده شماره ترتیب بسته و محور Y نشاندهنده زمان شبیه سازی به ثانیه می‏باشد.

شکل14: گراف دریافتی (cbr) از گره n3

4. توسعه NS

1-4 در کجا بدنبال چه چیزی باشیم؟

قبل از ورود به بحث توسعه NS، بطور خلاصه مطرح می‏کنیم که چه اطلاعاتی در چه فهرست‏ها یا فایلهایی ذخیره می‏شوند. شکل 15 بخشی از یک ساختار فهرستی شبیه ساز را نشان می‏دهد.

شکل15: ساختار فهرستی NS

از جمله زیرفهرست‏های ns_all_22 ، ns-2 جاییست که همه اجراهای شبیه ساز (چه در C++ و یا در Otcl) را داراست. درون این فهرست همه کدهای Otcl و اسکریپت‏های مثال تست در زیر فهرستی بنام tcl قرار گرفته‏اند و اغلب کدهای C++ هستند که زمانبند رویدادها آنها را ایجاد می‏کند و کلاسهای Objectهای اجزای شبکه، به استثنای آنهایی که به www مربوط می‏شوند، همگی در سطح اصلی قرار گرفته‏اند.
فهرست tcl دارای زیر فهرستهاییست که از آن جمله فهرست lib که شامل کدهای منبع Otcl که برای اغلب بخشهای پیاده‏سازی پایه‏ای و اساسی بکار می‏روند، می‏باشد (نماینده، گره، اتصال، بسته، آدرس مسیریابی و غیره). بیاد داشته باشیم که کدهای منبع Otcl برای LAN و Web و پیاده‏سازیهای Multicast در زیر فهرستهای جداگانه‏ای از tcl قرار دارند. در زیر یک بخش از فهرست فایلهای موجود در زیر فهرست ns2/tcl/lib آمده است.

* ns-lib.tcl:
کلاس شبیه ساز و تعاریف اغلب توابع عضو آن به استثنای LAN ، Web و Multicast در اینجا قرار دارند.

* ns-default.tcl:
مقدار پیشفرض برای پارامترهای قابل پیکریندی برای اجزای مختلف شبکه در اینجا قرار دارند. از آنجایی که اغلب اجزای شبکه در C++ ایجاد شده‏اند، پارامترهای قابل پیکربندی در واقع متغیرهای C++ هستند که از طریق تابع اتصال Otcl قابل استفاده می‏باشند.

* ns-packet.tcl:
پیاده‏سازی ایجاد قالب هدر بسته‏ها در اینجا قرار دارد. زمانیکه یک هدر بسته جدید ایجاد می‏کنیم، باید هدر را در این فایل ثبت نماییم.

* other OTcl files:
سایر فایلهای otcl در این فهرست شامل پیاده‏سازی Otcl مربوط به Objectهای شبکه مرکب یا Objectهای کنترلی شبکه در C++ ، می‏باشند. برنامه ftp بطور کامل در Otcl ایجاد شده و کد منبع آن در ns-sourc قرار دارد.

2-4 اتصال Otcl
بسط دادن NS بوسیله افزودن یک Object اصلی شبکه جدید، معمولاً درگیر ساختن اتصال Otcl از کد C++ می‏شود. پس از آن کلاس Object در مسیر داده‏ها باید بخاطر کارایی بیشتر در C++ نوشته شود. این بخش اتصالات C++/Otcl فراهم در NS را با ارائه یک مثال ایجاد نماینده ساده بنام "my agent" که رفتار یک نماینده را ندارد (مثلاً بسته‏ای ایجاد و منتقل نمی‏کند)، مطرح می‏کند. شکلهای 16 تا 19 بخشهای فایل C++ نوشته شده برای "my agent" را بهمراه یک پیاده‏سازی کامل (با 3 خط هدر اضافی) نشان می‏دهند.

شکل16: مثالی از اجزای شبکه و Object اتصال در C++

شکل17: مثال افزایش محدوده متغیر

شکل18: مفسر فرمان Otcl

شکل19: اجرای فرمان Otcl از یک C++ Object

5. ارائه چند مثال

1-5 شبکه محلی (LAN)
در این بخش به مثالی از اسکریپت شبیه سازی یک شبکه محلی اشاره شده و توپولوژی شبکه و سناریوی شبیه سازی نشان داده شده است.

شکل 20: توپولوژی شبیه سازی شبکه محلی

2-5 پخش چندتایی (Multicast)
این بخش به اسکریپت شبیه سازی یک مثال پخش چندتایی (Multicast) اشاره دارد و نتیجه شبیه سازی در پنجره NAM نمایش داده شده است.

شکل21: پنجره NAM از شبیه سازی Multicast

3-5 سرویس دهنده Web
این بخش اشاره‏ای به شبیه سازی یک سرویس دهنده Web داشته و توپولوژی شبکه در آن نشان داده شده است.
شکل22: توپولوژی شبیه سازی شبکه سرویس دهنده Web

24


تعداد صفحات : 32 | فرمت فایل : word

بلافاصله بعد از پرداخت لینک دانلود فعال می شود