شبیهساز ns-3 یک شبیهساز شبکه مبتنی بر رویدادهای گسسته (Discrete-event network simulator) است که بهطور ویژه برای کاربردهای پژوهشی و آموزشی طراحی شده است. پروژه ns-3 که از سال 2006 آغاز شده، یک پروژه متنباز است که توسعه نسخههای مختلف ns-3 را بر عهده دارد [1]. لازم به ذکر است که ns-3 برای فراهمکردن یک بستر شبیهسازی شبکهای باز (Open) و قابلگسترش جهت پژوهش و آموزش در حوزه شبکه توسعه یافته است. بهطور خلاصه، ns-3 مدلهایی از نحوه عملکرد و رفتار شبکههای دادهمحور (Packet Networks) ارائه میدهد و یک موتور شبیهسازی (Simulation engine) در اختیار کاربران قرار میدهد تا آزمایشهای شبیهسازی خود را اجرا کنند. از جمله دلایل استفاده از ns-3 این است که امکان انجام مطالعههایی را فراهم میکند که اجرای آنها در سیستمهای واقعی دشوار یا حتی غیرممکن است. همچنین ns-3 اجازه میدهد رفتار سیستمها در محیطی کاملاً کنترلشده و قابل تکرار بررسی شود و فرصتی فراهم میکند تا کاربران بهتر با نحوه کار شبکهها آشنا شوند. اگرچه مجموعه مدلهای موجود در ns-3 عمدتاً بر شبیهسازی پروتکلها و شبکههای اینترنتی تمرکز دارند، اما ns-3 محدود به سیستمهای اینترنتمحور نیست و بسیاری از کاربران از آن برای مدلسازی سامانههایی خارج از حوزه اینترنت نیز استفاده میکنند [1].
مهمترین ویژگیهای ns3
ابزارهای شبیهسازی بسیاری برای مطالعه و تحلیل شبکهها وجود دارند. در ادامه، چند ویژگی متمایزکنندهی ns-3 در مقایسه با سایر ابزارهای شبیهسازی ارائه شده است [1].
- ns-3 بهصورت مجموعهای از کتابخانهها طراحی شده است که میتوان آنها را با یکدیگر و همچنین با کتابخانههای نرمافزاری خارجی ترکیب کرد. در حالیکه برخی پلتفرمهای شبیهسازی یک محیط یکپارچه همراه با رابط کاربری گرافیکی ارائه میدهند و تمام فعالیتها در همان محیط انجام میشود. لذا، ns-3 از این نظر ماژولارتر (More modular) است. برای کار با ns-3 میتوان از ابزارهای خارجی مختلفی برای انیمیشنسازی، تحلیل داده و بصریسازی استفاده کرد. با این حال، کاربران باید انتظار داشته باشند که بخش عمده کار را از طریق خط فرمان (Command line) و با استفاده از ابزارهای توسعه نرمافزاری C++ و/یا Python انجام دهند.
- ns-3 عمدتاً بر روی سیستمعاملهای لینوکس (Linux) و سیستمعامل مک (macOS) مورد استفاده قرار میگیرد. البته لازم به ذکر است که ns-3 از سیستمهای توزیع نرمافزاری برکلی (Berkeley Software Distribution) که به اختصار BSD نامیده می شوند، و همچنین چارچوبهای ویندوز (Windows frameworks) که امکان ساخت کد لینوکسی را فراهم میکنند—مانند Windows Subsystem for Linux (WSL) یا Cygwin—نیز پشتیبانی به عمل می آورد . در حال حاضر نسخه بومی Visual Studio ویندوز پشتیبانی نمیشود، هرچند یک توسعهدهنده در حال کار روی افزودن این پشتیبانی برای نسخههای آینده است. لازم به ذکر است که Cygwin مجموعهای از ابزارهای متنباز است که امکان ساخت و اجرای برنامههای یونیکسی (Unix) یا لینوکسی (Linux) را در سیستمعامل مایکروسافت ویندوز (Microsoft Windows) فراهم میکند [2].
- برای کسانی که با ns-2 (ابزار شبیهسازی مشهوری که پیش از ns-3 استفاده میشد) آشنا هستند، چشمگیرترین تفاوت هنگام مهاجرت به ns-3 نوع زبان اسکریپتنویسی است. در ns-2 برنامهها با OTcl اسکریپتنویسی میشوند و نتایج شبیهسازی با ابزار Network Animator (nam) قابل مشاهده است. در ns-2 اجرای شبیهسازی صرفاً با C++ (یعنی نوشتن یک برنامه main() بدون هیچ OTcl) امکانپذیر نیست. علاوه بر این، برخی اجزای ns-2 با C++ نوشته شدهاند و برخی دیگر با OTcl.
- در ns-3 اما شبیهساز کاملاً با C++ پیادهسازی شده و اتصالات (bindings) پایتون نیز بهصورت اختیاری وجود دارد. بنابراین اسکریپتهای شبیهسازی را میتوان هم با C++ و هم با Python نوشت. ابزارهای جدید برای انیمیشن و بصریسازی نیز در دسترس هستند و توسعه آنها ادامه دارد. از آنجا که ns-3 فایلهای ردگیری بستهها را با فرمت pcap تولید میکند، میتوان از ابزارهای دیگر نیز برای تحلیل این دادهها استفاده کرد.
ns-2 یا ns-3؟
سوال مهمی که ممکن است در ذهن کاربران ایجاد شود این است که آیا همچنان باید از ns-2 استفاده کنم یا از ns-3 کنم؟
اگر کاربر بهخاطر تجربه قبلی با ns-2 یا استفاده از مدلی که فقط در ns-2 موجود است به این نسخه نیاز نداشته باشد، استفاده از ns-3 برای او آسانتر، سریعتر و کارآمدتر خواهد بود. دلایل این برتری در ادامه آمده است [1].
- ns-3 بهطور فعال نگهداری میشود و یک فهرست پستی کاربری پویا و پاسخگو دارد، در حالیکه ns-2 فقط بهصورت محدود پشتیبانی میشود و بیش از یک دهه است که توسعه چشمگیری در شاخه اصلی کد آن انجام نشده است.
- ns-3 قابلیتهایی ارائه میدهد که در ns-2 وجود ندارند؛ برای مثال محیطی برای اجرای کدهای واقعی در شبیهساز، که به کاربر اجازه میدهد بخشهایی از پیادهسازی واقعی را مستقیماً در محیط شبیهسازی اجرا کند.
- همچنین ns-3 سطح پایینتری (Lower base level of abstraction) از انتزاع را نسبت به ns-2 ارائه میدهد و همین موضوع باعث میشود رفتارش به نحوه کار سیستمهای واقعی نزدیکتر باشد. برخی محدودیتهایی که در ns-2 وجود داشت—مانند مشکل در پشتیبانی صحیح از چند نوع واسط شبکه روی یک گره—در ns-3 برطرف شدهاند.
سطح انتزاع بالا یعنی یک سیستم یا مدل، جزئیات پیچیده دنیای واقعی را پنهان میکند و فقط تصویر کلی و سادهشدهای از آن را نشان میدهد. کار با این سطح آسانتر است، اما دقت کمتری دارد. در مقابل، سطح انتزاع پایین جزئیات واقعیتری را نمایش میدهد؛ بنابراین شبیهسازی دقیقتر و شبیهتری به دنیای واقعی ارائه میکند، هرچند پیچیدگی بیشتری دارد. برای مثال، در یک بازی رانندگی با سطح انتزاع بالا، فقط سرعت، ترمز و فرمان شبیهسازی میشود؛ اما در سطح انتزاع پایین، جزئیاتی مانند اصطکاک لاستیک، انتقال وزن خودرو، عملکرد ترمز ABS و شرایط جاده نیز مدلسازی میشود [1].
نقاط ضعف ns-3:
در ادامه دو مورد از مهمترین نقاط ضعف ns-3 تشریح شده است:
- نمایشهای گرافیکی این شبیهساز هنوز کامل نیست و بهطور مداوم در حال توسعه و بهروزرسانی است. از آنجا که ns-3 شبیهسازی نسبتاً جدید با بهروزرسانیهای مداوم در ماژولهای مختلف است، به دلیل ناسازگاری، امکان استفاده همزمان یا ترکیب آن با ns-2 وجود ندارد [2].
- اصلیترین ایراد NS-3 پیچیدگی در یادگیری آن است، بهطوریکه برای تسلط کامل بر این شبیهساز، زمان زیادی صرف میشود. بسیاری از پژوهشگران معتقدند که فرایند یادگیری و استفاده مؤثر از NS-3 همچنان یک چالش حلنشده به شمار میرود [2].
منابع