NS شبيهسازي شئ گراست كه بصورت گسسته مبتني بر رويدادها شبكه را شبيه سازي ميكند، اين برنامه در دانشگاه بركلي با زبانهاي C++ و Otcl ايجاد شده و بسط يافته است. NS اساساً براي پيادهسازي شبكههاي محلي و گسترده مفيد ميباشد. هرچند استفاده از NS براي افرادي كه با اصول شبيهسازها آشنا هستند ساده خواهد بود اما بكارگرفتن اين برنامه براي كاربران مبتدي استفاده از شبيه سازها كاملاً دشوار است زيرا تعداد وستندات و راهنماهاي مناسب براي كاربران مبتدي بسيار اندك ميباشد. با وجود اين مستندات زيادي وجود دارد كه بوسيلة افراد حرفهاي در شبيه سازي براي كاربران حرفهاي NS نوشته شده است. هدف از اين نوشته ارائة برخي ايده از چگونگي عملكرد شبيه سازها، راهنمايي براي توسعه و ادامة راه، آشنايي با اجزاي شبكه در كدهاي شبيه ساز، چگونگي ايجاد اجزاي شبكة جديد و …. ميباشد. عمدة مطالب با پرداختن به مثالهاي ساده و توضيحات مختصر مبتني بر تجربيات مختلف بيان شده است.
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 بطور جزئي با مثالهايي توضيح داده خواهد شد.
همانگونه كه در بخش قبل ذكر گرديد. NS اساساً يك مفسر Otcl با با كتابخانه هاي Object شبيه سازي شبكه ميباشد. دانستن چگونگي برنامهنويسي در محيط Otcl براي NS مفيد خواهد بود كه در اين بخش مثالهايي به اين منظور ارائه خواهد ميگردد.
در اين بخش پيرامون زمانبند رويدادهاي گسسته در NS صحبت ميشود. همانگونه كه در بخشهاي قبل آمده، استفاده كنندههاي اصلي زمانبند رويدادها اجزايي از شبكهاند كه تاٌخيرهاي بستهها يا زمانهاي مورد نياز آنها را شبيهسازي ميكنند. شكل 5 نشان ميهد كه هر Object شبكه از يك زمانبند رويداد استفاده ميكند، بياد داشته باشيم كه يك Object از شبكه كه يك رويداد را منتشر ميكند كسي است كه بعداً در زمانبندي، يك رويداد را بكار ميبرد. همچنين بايد دانست كه مسير داده بين Objectهاي شبكه و مسير رويدادها از هم متفاوتند. در حقيقت بستهها بين يك Object شبكه و Object شبكة ديگر با استفاده از روش send(Packet* p) {target_->recv(p)}; براي ارسال و روش recv(Packet*, Handler* h = 0) براي دريافت، دست به دست ميشوند.
يك بستة NS از يك پشتة هدرها و يك فضاي دادة اختياري (شكل 12)، ايجاد شده است. بعنوان يك يادآوري از بخش ؛مثال سادة شبيه سازي؛ قالب يك هدر بسته زمانيكه يك Object شبيه ساز ساخته ميشود، ايجاد ميگردد. جاييكه همة هدرهاي ثبت شده، از قبيل هدرهاي مشترك كه عموماً بوسيلة هر Objectي كه نياز باشد استفاده ميشوند، هدر IP، هدر Tcp، هدر Rtp و هدر رديابي، تعريف شدهاند. و افست هر هدر در پشته ثبت گرديده است. اين بدان معناست كه خواه يك هدر مشخص شده استفاده شده يا نشود، يك پشته از همة هدرهاي ثبت شده وقتيكه يك بسته بوسيلة يك نماينده معين گرديد، ايجاد ميشود و هر هدر Object شبكه ميتواند با استفاده از مقدار متناظر افست به هر بسته در پشته دسترسي يابد.
بسط دادن NS بوسيلة افزودن يك Object اصلي شبكة جديد، معمولاً درگير ساختن اتصال Otcl از كد C++ ميشود. پس از آن كلاس Object در مسير دادهها بايد بخاطر كارايي بيشتر در C++ نوشته شود. اين بخش اتصالات C++/Otcl فراهم در NS را با ارائة يك مثال ايجاد نمايندة ساده بنام “my agent” كه رفتار يك نماينده را ندارد (مثلاً بستهاي ايجاد و منتقل نميكند)، مطرح ميكند. شكلهاي 16 تا 19 بخشهاي فايل C++ نوشته شده براي “my agent” را بهمراه يك پيادهسازي كامل (با 3 خط هدر اضافي) نشان ميدهند.