محاسبه THROUGHPUT با استفاده از NS2

بدون ديدگاه

            ns یا شبیه ساز شبکه (همچنین با توجه به نسل فعلی آن ns-2 نیز معروف است) یک شبیه ساز شبکه رویدادهای گسسته است. این در آکادمی ها به دلیل گسترده بودن (به دلیل مدل منبع باز) و مستندات آنلاین فراوان ، محبوب است. ns از جمله سایرین در شبیه سازی پروتکل های مسیریابی و چند مرحله ای مورد استفاده قرار می گیرد و به شدت در تحقیقات شبکه های ad-hoc مورد استفاده قرار می گیرد. ns از مجموعه ای از پروتکل های شبکه محبوب پشتیبانی می کند و نتایج شبیه سازی را برای شبکه های سیمی و بی سیم به طور یکسان ارائه می دهد. همچنین می تواند به عنوان شبیه ساز شبکه با کارکرد محدود استفاده شود. ns برای استفاده تحت نسخه 2 مجوز عمومی GNU مجاز است.

            ns در C ++ ساخته شده است و رابط شبیه سازی را از طریق OTcl ، یک گویش شیء گرا از Tcl فراهم می کند. کاربر با نوشتن اسکریپتهای OTcl ، توپولوژی شبکه را توصیف می کند ، و سپس برنامه اصلی ns آن توپولوژی را با پارامترهای مشخص شده شبیه سازی می کند. NS2 از الگوی زمین مسطح استفاده می کند که در آن فرض می کند محیط صاف و بدون هیچگونه ارتفاعی یا افسردگی است. با این حال دنیای واقعی دارای ویژگی های جغرافیایی مانند دره ها و کوه ها است. NS2 قادر به ضبط این مدل در آن نیست.

            نسل 3 ns از اول ژوئیه 2006 شروع به توسعه کرده و پیش بینی می شود چهار سال طول بکشد. این بودجه توسط مؤسساتی مانند دانشگاه واشنگتن ، انستیتوی فناوری جورجیا و مرکز تحقیقات اینترنتی ICSI با پشتیبانی مشترک گروه تحقیقاتی Planète در INRIA سوفیا-آنتیپولیس تأمین می شود. هم اکنون ns-3 در مرحله توسعه است. این یک شبیه ساز شبکه مبتنی بر رویداد است. (http://www.wikipedia.org/ns.htm).

            ns یک شبیه ساز شی گرا است که با زبان C ++ نوشته شده است و مترجم OTcl به عنوان جلوی مقدمات در آن قرار دارد. شبیه ساز از سلسله مراتب طبقاتی در C ++ (که در این سند سلسله مراتب کامپایل شده نیز نامیده می شود) پشتیبانی می کند ، و یک سلسله مراتب کلاس مشابه در مفسر OTcl (که در این سند نیز سلسله مراتب تفسیری نامیده می شود).

            این دو سلسله مراتب از نزدیک با یکدیگر مرتبط هستند. از دید کاربر ، مکاتبات یک به یک بین یک کلاس در سلسله مراتب تفسیر و دیگری در سلسله مراتب کامپایل وجود دارد. ریشه این سلسله مراتب کلاس TclObject است. کاربران اشیاء شبیه ساز جدیدی را از طریق مفسر ایجاد می کنند. این اشیاء در مفسر فوراً می شوند و توسط یک شیء مربوطه در سلسله مراتب کامپایل شده از نزدیک آینه می شوند. سلسله مراتب کلاس تفسیر شده به طور خودکار با روشهای تعریف شده در کلاس TclClass برقرار می شود. اشیاء با استفاده از کاربر از طریق روش های تعریف شده در کلاس TclObject آینه می شوند. سلسله مراتب دیگری نیز در کد C ++ و اسکریپت OTcl وجود دارد. این سلسله مراتب دیگر به روش TclObject آینه نمی شوند.

 

نرخ بیت ثابت (CBR):

                        بنابراین ، CBR را می توان در دو دسته مختلف تعریف کرد – زمینه فشرده سازی شبکه و صدا. در اینجا ، ما ترافیک CBR شبکه محور را در نظر می گیریم.

            بیت ثابت (CBR) اصطلاحی است که در ارتباطات از راه دور استفاده می شود ، مربوط به کیفیت خدمات. هنگام مراجعه به کدک ها ، رمزگذاری نرخ بیت ثابت بدین معنی است که نرخی که در آن باید داده های خروجی کدگذار مصرف شود ، ثابت است. CBR برای پخش محتوای چندرسانه ای در کانال های با ظرفیت محدود بسیار مفید است زیرا حداکثر سرعت بیت مهم است و نه متوسط ​​، بنابراین CBR می تواند از این ظرفیت استفاده شود. CBR گزینه ای بهینه برای ذخیره سازی نخواهد بود زیرا داده های کافی را برای بخش های پیچیده (در نتیجه کیفیت تخریب) در هنگام هدر دادن داده ها در بخش های ساده ، اختصاص نمی دهد. مشکل عدم اختصاص داده های کافی برای بخش های پیچیده می تواند با انتخاب یک بیت زیاد (به عنوان مثال ، 256 کیلوبیت در ثانیه یا 320 کیلوبیت بر ثانیه) برای اطمینان از وجود بیت های کافی برای کل فرآیند رمزگذاری حل شود ، هرچند اندازه پرونده در انتها به تناسب بزرگتر خواهد بود. اکثر برنامه های کدگذاری ، مانند کدگذاری هافمن یا رمزگذاری طول اجرا ، کدهایی با طول متغیر تولید می کنند که دستیابی کامل به CBR را دشوار می کند. این تا حدودی با تغییر کمیت (کیفیت) حل می شود و با استفاده از بالشتک کاملاً حل می شود. با این حال ، CBR در یک طرح ساده مانند کاهش تمام نمونه های صوتی 16 بیتی به 8 بیت ضمنی است.

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

 

توضیحات توان:

            در فن آوری رایانه ، توان عملیاتی میزان کارهایی است که یک کامپیوتر می تواند در یک بازه زمانی معین انجام دهد. از نظر تاريخي ، توانايي معياري براي مقايسه اثربخشي كامپيوترهاي بزرگ تجاري است كه همزمان برنامه هاي زيادي را اجرا مي كنند. اندازه گیری اولیه کار تعداد مشاغل دسته ای در طی یک روز بود.اقدامات جدیدتر ، ترکیبی از کار پیچیده تر یا تمرکز روی جنبه های خاصی از عملکرد رایانه را فرض می کند. در حالی که “هزینه در هر میلیون دستورالعمل در ثانیه (MIPS)” مبنایی را برای مقایسه هزینه محاسبات خام در طی زمان یا توسط تولید کننده فراهم می کند ، توان عملیاتی از نظر تئوری به شما می گوید که MIPS چه مقدار کار مفید را انجام می دهد. اندازه گیری دیگر بهره وری کامپیوتر عملکرد ، سرعتی که با آن یک یا مجموعه برنامه های دسته ای با حجم کار خاصی اجرا می شود یا تعداد درخواست های تعاملی کاربر با چه پاسخگویی اداره می شود. مقدار زمان بین درخواست های تعاملی کاربر واحد که وارد شده و پاسخ برنامه را دریافت می کنید به عنوان زمان پاسخ شناخته می شود.

            در شبکه های ارتباطی ، مانند اترنت یا رادیو بسته ، توان شبکه به طور متوسط ​​ارسال پیام موفقیت آمیز از طریق کانال ارتباطی است. این داده ها ممکن است از طریق یک پیوند فیزیکی یا منطقی تحویل داده شده یا از یک گره شبکه خاص عبور کنند. معمولاً توان آن در بیت بر ثانیه یا بسته های داده در هر شکاف زمانی اندازه گیری می شود. این می تواند حداکثر در طول ، حداکثر توان نظری ، حداکثر توان پایدار ، توان اوج ، توان عادی و غیره محاسبه شود.

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

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

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

کنترل جریان لایه حمل و نقل و اجتناب از احتقان : برای مثال ، شروع کند TCP ، ممکن است باعث کمترین بازده از حداکثر توان شود.

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

 

حداکثر توان:

            کاربران دستگاه های ارتباطی ، طراحان سیستم و محققان در تئوری ارتباطات اغلب علاقه مند به دانستن عملکرد مورد انتظار یک سیستم هستند. از منظر کاربر ، این اغلب بیان می شود که “کدام دستگاه داده های من را برای نیازهای من به طور مؤثر در آنجا دریافت می کند؟” ، یا “کدام دستگاه بیشترین اطلاعات را برای هر واحد هزینه ارائه می کند؟” طراحان سیستم اغلب علاقه مند به انتخاب مؤثرترین معماری یا محدودیت های طراحی برای یک سیستم هستند که عملکرد نهایی آن را هدایت می کند. در اکثر موارد ، معیار آنچه که یک سیستم قادر به انجام آن است ، یا “حداکثر عملکرد” ​​آن چیزی است که کاربر یا طراح به آن علاقه مند هستند. هنگام بررسی توان ، از اصطلاح “حداکثر توان” استفاده می شود. حداکثر توان در اصل مترادف با ظرفیت پهنای باند دیجیتال است.

            آنها “حداکثر توان نظری” ، “حداکثر توان قابل دستیابی” و “توان حداکثر اندازه گیری شده” و “حداکثر توان پایدار” هستند. اینها مقادیر متفاوتی را نشان می دهند و باید در هنگام مقایسه مقادیر متفاوت “حداکثر توان” از همان تعریف استفاده کرد. مقایسه مقادیر توان نیز به هر بیت که دارای همان مقدار اطلاعات است بستگی دارد. فشرده سازی داده ها می تواند به طور قابل توجهی از محاسبات توان عملیاتی ، از جمله تولید مقادیر بیشتر از 100٪ ، بکاهد. اگر ارتباط با چندین لینک در سری با نرخ بیت متفاوت واسطه باشد ، حداکثر توان پیوند کلی کمتر از یا مساوی با کمترین نرخ بیت است. کمترین مقدار لینک در این سریال به عنوان تنگنا گفته می شود.

توان اندازه گیری قله:

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

توضیحات پهنای باند:

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

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

            از نرم افزار تست پهنای باند برای تعیین حداکثر پهنای باند شبکه یا اتصال اینترنت استفاده می شود. این کار معمولاً با تلاش برای بارگیری یا بارگذاری حداکثر مقدار داده در یک بازه زمانی خاص یا مقدار مشخصی از داده ها در حداقل زمان انجام می شود. به همین دلیل ، آزمایش های پهنای باند می توانند انتقال اینترنت از طریق اتصال اینترنتی را همانطور که انجام شده است به تأخیر بیندازند و می توانند باعث افزایش هزینه‌های داده شوند. یک روش دقیق تر استفاده از نرم افزارهای اختصاصی مانند Netcps ، IxChariot ، Iperf ، Ttcp ، netperf یا bwping برای اندازه گیری حداکثر توان دسترسی به شبکه است.

 

فرمول:

            زمان انتقال = اندازه پرونده / پهنای باند (ثانیه)

            توان = اندازه پرونده / زمان انتقال (bps)

اندازه گیری ترافیک شبکه:

            در شبکه های رایانه ای ، اندازه گیری میزان ترافیک شبکه فرایند اندازه گیری میزان و نوع ترافیک در یک شبکه خاص است. این امر به ویژه با توجه به مدیریت پهنای باند مؤثر است.

            ابزارهای مختلف نرم افزاری برای اندازه گیری ترافیک شبکه در دسترس هستند. برخی از ابزارها ترافیک را با خرخر کردن اندازه می گیرند و برخی دیگر از SNMP ، WMI یا سایر عوامل محلی برای اندازه گیری پهنای باند در دستگاه ها و روترهای شخصی استفاده می کنند. با این حال ، دومی به طور کلی نوع ترافیک را تشخیص نمی دهند و همچنین برای دستگاههایی که نرم افزار عامل لازم را اجرا نمی کنند ، مانند دستگاه های سرکش روی شبکه یا دستگاه هایی که هیچ عامل سازگار در دسترس نیست کار می کنند. در حالت دوم ، وسایل درون خطی ترجیح داده می شوند. اینها معمولاً بین شبکه LAN و محل خروج LAN ، به طور کلی WAN یا روتر اینترنت قرار می گیرند و همه بسته هایی که از شبکه خارج می شوند و وارد شبکه می شوند ، از طریق آنها عبور می کنند. در بیشتر موارد ، این دستگاه به عنوان پلی در شبکه عمل می کند تا توسط کاربران قابل ردیابی نباشد.

            ابزارهای اندازه گیری معمولاً این توابع و ویژگی ها را دارند:

    * رابط کاربری (وب ، گرافیک ، کنسول)

    * نمودارهای ترافیکی در زمان واقعی

    * فعالیت شبکه اغلب علیه قوانین تطبیق ترافیک از پیش تنظیم شده گزارش شده است تا نشان داده شود:

          آدرس IP محلی

          آدرس IP از راه دور

          شماره شماره یا پروتکل درگاه

          o به نام کاربر وارد شده اید

    * سهمیه پهنای باند

    * پشتیبانی از شکل دهی به ترافیک یا محدود کردن نرخ (همپوشانی با صفحه کنترل ترافیک شبکه)

    * مسدود کردن وب سایت و فیلتر کردن محتوا را پشتیبانی کنید

    * هشدارها برای آگاه کردن از مدیر بیش از حد استفاده (از طریق آدرس IP یا در کل)

ابزار اندازه گیری شبکه:

            برخی از ابزارهای اندازه گیری شبکه موجود عبارتند از:

    * Argus بسته ها را به داده های دقیق حسابرسی جریان شبکه برای عملیات ، عملکرد و مدیریت امنیتی پردازش می کند.

    * Cacti به کاربر اجازه می دهد تا در فواصل از پیش تعیین شده نظرسنجی کند و داده های حاصل را نمودار کند.

    * کریکت ابزاری است که در ابتدا برای شبکه های WebTV نوشته شده است.

    * ET / BWMGR by Emerging Technologies Inc محصولی نرم افزاری است که مانند MRTG است. قادر به جمع آوری آمار و نمایش نمودارها در شبکه های چند گیگابیتی.

    * Exbander Precision توسط سیستمهای DBAM

    * <em “mso-bidi-font-style:=”” normal”=””>FireBeast یک فایروال نرم افزاری است که مدیریت پهنای باند و شکل گیری ترافیک را ارائه می دهد.

    * FlowMon توسط INVEA-TECH یک راه حل کامل برای نظارت و تجزیه و تحلیل NetFlow از جمله کاوشگرها تا 10 گیگابایت در ثانیه ، جمع کننده ها و سایر سیستم های نظارت است.

    * <em “mso-bidi-font-style:=”” normal”=””>Infosim از همه فن آوری های مختلف جریان شبکه مانند Netflow ، sFlow ، jFlow ، cFlow یا Netstream پشتیبانی می کند.

    * InterMapper در اصل برای Macintosh Classic در سال 1994 توسط مدیر شبکه کالج Dartmouth ساخته شده است این برنامه با استفاده از SNMP ، Ping و Netflow برای تهیه نقشه شبکه گرافیکی شبیه به HP Openview که استفاده از پهنای باند توسط اطلاعات و پروتکل پورت را نشان می دهد. VLAN آگاه است. سیستم عامل های پشتیبانی شده: MacOS X ، Linux و Windows.

    * MRTG .

    * NetLimiter یک نرم افزار مانیتورینگ و شکل گیری ترافیک برای ویندوز است.

    * OmniPeek یک راه حل مانیتورینگ شبکه پایان به پایان است ، پشتیبانی از بسیاری از آداپتورهای بسته و جمع کننده از راه دور را ارائه می دهد.

    * PRTG با واسط های گرافیکی و وب روی ویندوز اجرا می شود. این بسته ها را با استفاده از Cisco Netflow یا بسته های خرابکاری ضبط می کند یا از SNMP برای نظارت بر استفاده از پهنای باند استفاده می کند.

    * شبکه های PacketTrap – آنالیزور جریان و ترافیک

    * سیستم مانیتورینگ عملکرد شبکه PathSolutions Switchmonitor .

    * SecurActive توسط SecurActive یک راه حل تحلیل رفتار شبکه با تشخیص ناهنجاری های شبکه است.

    * راه حل های شبکه هوشمند Sandvine با استفاده از کلیدهای ترافیک خط مشی ، ترافیک شبکه را اندازه گیری و مدیریت می کنید

    * سیستم نظارت بر عملکرد شبکه SevOne .

    * Solana Networks نقشه های شبکه Layer 2 و 3 را ایجاد می کند و BW و همچنین QoS را اندازه گیری می کند

    * Scrutinizer NetFlow و sFlow Analyzer دید عمیقی به رفتار و روند ترافیک شبکه می دهد. با استفاده از داده های NetFlow ، J-Flow و sFlow ، تحلیلگر ترافیک NetFlow مشخص می کند که کاربران و برنامه های کاربردی بیشترین پهنای باند را مصرف می کنند.

برنامه کلاس:

            کلاس برنامه فقط یک عامل متغیر کلیدی دارد که نشانگر نماینده کلاس است. دو متغیر دیگر ، activRecv_ و activResume_ متغیرهای پرچم هستند ، که نشان می دهد آیا یک شی برنامه باید به ترتیب به توابع recv (nbytes) و رزومه () واکنش نشان دهد. این دو متغیر به طور پیش فرض روی صفر تنظیم می شوند.

پس از ایجاد اتصال آنها ، یک برنامه کاربردی و یک عامل می توانند به ترتیب از طریق نشانگرهای عامل_ و برنامه_ ، عملکردهای عمومی یکدیگر را فراخوانی کنند. توابع عمومی اصلی برنامه Application شامل توابع send (nbytes) ، recv (nbytes) و رزومه کاری () است ، در حالی که کارهایی که در کلاس Agent وجود دارد توابع send (nbytes) ، sendmsg (nbytes) ، close () ، گوش دادن () و set_pkttype (pkttype). جدای از این توابع عمومی ، کلاس برنامه همچنین توابع محافظت شده (شروع) و متوقف () را برای شروع و متوقف کردن یک شی برنامه فراهم می کند. در نهایت، وجود دارد و پنج کلید فرمان OTcl برای برنامه کلاس است که می تواند از دامنه OTcl استناد: شروع {} ، توقف {} ، عامل {} ، ارسال { nbytes } ، و ضمیمه عامل{ عامل } .

            سه عملکرد عمومی برنامه کاربردی زیر:

 ارسال (nbytes): به عامل لایه حمل و نقل متصل شده که کاربر نیاز به ارسال nbytes بار داده دارد ، آگاه سازید. خط 3 با اجرای “عامل _-> sendmsg (nbytes)” تقاضا را به عامل متصل ارسال می کند.

 recv (nbytes): بایت های nbytes را از یک عامل لایه حمل و نقل دریافت کنید. یک عامل UDP nbytes را به عنوان تعداد بایت در یک بسته دریافتی مشخص می کند. در صورت UDP ، nbytes برابر است با اندازه بسته؛ از سوی دیگر،

TCP “nbytes” را به عنوان تعداد بایت های دریافت شده در توالی مشخص می کند. با توجه به احتمال ارسال بسته غیرقابل سفارش ، nbytes می تواند از اندازه یک بسته بیشتر باشد.

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

وظایف عمومی نماینده کلاس :

            برنامه کلاس ممکن است از طریق متغیر agent_ توابع زیر را از نماینده کلاس فراخوانی کند:

 ارسال (nbytes): “nbytes” میزان بار برنامه (یعنی تقاضای کاربر) را به یک عامل دریافت کننده ارسال کنید. اگر nbytes = -1 باشد ، تقاضای کاربر بی نهایت خواهد بود.

 sendmsg (nbytes ، flags): مشابه تابع send (nbytes) ، بلکه پرچم ها را به عنوان متغیر ورودی تغذیه می کنید.

 close (): از یک نماینده بخواهید اتصال را ببندد (فقط برای TCP قابل اجرا است)

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

 set_pkttype (pkttype): نوع متغیر عامل ضمیمه را pkttype قرار دهید.

 

نمایندگان پایه

            عامل NsObject است که وظیفه ایجاد و از بین بردن بسته ها را بر عهده دارد. دو عامل اصلی NS2 وجود دارد: عوامل مسیریابی و عوامل حمل و نقل. یک عامل مسیریابی بسته های کنترل مسیریابی را ایجاد و دریافت می کند ، و دستورات پروتکل های مسیریابی را می دهد تا بر این اساس عمل کنند. با استفاده از یک برنامه به یک شبکه سطح پایین ، یک عامل لایه حمل و نقل ، تراکم و قابلیت اطمینان یک جریان داده را براساس پروتکل لایه حمل و نقل زیرین کنترل می کند (به عنوان مثال ، UDP یا TCP).

 

پیکربندی عامل

            پیکربندی عامل شامل چهار مرحله اصلی است:

(من) درست یک عامل ارسال، دریافت یک عامل و یک برنامه کاربردی با استفاده از “جدید { … } “.

(ب) ضمیمه عوامل به برنامه با استفاده OTcl فرماندهی ضمیمه-agent- { عامل } کلاس برنامه.

(ج) عوامل به شبکه های سطح پایین با استفاده از instproc ضمیمه-agent- ضمیمه { عامل گره } شبیه ساز کلاس.

(iv) عامل ارسال کننده را با استفاده از instproc connect { src dst } از کلاس Simulator در ارتباط با عامل دریافت کننده قرار دهید.

مکانیسم داخلی برای نمایندگان

• یک عامل ارسال کننده : با درخواست برنامه کاربردی مربوط به عملکرد آن sendmsg (…) تقاضای کاربر را دریافت کنید. از طریق sendmsg (…) بسته هایی را با استفاده از تخصیص تابع () ایجاد کنید و بسته های ایجاد شده را با اجرای هدف _-> recv (p، h) به شبکه سطح پایین منتقل کنید.

• یک عامل دریافت کننده : با داشتن یک demultiplexer در سطح پایین ، بسته ها را دریافت کنید و recv عملکرد خود را فراخوانی کنید (p ، ساعت). بسته های دریافت شده را با استناد به تابع (پ) کلاس بسته از بین ببرید.

 

نمایندگان UDP و Null

            UDP (پروتکل Datagram User) یک پروتکل لایه حمل و نقل بدون اتصال است ، که نه کنترل احتقان و نه کنترل خطا را در اختیار شما قرار می دهد. در NS2 از یک عامل UDP به عنوان عامل ارسال کننده استفاده می شود. معمولاً با یک عامل Null (گیرنده) که مسئولیت تخریب بسته ها را بر عهده دارد ، همکار است.

 

نمایندگان تهی (گیرنده)

            یک عامل Null ساده ترین اما یکی از پرکاربردترین عوامل دریافت کننده است. مسئولیت اصلی یک عامل Null جدا کردن بسته ها از طریق عملکرد بدون (p) کلاس بسته است. یک عامل Null توسط یک نماینده کلاس / Oull کلاس OTcl ارائه می شود که مستقیماً از یک نماینده کلاس OTcl گرفته می شود (به پرونده ˜ ns /tcl/lib/ns-agent.tcl مراجعه کنید).

 

نماینده UDP (ارسال کننده)

            یک عامل UDP شاید ساده ترین شکل عاملان ارسال کننده باشد. این امر تقاضای کاربر را برای انتقال داده با استفاده از برنامه ضمیمه شده برای عملکرد خود (به عنوان مثال ، sendmsg (…)) دریافت می کند ، بسته هایی را براساس تقاضا ایجاد می کند و بسته ایجاد شده را به یک شبکه سطح پایین منتقل می کند. از طریق یک C ++ تابع sendmsg (…) از UdpAgent کلاس، از طریق یک دستور ارسال OTcl: یک برنامه ممکن است به سه روش زیر به یک عامل UDP به ارسال بسته های اطلاعاتی استفاده { … } از کلاس OTcl نماینده / UDP، و یا از طریق دستور OTcl sendmsg { … } از OTcl

کلاس عامل / UDP

            عامل UDP توسط یک کلاس C ++ UdpAgent و یک عامل OTcl کلاس / UDP ارائه می شود. این دو کلاس از دامنه Agent از Agent Class مشتق شده اند و با استفاده از یک کلاس نقشه برداری UdpAgentClass محدود می شوند. در NS2 ، UDP در کلاس C ++ UdpAgent پیاده سازی می شود که به یک کلاس OTcl Agent / UDP محدود است.

 

ژنراتور ترافیک داخلی در NS2

نرخ بیت ثابت (CBR)

            یک ژنراتور ترافیک CBR برای هر بازه ثابت ، یک پشتیبان با اندازه ثابت را ایجاد می کند. NS2 با استفاده از کلاس C ++ CBR_Traffic که به یک کلاس OTcl متصل است ، ژنراتورهای ترافیک CBR را پیاده سازی می کند. برنامه / Traffic / CBR به طور پیش فرض فاصله انتقال بین پشت سر هم ، که فاصله بین شروع دو انفجار بار پی در پی است ، می توان با تقسیم اندازه پشتیبان بار با نرخ ارسال محاسبه کرد.

روشن / خاموش نمایی

            یک تولیدکننده ترافیک روشن / خاموش نمایی به عنوان یک تولیدکننده ترافیک CBR در طی یک بازه ON عمل می کند و در طی یک بازه خاموش هیچ گونه بارگیری را ایجاد نمی کند. دوره های روشن و خاموش هر دو به صورت نمایی توزیع می شوند. NS2 با استفاده از کلاس C ++ که EXPOO_Traffic نامیده می شود ، ایجاد کننده ترافیک روشن / خاموش نمایی است که به یک برنامه OTcl کلاس / Traffic / Exonential متصل است.

روشن / خاموش پارتو

یک تولید کننده ترافیک روشن / خاموش پارتو همانند یک ژنراتور روشن / خاموش نمایی نمایی را انجام می دهد اما دوره های روشن و خاموش با توزیع پارتو مطابقت دارد. NS2 با استفاده از کلاس C ++ به نام POO_Traffic که به یک برنامه OTcl کلاس / Traffic / Pareto محدود می شود ، ژنراتورهای ترافیک Pareto On / Off را پیاده سازی می کند.

TCL AND AWK : Tcl را می توان از دستور فرمان پوسته با نحو زیر استفاده کرد:

tclsh [<filename> <arg0> <arg1> …]

از طرف دیگر ، از آنجا که NS2 در Tcl نوشته شده است ، دعوت نامه زیر به همان نتیجه منجر می شود.

>> ns convert.tcl

 

انتساب و بازیابی متغیر:

            Tcl با استفاده از کلمه رزرو شده “مجموعه” مقدار را در یک متغیر ذخیره می کند. مقدار ذخیره شده در یک متغیر را می توان با قرار دادن یک کاراکتر “$” در مقابل نام متغیر بازیابی کرد. علاوه بر این ، یک کلمه رزرو شده “unset” برای پاک کردن مقدار ذخیره شده در یک متغیر استفاده می شود.

 

دستورات می شود و می گذارد:

            دستور به ترتیب پیامی را برای کانال مشخص شده Tcl ارسال و می خواند و می نویسد. به طور خاص ، دستور “می شود” خطی را از کانال Tcl می خواند ، و هر شخصیت را در خط به جز کاراکتر خط آخر به محیط در حال اجرا Tcl منتقل می کند. کانال Tcl می تواند یک استاندارد باشد

کانال یا کانال پرونده. نحو فرمان به شرح زیر است:

می شود <channel> <var>

 تمام کاراکترهای موجود در خط فعلی از کانال کانال در متغیر <var> ذخیره می شوند.

دستور “قرار می دهد” یک رشته <string> را می نویسد و به دنبال آن یک شخصیت پایان خط به کانال Tcl <channel> می رود. اگر <channel> مشخص نشده باشد ، از stdout بعنوان یک کانال پیش فرض استفاده می شود. نحو این دستور به شرح زیر است:

قرار می دهد [-nonewline]] <channel> [<string>

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

 

عبارات ریاضی:

            روش اصلی انجام محاسبات از طریق دستور expr Tcl است .

ما همیشه باید بیان را به [expr] در بندهای فرفری محصور کنیم. این امر به کامپایلر bytecode اجازه می دهد تا کد شما را با دقت بیشتری بهینه کند زیرا تفسیرهای کمتری دارد و محتویات متغیرها و نتایج دستورات به طور غیر منتظره ای معنای عبارت را تغییر نمی دهند. بخش یا کل عبارت بیان ثابت نیست ، به عنوان مثال

   set v [expr “$ a $ op $ b”]                                                

اگر عملگر $ op متفاوت باشد ، پیروی از این عبارت با {} باعث می شود ارزیابی مناسب انجام شود.

 

عملگرها

– + ~!

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

* /٪

ضرب ، تقسیم و باقی مانده عدد صحیح .

+ –

جمع و تفریق.

<< >>

تغییر چپ و راست. معادل ضرب یا تقسیم با قدرت مناسب دو ، و سپس کاهش نتیجه به محدوده قابل نمایش در یک عدد صحیح بر روی سکوی میزبان.

<> <=> =

ترتیب روابط (کمتر از ، بزرگتر از ، کمتر از یا مساوی ، بزرگتر از یا مساوی). توجه داشته باشید که این عملیات بر روی رشته ها و همچنین تعداد کار می کنند ، اما شما احتمالاً بهتر است که به جای این نتیجه ، نتیجه [string مقایسه] را آزمایش کنید. در مورد رشته ای که به نظر می رسد مانند یک عدد ، قابل پیش بینی تر است.

==! =

برابری و نابرابری. توجه داشته باشید که این عملیات بر روی رشته ها و همچنین تعداد کار می کنند ، اما شما احتمالاً بهتر است که نتیجه [رشته برابر] را آزمایش کنید ، زیرا در مورد رشته ای که به نظر می رسد مانند یک تعداد قابل پیش بینی است.

و

خردمندانه و. مقدار کمی در نتیجه تنظیم می شود که بیت مربوطه در هر دو آرگومان تنظیم شود.

^

انحصاری بیت عاقلانه یا OR. مقدار کمی در نتیجه تنظیم می شود که بیت مربوطه دقیقاً در یکی از آرگومان ها تنظیم شود.

|

خردمندانه یا هنگامی که بیت مربوطه در هر یک از آرگومان ها تنظیم می شود ، مقدار کمی تعیین می شود.

و&

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

||

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

x؟ y: z

.

اگر-پس-دیگر ، مانند C (که در آن عبارات x ، y ، z هستند). اگر مقدار x غیر صفر (صحیح) باشد ، عبارت y را برای تولید نتیجه ارزیابی می کنیم و در غیر این صورت عبارت z برای تولید نتیجه ارزیابی می شود. توجه داشته باشید که این عمل یک عمل کوتاه با cicuiting است و اگر x صفر (نادرست) باشد ، بیان z را ارزیابی نمی کند و اگر x غیر صفر (درست) باشد ، بیان y را ارزیابی نمی کند. این شامل گسترش دستورات Tcl در براکت های مربع است ، اما این تأخیر در ارزیابی فقط در صورتی رخ می دهد که کل عبارت در بندهای فرفری محصور باشد. معمولاً استفاده از دستور Tcl [if] به جای این ، حفظ و واضح تر و آسان تر است (و هیچ کندتر نیست. کد بایت تولید شده یکسان است).

<strong “mso-bidi-font-weight:=”” normal”=””>عجب:

            AWK را می توان از یک دستورالعمل به دو طریق بر اساس نحو زیر فراخوانی کرد:

>> awk [-F <ch>] {<pgm>} [<vars>] [<data_file>]

>> awk [-F <ch>] {-f <pgm_file>} [<vars>] [<data_file>]

جایی که {} و [] به ترتیب حاوی استدلال های اجباری و اختیاری هستند. براکت <> حاوی متغیری است که باید در فراخوان با مقادیر واقعی جایگزین شود.

این متغیرها عبارتند از pgm جداکننده ch Field. 

یک اسکریپت AWK pgm_file یک پرونده حاوی یک اسکریپت AWK (به عنوان مثال ، یک فایل AWK)

متغیرهای مورد استفاده در یک پرونده AWK data_file. 

            یک فایل متنی ورودی به طور پیش فرض ، AWK با استفاده از یک فضای سفید (یعنی یک یا چند فضای یا برگه) سوابق را جدا می کند. اما اگر گزینه “-F” موجود باشد ، AWK از <ch> به عنوان جداکننده زمینه استفاده می کند

            دعوت فوقانی یک اسکریپت AWK <pgm> را به عنوان یک آرگومان ورودی می گیرد ، در حالی که مورد پایین یک پرونده AWK <pgm_file> را به عنوان یک آرگومان ورودی می گیرد. در هر دو مورد ، متغیرهای <vars> و پرونده متنی ورودی <data_file> به صورت اختیاری قابل ارائه هستند. اگر یک فایل متنی ورودی ارائه نشده باشد ، AWK منتظر استدلال ورودی از ورودی استاندارد (به عنوان مثال ، صفحه کلید) به صورت خط می باشد.

 

اسکریپت AWK:

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

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

الگوی { عمل }

الگوی { عمل }

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

ساختار برنامه نویسی AWK

            شکل کلی یک برنامه AWK در زیر نشان داده شده است:

BEGIN in <itialization>

<pattern1> {<actions>

<pattern2> {<actions>

.

END {<اقدامات نهایی>

قبل از پردازش یک فایل متنی ورودی ، AWK <initialization> مشخص شده در پرانتزهای مجعد را که بعد از کلمه رزرو شده شروع شده است ، انجام می دهد. سپس ، برای هر رکورد ، اگر رکوردها با الگوی مربوطه مطابقت داشته باشند ، اقدامات انجام می دهند. پس از پردازش کل پرونده ، <اقدامات نهایی> مشخص شده در پرانتزهای فرفری واقع شده پس از کلمه رزرو شده END را انجام می دهد.

 

اپراتورها و خروجی در awk

            عملگرهای اصلی AWK در زیر نشان داده شده است.

+ (علاوه بر این) ++ (افزایش)

– (تفریق) == (کاهش)

* (ضرب) = (انتساب)

/ (تقسیم)٪ (مدول)

            AWK با استفاده از چاپ یا printf متغیر یا رشته ای را به صفحه نمایش می دهد که نحو آن به شرح زیر است:

چاپ <item1> <item2> …

printf (<format> ، <item1> ، <item2> ، …)

جایی که <item1> ، <item2> و غیره می توانند متغیر یا رشته باشند ،

<format> فرمت خروجی است. 

با استفاده از چاپ ، یک رشته باید در یک علامت نقل قول (“” محصور شود ، در حالی که یک متغیر می تواند همانطور که هست نشان داده شود).

 

ساختار کنترل

            به طور مشترک با Tcl ، AWK از سه نوع اصلی ساختار کنترل پشتیبانی می کند: اگر / دیگری ، در حالی که ، و برای. نحو این ساختارهای کنترل به شرح زیر است:

اگر (<شرط>) <عمل 1> [دیگر <اقدام 2>]

در حالی که (<شرط>) <action>

برای (<initialization>؛ <condition>؛ <end-of-loop-action>) <action>

AWK همچنین شامل چهار دستور کنترل بی قید و شرط است:

شکستن حلقه

Contine حلقه را مجدداً راه اندازی کنید

رکورد بعدی را پردازش کنید

با اجرای عملیات پایان ، از برنامه خارج شوید

اجرای برنامه های awk :

            چندین روش برای اجرای یک برنامه awk وجود دارد. اگر برنامه کوتاه است ، ساده ترین آن را در دستوراتی که به صورت awk اجرا می شود ، شامل کنید:

awk “برنامه” input-file1 input-file2 …

همانطور که در ابتدا این برنامه شامل یک سری الگوها و اقدامات است.

            وقتی برنامه طولانی است ، احتمالاً ترجیح می دهید آن را در یک پرونده قرار دهید و آن را با یک فرمان مانند این اجرا کنید:

awk -f program-file input-file1 input-file2 …

هنگامی که با awk آشنا شدید ، اغلب در لحظه ای که می خواهید از آنها استفاده کنید ، برنامه های ساده ای تایپ خواهید کرد. سپس می توانید برنامه را به عنوان اولین آرگومان فرمان awk بنویسید ، مانند این:

awk “برنامه” input-file1 input-file2 …

همانطور که در ابتدا این برنامه شامل یک سری الگوها و اقدامات است.

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

اجرای برنامه های طولانی awk

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

awk -f منبع-فایل ورودی-فایل1 ورودی-فایل2 …

“-f” به برنامه awk می گوید تا برنامه awk را از منبع فایل دریافت کنید. از هر نام پرونده ای برای منبع پرونده استفاده می شود.

 

نظرات در برنامه های awk :

            نظر برخی متنی است که به خاطر خوانندگان انسانی در یک برنامه گنجانده شده است ، و واقعاً جزئی از برنامه نیست. نظرات می توانند توضیح دهند که این برنامه چه کاری انجام می دهد ، و چگونه کار می کند. تقریباً در تمام زبانهای برنامه نویسی مفاهیمی برای اظهار نظر وجود دارد ، زیرا برنامه ها بدون کمک اضافی آنها قابل درک نیست. در زبان awk ، یک نظر با کاراکتر علامت تیز ، # # شروع می شود و تا انتهای خط ادامه می یابد. زبان awk بقیه یک خط را به دنبال علامت تیز چشم پوشی می کند.

توابع تعریف شده توسط کاربر در awk:

            تعاریف توابع می تواند در هر نقطه بین قوانین برنامه awk ظاهر شود. بنابراین ، شکل کلی یک برنامه awk شامل توالی قوانین  و  تعاریف عملکرد تعریف شده توسط کاربر است.

تعریف عملکردی به  نام نام  اینگونه است:

نام عملکرد ( لیست پارامتر ) {

عملکرد بدن

}

عملکرد کلمه کلیدی ممکن است تابع مختصر باشد.

name  نام تابعی است که باید تعریف شود. یک نام تابع معتبر مانند یک متغیر معتبر است: دنباله ای از حروف ، رقم ها و زیرنویس ها ، با شروع یک رقم.

parameter-list  لیستی از آرگومان های عملکرد و نام متغیرهای محلی است که با کاما از هم جدا می شوند. وقتی تابع فراخوانی می شود ، از اسم آرگومان ها برای نگه داشتن مقادیر آرگومان داده شده در فراخوانی استفاده می شود. متغیرهای محلی به رشته تهی آغاز می شوند.

عملکرد  بدن  از عبارات بیداری تشکیل شده است. این مهمترین قسمت تعریف است ، زیرا می گوید عملکرد باید واقعاً  انجام دهد . اسامی استدلال وجود دارد که به بدن می تواند راهی برای گفتگو درباره استدلال ها ارائه دهد. متغیرهای محلی ، برای دادن مکانهایی به بدن برای حفظ مقادیر موقتی.

            نام های آرگومان از لحاظ متغیرهای محلی از اسامی متغیر محلی متمایز نمی شوند. درعوض ، تعداد آرگومانهای ارائه شده در هنگام فراخوانی تابع تعیین کننده چند متغیر آرگومان است. بنابراین ، اگر سه مقدار آرگومان داده شود ، سه نام اول در  لیست پارامترها  آرگومان ها هستند و بقیه متغیرهای محلی هستند.

<strong “mso-bidi-font-weight:=”” normal”=””>Xgraph:

<strong “mso-bidi-font-weight:=”” normal”=””>نحو:

xgraph [options] [[-geometry – =] WxH + X + Y] [-devplay play: display.screen] [پرونده …]

شرح:

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

            گزینه هایی برای کنترل ظاهر بیشتر اجزای نمودار وجود دارد. مجموعه داده ها شامل یک لیست مرتب از نقاط فرم “راهنمای XY” است. برای دستورالعمل “ترسیم” ، خط بین نقطه قبل و نقطه فعلی ترسیم می شود. تعیین یک دستورالعمل “حرکت” به xgraph می گوید خط بین نقاط را ترسیم نکنید. “ترسیم” دستورالعمل پیش فرض است. با بسته کردن نام به صورت مضاعف ، می توانید نام یک مجموعه داده را مشخص کنید. با نوشتن خطوط فرم “” گزینه “: ¡مقدار” گزینه های کلی گرافیک را می توان در پرونده های داده مشخص کرد. رابط مورد استفاده برای تعیین اندازه و مکان این پنجره بستگی به مدیر پنجره ای دارد که در حال استفاده است.

            پس از باز شدن پنجره ، تمام مجموعه های داده با یک افسانه در گوشه سمت راست بالای صفحه به صورت گرافیکی نمایش داده می شوند. xgraphalso سه دکمه کنترلی را در گوشه سمت چپ بالای هر پنجره ارائه می دهد: Hardcopy ، Close و About xgraph تعداد زیادی گزینه را انتخاب می کند که اکثر آنها را می توان در خط فرمان ، در کاربر. خود پرونده ها. لیستی از این گزینه ها در زیر آورده شده است. فرمت گزینه در پرونده X پیش فرض “program.option: مقدار” است که در آن برنامه نام برنامه (xgraph) است و نام گزینه آن مشخص شده در زیر است. مشخصات گزینه در پرونده داده مشابه مشخصات پیش فرض X است به جز نام برنامه حذف نشده است.

/-هندسه WxH + X + Y یا / = WxH + X + Y (هندسه)

اندازه و محل اولیه پنجره xgraph را مشخص می کند.

/ -bar (BarGraph)

مشخص می کند که میله های عمودی باید از نقاط داده به a کشیده شوند

نقطه پایه ای که می تواند با -brb مشخص شود. معمولاً از پرچم -nl استفاده می شود

با این گزینه خود نقطه در مرکز میله قرار دارد.

/ -fitx

داده های x را از همه مجموعه داده ها ترجمه و مقیاس کنید تا متناسب باشد [0. . . 1]

/ -حساب

داده های y را از همه مجموعه داده ها ترجمه و مقیاس کنید تا متناسب باشد [0. . . 1]

/ -fmtx <printf-format> / -fmty <printf-format>

برای تولید افسانه‌های مربوط به محور x یا y از قالب مشخص شده استفاده کنید.

/ -bb (BoundBox)

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

ترجیح می دهید علائم کنه را به جای خطوط شبکه (خط-شبکه) ببینید.

/ -bd <color> (مرز)

این رنگ حاشیه پنجره xgraph را مشخص می کند.

/ -bg <colour> (زمینه)

رنگ پس زمینه پنجره xgraph.

/ -brb <base> (BarBase)

این پایه را برای نمودار نوار مشخص می کند. به طور پیش فرض ، پایه صفر است.

/ -brw <عرض> (BarWidth)

این عرض میله ها را در یک نمودار میله مشخص می کند. مقدار مشخص شده است

در واحد کاربر به طور پیش فرض ، نوار عرض یک پیکسل ترسیم می شود.

/ -bw <size> (BorderSize)

عرض مرز (در پیکسل) از پنجره xgraph.

/ -fg <color> (پیش زمینه)

رنگ پیش زمینه. از این رنگ برای ترسیم تمام متن و حالت عادی استفاده می شود

خطوط شبکه در پنجره.

/ -gw (GridSize)

عرض ، در پیکسل ها ، خطوط شبکه معمولی.

/ -gs (GridStyle)

الگوی سبک خطوط خطوط شبکه معمولی.

/ -ff <fontname> (LabelFont)

قلم لیبل. تمام برچسب های محور و برچسب های شبکه با استفاده از این فونت ترسیم می شوند.

ممکن است یک نام فونت دقیقاً مشخص شود (به عنوان مثال “9×15” یا “- * – پیک-جسورانه-غیر عادی – * –

140- * ”) یا به صورت خلاصه: ¡خانواده¿-¿size¿. خانواده است

نام خانوادگی (مانند helvetica) و اندازه اندازه قلم در نقاط (مانند) است

12) پیش فرض این پارامتر “helvetica-12” است.

/ -lnx (LogX)

یک محور لگاریتمی X را مشخص می کند. برچسب های شبکه قدرت ده را نشان می دهند.

/ -lny (LogY)

محور Y لگاریتمی را مشخص می کند. برچسب های شبکه قدرت ده را نشان می دهند.

/ -lw عرض (LineWidth)

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

/ -lx <xl، xh> (XLowLimit، XHighLimit)

این گزینه محدوده محور X را به بازه مشخص شده محدود می کند. این

(به همراه -ly) می تواند برای “بزرگنمایی” در قسمت جالب توجه استفاده شود

از یک نمودار بزرگتر

/ -ly <yl، yh> (YLowLimit، YHighLimit)

این گزینه محدوده محور Y را به بازه مشخص شده محدود می کند.

/ -m (نشانگرها)

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

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

سبک خط متفاوت در ماشین های سیاه و سفید و با هر رنگ متفاوت است

در دستگاه های رنگی

/ -M (StyleMarkers)

شبیه به -m اما نشانگرها به طور جداگانه به هر هشت متوالی اختصاص داده می شوند

مجموعه داده ها (این مربوط به هر سبک خط مختلف در دستگاه های رنگی است).

/ -nl (NoLines)

خطوط طراحی را خاموش کنید. با استفاده از -m، -M، -p، یا -P این می تواند باشد

مورد استفاده برای تولید توطئه های پراکنده. در صورت استفاده از -bar ، می توان از آن برای تولید استفاده کرد

نمودارهای نوار استاندارد.

/ -ng (NoLegend)

نقشه افسانه ها را خاموش کنید. می توان برای افزایش منطقه ترسیم استفاده کرد.

/ -t <string> (عنوانText)

عنوان طرح این رشته در قسمت بالای نمودار قرار دارد.

/ -tf <fontname> (عنوان فونت)

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

ممکن است نام دقیقاً مشخص شود (مثلاً “9×15” یا “- * – پیک-جسورانه-ر-عادی – * –

140- * ”) یا به صورت خلاصه: ¡خانواده¿-¿size¿. خانواده خانواده است

اندازه (مانند helvetica) و اندازه اندازه قلم در نقاط (مانند 12) است. 

پیش فرض برای این پارامتر “helvetica-18” است.

/ -x <unitname> (XUnitText)

این نام واحد برای محور X است. پیش فرض آن “X” است.

/ -y <unitname> (YUnitText)

این نام واحد برای محور Y است. پیش فرض آن “Y” است.

/ -zg <color> (ZeroColor)

این رنگی است که برای ترسیم خط شبکه صفر استفاده می شود.

/ -zw <عرض> (ZeroWidth)

این عرض خط شبکه صفر در پیکسل ها است.          

<strong “mso-bidi-font-weight:=”” normal”=””>فرمت پرونده بی سیم:

            s 0.500000000 _0_ AGT — 0 tcp 40 [0 0 0 0] ——- [0: 1 49: 0 32 0] [0 0] 0 ​​0

            r 0.500000000 _0_ RTR — 0 tcp 40 [0 0 0 0] ——- [0: 1 49: 0 32 0] [0 0] 0 ​​0

            قالب جدید ردیابی همانطور که در بالا مشاهده می شود را می توان به قسمتهای زیر تقسیم کرد:

نوع رویداد: در ردپاهای فوق ، اولین فیلد (مانند قالب قدیمی تر ردیابی) نوع رویدادی که در گره اتفاق می افتد را توصیف می کند و می تواند یکی از چهار نوع باشد:

بازدید کنندگان ارسال

R دریافت

د قطره

f به جلو

 

برچسب عمومی: زمینه دوم که با “-t” شروع می شود ممکن است برای زمان یا تنظیمات جهانی باشد

-t زمان

-t * (تنظیم جهانی)

 

برچسب های خاصیت گره: این قسمت خصوصیات گره مانند شناسه گره را نشان می دهد ، سطحی که در آن ردیابی مانند عامل ، روتر یا MAC انجام می شود. برچسب ها با “-N” پیشرو شروع می شوند و به شرح زیر ذکر می شوند:

-Ni: شناسه گره

-Nx: مختصات x گره

-Ny: مختصات y گره

-Nz: مختصات z گره

-نه: سطح انرژی گره

-Nl: سطح ردیابی ، مانند AGT ، RTR ، MAC

-Nw: دلیل این رویداد. دلایل مختلف رها کردن یک بسته در زیر آورده شده است:

“پایان” DROP_END_OF_SIMULATION

“COL” DROP_MAC_COLLISION

“DUP” DROP_MAC_DUPLICATE

“ERR” DROP_MAC_PACKET_ERROR

“RET” DROP_MAC_RETRY_COUNT_EXCEEDED

“STA” DROP_MAC_INVALID_STATE

“BSY” DROP_MAC_BUSY

“NRTE” DROP_RTR_NO_ROUTE یعنی هیچ مسیری در دسترس نیست.

“LOOP” DROP_RTR_ROUTE_LOOP یعنی یک حلقه مسیریابی وجود دارد

“TTL” DROP_RTR_TTL یعنی TTL به صفر رسیده است.

“TOUT” DROP_RTR_QTIMEOUT یعنی بسته منقضی شده است.

“CBK” DROP_RTR_MAC_CALLBACK

“IFQ” DROP_IFQ_QFULL یعنی فضای بافر در IFQ وجود ندارد.

“ARP” DROP_IFQ_ARP_FULL یعنی توسط ARP کاهش یافته است

“OUT” DROP_OUTSIDE_SUBNET یعنی با دریافت ایستگاه های پایه برای دریافت به روزرسانی های مسیریابی از گره های خارج از دامنه خود ، افتاد.

 

اطلاعات بسته بندی در سطح IP: برچسب های این قسمت با “-I” برجسته شروع می شوند و توضیحات آنها به شرح زیر ذکر می شود:

-Is: آدرس پستی منبع منبع

-d: شماره پورت مقصد. آدرس

-این: نوع بسته

-Il: اندازه بسته

-اگر: شناسه جریان

-Ii: شناسه منحصر به فرد

-Iv: مقدار ttl

 

اطلاعات hop hop بعدی: این قسمت اطلاعات hop hop بعدی را ارائه می دهد و برچسب با “-H” پیشرو شروع می شود.

-Hs: شناسه این گره

-Hd: شناسه برای هاپ بعدی به سمت مقصد.

 

اطلاعات بسته بندی در سطح MAC: این قسمت اطلاعات لایه MAC را ارائه می دهد و همانطور که در زیر نشان داده شده است با “-M” پیشرو شروع می شود:

-ما: مدت زمان

-Md: آدرس اترنت dst

-Ms: آدرس اترنت src

-Mt: نوع اترنت

اطلاعات بسته بندی در “سطح برنامه”: اطلاعات بسته در سطح برنامه شامل نوع برنامه هایی مانند ARP ، TCP ، نوع پروتکل مسیریابی adhoc مانند DSDV ، DSR ، AODV و غیره است که در آن ردیابی می شود. این قسمت از “-P” پیشرو تشکیل شده است و لیستی از برچسب ها برای برنامه های مختلف به شرح زیر ذکر شده است:

پروتکل قطعنامه آدرس arp . جزئیات مربوط به ARP توسط برچسب های زیر آورده شده است:

-Po: درخواست / پاسخ ARP

-Pm: آدرس مک src

-Ps: آدرس src

-Pa: آدرس dst mac

-Pd: آدرس dst

-P dsr این پروتکل مسیریابی adhoc به نام مسیریابی منبع پویا را نشان می دهد. اطلاعات مربوط به DSR توسط برچسب های زیر نشان داده شده است:

-Pn: چه تعداد گره را طی کرد

-Pq: پرچم درخواست مسیریابی

-Pi: شماره دنباله درخواست مسیر

-Pp: مسیریابی پاسخ پرچم

-Pl: طول پاسخ دهید

-Pe: src srcrouting-> dst از مسیریابی منبع

-Pw: پرچم گزارش خطا؟

-Pm: تعداد خطاها

-Pc: گزارش به چه کسی

-Pb: خطای پیوند از linka-> پیوند

-P cbr نرخ بیت ثابت.

اطلاعات مربوط به برنامه CBR توسط برچسب های زیر نشان داده شده است:

-Pi: شماره دنباله

-Pf: چند بار این pkt ارسال شده است

-Po: تعداد بهینه از جلو

-P tcp اطلاعات در مورد جریان TCP توسط زیرمجموعه های زیر داده می شود:

-Ps: شماره Seq

-Pa: شماره ack

-Pf: چند بار این pkt ارسال شده است

-Po: تعداد بهینه از جلو

این قسمت هنوز در مرحله توسعه است و برچسب های جدید برای برنامه های دیگر به آنها اضافه می شود.

 

توضیحات دستورات Tcl استفاده شده:

            1. کلمات کلیدی “set” و “val ()” برای تنظیم اولیه پارامترهای پیکربندی ، مانند شکل زیر استفاده می شوند.

                                    “تنظیم Val (chan) کانال / WirelessChannel”

            2. کلمه کلیدی “جدید” برای ایجاد یک مرجع شیء جدید به یک کلاس خاص ، مانند شکل زیر استفاده می شود.

                                    “تنظیم ns [شبیه ساز جدید]”

            3. کلمه کلیدی “باز” ​​برای باز کردن پرونده در حالت r / w / x داده شده استفاده می شود. اگر آن پرونده خاص وجود نداشته باشد ، مطابق شکل زیر ایجاد و باز می شود.

                                    “تنظیم tf [open wireless.tr w]”

            4- از تابع “ردیابی همه” برای ردیابی وقایع موجود در پرونده ردیابی باز شده (* .tr) استفاده می شود.

            5. عملکرد “namtrace-all-wireless” برای ردیابی وقایع موجود در پرونده نام ایجاد شده (* .nam) است.

            6. عملکرد “load_flatgrid” برای بارگذاری مقدار توپوگرافی شبیه سازی مانند 1000 x 1000 مانند شکل زیر استفاده می شود.

                                    “$ topo load_flatgrid 1000 1000”

            7. از عملکرد “ایجاد خدا” برای ایجاد مدیر عملیات عمومی استفاده می شود.

            8. تابع “گره پیکربندی” برای تنظیم پیوند گره با تنظیم پارامترهای پیکربندی استفاده می شود.

            9. از عملکرد “ضمیمه عامل” برای پیوند یک عامل / برنامه به گره / عامل دیگر به ترتیب استفاده می شود.

            10. از تابع “setdest” برای تنظیم موقعیت گره در یک زمان خاص استفاده می شود.

            11. برای شروع و متوقف کردن برنامه به ترتیب از کلمات کلیدی “start” و “stop” استفاده می شود.

            12. کلمه کلیدی “proc” برای نشان دادن روشی یا عملکردی استفاده می شود.

            13. تابع “flush-trace” برای شستشوی رویدادهای ردیابی شده در پرونده های ردیابی استفاده می شود.

            14. کلمه کلیدی “Run” برای اجرای پرونده استفاده می شود.

<strong “mso-bidi-font-weight:=”” normal”=””>توپولوژی:

کاربرد

با 0.5 ثانیه شروع می شود

در 159 ثانیه متوقف می شود

زمان شبیه سازی 160 ثانیه

توپوگرافی = 500 500 500

حرکت گره:

گره زمانی (x ، y ، z)

0 0 (5 ، 10 ، 0)

0 2 (300 ، 300 ، 0)

30 1 (50 ، 300 ، 0)

50 1 (50 ، 50 ، 0)

پارامترهای پیکربندی:

نوع کانال: کانال بی سیم

مدل انتشار رادیو: TwoRay Ground

نوع رابط شبکه: Wireless Phy

نوع MAC: 802-11

نوع صف رابط: PriQueue

نوع LinkLayer: LL

مدل آنتن: آنتن اومنی

حداکثر امتیازات در ifq: 50

تعداد گره های موبایل: 3

پروتکل مسیریابی: DSDV

<strong “mso-bidi-font-weight:=”” normal”=””>

<strong “mso-bidi-font-weight:=”” normal”=””>روش:

            1- پارامترهای پیکربندی شبکه را که باید با استفاده از کلید واژه “set” و کلید واژه “val ()” شبیه سازی کنید ، آغاز کنید.

            2. در حین شروع ، کلاس فوق العاده کلاس خاص نیز مشخص می شود. نمونه اولیه این است

                        “تنظیم Val (chan) کانال / WirelessChannel”

            3. مقادیر نوع لایه پیوند ، طول صف رابط ، تعداد گره ها و متغیرهای پروتکل مسیریابی را می توان به طور مستقیم و بدون هیچگونه ابرخودرویی داد.

                        سابق: تنظیم Val (ll) LL

                                تنظیم Val (nn) 3

            4. با استفاده از کلید واژه “set” و کلمه کلیدی “جدید” برای کلاس Simulator یک شی (مثلاً ns) ایجاد کنید.

                        “تنظیم ns [شبیه ساز جدید]”

            5- با استفاده از کلمات کلیدی “set” و “open” یک فایل ردیابی را با حالت نوشتن (یعنی w) ایجاد و باز کنید.

                        “تنظیم tf [open wireless.tr w]”

            6. با استفاده از تابع ‘trace-all’ ، هدف ns را برای ردیابی تمام وقایع تنظیم کنید و پرونده اثری ایجاد شده را بنویسید.

            7. یک فایل نام را در حالت نوشتن و با استفاده از تابع ‘namtrace-all-wireless’ ایجاد کنید ، با آرگومان هایی به عنوان کنترل کننده پرونده nam و مقادیر توپوگرافی (در اینجا ، 500 x 500) ، رویدادهای ردیابی شده در پرونده nam قرار می گیرند.

            8- برای کلاس توپوگرافی یک شی ایجاد کنید و مقادیر (500 x 500) را در عملکرد “load_flatgrid” بدهید.

            9. مقدار تعداد گره ها را به تابع ‘ایجاد-خدا’ منتقل کنید.

            10. مقادیر آرگومانهای عملکرد “گره-پیکربندی” را با تمام مقادیر پارامتر پیکربندی تنظیم کنید.

            11. گره های 0 ، 1 و 2 را با استفاده از کلمات کلیدی “set” و “$ ns” نشان داده شده ایجاد کنید.

                        “تنظیم node0 [$ ns گره]”

            12. موقعیت گره ها را در متغیرهای X_ ، Y_ و Z_ با استفاده از کلید واژه “set” تنظیم کنید.

            13. عامل UDP را ایجاد کنید و با استفاده از عملکرد “ضمیمه” ، آن را به node0 وصل کنید.

            14. به طور مشابه شیء را برای برنامه CBR ایجاد کنید و با استفاده از عملکرد “ضمیمه-عامل” ، آن را به شی UDP وصل کنید.

            15. با استفاده از عملکرد ضمیمه ، آن را برای NULL ایجاد کرده و آنرا به node2 وصل کنید.

            16. با استفاده از عملکرد “اتصال” ، شیء UDP را به جسم NULL وصل کنید.

            17. حرکت node1 را با استفاده از کلید واژه “at” تنظیم کنید و زمان را در ثانیه و موقعیت را در مقادیر x ، y ، z با استفاده از عملکرد “setdest” مشخص کنید.

            18. زمان شروع برنامه و زمان توقف با استفاده از کلید واژه “at” به همراه کلمات کلیدی “شروع” و “stop” مشخص می شوند.

            19. زمان توقف شبیه سازی با استفاده از کلید واژه “at” مشخص شده و روش “پایان” را فراخوانی می کند.

            20. در داخل روش “پایان” ، مقادیر ns ، tf و tf1 را “جهانی” بگذارید.

            21- برای نوشتن تمام وقایع ردیابی شده در پرونده های ردیابی ، با عملکرد “flush-trace” تماس بگیرید.

            22. پرونده ردیابی را با استفاده از عملکرد “close” ببندید.

            23- پرونده نام را با استفاده از كلمه كليد «exec» اجرا كنيد و در انتهاي خط قرار دهيد.

            24. با پارامتر ‘0’ عملکرد “خروج” تماس بگیرید و روش “پایان” را ببندید. 

            25. شبیه سازی را با استفاده از کلید واژه “run” اجرا کنید.

            26. ویرایشگر را ببندید.

            27. در پرونده out.awk ، بررسی کنید که بسته بسته دریافتی است و از نوع cbr است.

            28- سپس متغیر ‘packets’ را با مقدار در ستون 8 پرونده ردیابی افزایش دهید. این تعداد بایت دریافتی را می دهد.

            29. تعداد بیت های دریافت شده را با ضرب مقدار متغیر ‘packets’ با 8 محاسبه کنید.

            30. مقادیر را با زمان مربوطه از ستون 2 در پرونده ردیابی تقسیم کنید.

            31. نتیجه را با 1000000 ضرب کنید تا مقدار را در واحد Mbps بدست آورید. توان را نمایش دهید.

            32. در پرونده out1.awk ، مقادیر زمان و توان را به تنهایی نمایش دهید. این پرونده برای ایجاد نمودار استفاده می شود.

            33. برای نشان دادن توان و نمودار مربوطه ، پرونده های awk را اجرا کنید.

            34. بنابراین توان برای شبیه ساز شبکه تعریف شده محاسبه می شود.

<strong “mso-bidi-font-weight:=”” normal”=””>

<strong “mso-bidi-font-weight:=”” normal”=””>برنامه:

تنظیم Val (chan) کانال / WirelessChannel
تنظیم Val (prop) Propagation / TwoRayGround
تنظیم Val (netif) Phy / WirelessPhy
تنظیم Val (Mac) Mac / 802_11
تنظیم Val (ifq) صف / DropTail / PriQueue
تنظیم Val (ll) LL
آنتن / OmniAntenna را تنظیم کنید
تنظیم Val (ifqlen) 50
تنظیم Val (nn) 3
تنظیم Val (rp) DSDV
set ns [شبیه ساز جدید]

تنظیم tf [باز کردن wireless.tr w]
$ ns ردیابی – همه $ tf

تنظیم tf1 [باز کردن wireless1.nam w]
$ ns namtrace-all-wireless بی سیم tf1 500 500

تنظیم توپو [توپوگرافی جدید]
$ topo load_flatgrid 500 500

ایجاد-خدای $ وال (nn)

$ ns node-config -adhocRouting $ val (RP) \
-شکل نوع Val (ll) \
-macType $ val (mac) \
-ifqType $ val (ifq) \
-ifqLen $ val (ifqlen) \
-antType $ val (مورچه) \
-propType $ val (prop) \
-phyType $ val (netif) \
-channelType $ val (chan) \
-topoInstance $ topo \
-agentTrace ON \
-routerTrace خاموش \
-macTrace خاموش \
-movementTrace OFF 

تنظیم node0 [$ ns گره]
تنظیم گره 1 [$ ns گره]
تنظیم node2 [$ ns گره]

$ ns اولیه_node_pos $ node0 10
$ ns اولیه_node_pos $ node1 10
$ ns اولیه_node_pos $ node2 10

$ node0 مجموعه X_ 5.0
$ node0 مجموعه Y_ 5.0
$ node0 مجموعه Z_ 0.0

node1 $ X_ 50.0 را تنظیم کنید
$ node1 مجموعه Y_ 50.0
$ node1 مجموعه Z_ 0.0

$ node2 مجموعه X_ 100.0
$ node2 مجموعه Y_ 100.0
$ node2 مجموعه Z_ 0.0

set udp1 [نماینده جدید / UDP]
$ ns ضمیمه عامل $ node0 $ udp1

set cbr1 [برنامه جدید / ترافیک / CBR]
$ cbr1 ضمیمه $ udp1

set null1 [عامل جدید / تهی]
$ ns ضمیمه عامل $ node2 $ null1

$ ns $ udp1 $ null1 را متصل می کند

$ ns با 0.0 “$ node0 مجموعه ای 5.0 5.0 10.0 0.0”
$ ns با 0.0 “$ node2 مجموعه ای 300.0 300.0 0.0”
$ ns با 30.0 “$ node1 مجموعه 30.0 300.0 0.0”
$ ns در 50.0 “$ node1 مجموعه 50.0 50.0 0.0”

$ ns با 0.5 “$ cbr1 شروع”
$ ns در 159 توقف “$ cbr1”

$ ns در 160 “پایان”

پرو پایان {} {
جهانی ns tf tf1
$ ns flush-trace
نزدیک $ tf
نزدیک $ tf1
exec nam wireless1.nam &
خروج از 0
}

$ ns اجرا شد

<strong “mso-bidi-font-weight:=”” normal”=””>out.awk:

شروع { 
چاپ “محاسبه توان”
}

{
if (($ 1 == “r” && $ 7 == “cbr” && $ 3 == “_2_”))
{
pkts = pkts + 8 $؛
}

}

پایان {
توان = pkts * 8/2 $ / 1000000
“توان” = “توان
}

<strong “mso-bidi-font-weight:=”” normal”=””>out1.awk:

{
if (($ 1 == “r” && $ 7 == “cbr” && $ 3 == “_2_”))
{
pkts = pkts + 8؛
چاپ 2 دلار ، پیکت * 8/2 دلار / 1000000
}
}

<strong “mso-bidi-font-weight:=”” normal”=””>

<strong “mso-bidi-font-weight:=”” normal”=””>خروجی:

<strong “mso-bidi-font-weight:=”” normal”=””>

<strong “mso-bidi-font-weight:=”” normal”=””>– پایانه

<strong “mso-bidi-font-weight:=”” normal”=””>

<strong “mso-bidi-font-weight:=”” normal”=””>– خروجی نام

<strong “mso-bidi-font-weight:=”” normal”=””>– ترمینال – بیدار

<strong “mso-bidi-font-weight:=”” normal”=””>

<strong “mso-bidi-font-weight:=”” normal”=””>– نمودار

نوشتن دیدگاه

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

3 × 5 =