دانشگاه ……
مقطع : کارشناسی ارشد مهندسی …….
گرایش: …….
عنوان پایان نامه:
پیاده سازی، مدیریت و مانیتورینگ شبکه' SDN با امولاتور لینوکسی Mininet توسط ابزارهای مجاز یسازی در ویندوز
نگارنده :
استاد راهنما:
سال 1394
چکیده: 4
مقدمه :مروری بر شبکه های SDN 5
اجزای تشکیل دهنده (SDN) 7
سوییچهای مجازیُ SDN : 9
تکنولوژی مجازی سازی 13
انواع مجازی سازی 16
Mininet چیست 18
بررسی نحوه اتصال واسط شبکه میزبان های مینی نت به واسط شبکه سوئیچ مجازی 19
کاربردها و مزایای Mininet 20
دستورات لینوکس استفاده شده در پروژه 22
برنامه های مورد نیاز و نحوه' تهیه آنها 24
مفهوم x11 forwarding 26
3 روش نصب Mininet (ماشین مجازی، محلی لینوکسی، نصب از سرور رایانش ابری آمازون) 27
راه اندازی گام به گام تصویری ماشین مجازی Mininet روی یک لپ تاپ واحد در ویندوز 29
ایجاد ارتباط ssh بین هاست واقعی ویندوز و سرور مجازی بر پایه' اوبونتو Mininet 35
اتصال امن با خط فرمان متنی ویندوز 38
اتصال امن با رابط گرافیکی putty 40
دستورات مستند Mininet: 41
دستورات کنترلی ایترفیسها در Mininet: 43
دستورات نمایش نودها، لینکها ونسخه برداری از اطلاعات شبکه'sdn 43
دستورات کنترلی ایترفیسها در Mininet: 46
دستورت CLI مینینت برای تست پینگ همه' اتصالات شبکه………………………………………………………………………………………………..48
Run کردن وب سرور Mininet روی هاست مجازی……….49………………………………………………………………………………
اعمال ابزارهای شروع مجدد پیشرفته برای تست شبکه به روش واپسروی………………………………………………………………………51
تغییر سایز ونوع معماری شبکه SDN و پیادهسازی توپولوژیهای single,Liner,tree………………………………………………………………..52
link variation …………………………………………………………………………………………………….. ……….56
تنظیمات عیب یابی 57 ………… ………………………………………………………………… Adjustable Verbosity level
پیاده سازی سناریوهای عملی توپولوژی های Custom ……… …………………………………………………………58
Run کردن آنالایزر wiershark روی سرور Mininet برای مانیتورینگ packet های شبکه ……… ………………………………………….62
Run کردن قابلیت XTerm Display برای مشاهده جزئیات و نقاط کور شبکه ……………………………………………… 67
سناریوی عملی multiple real-time Monitoring & Debuging sdn networks in mininet…………………………………69
Run کردن و اجرای سناریو رابط گرافیکی Miniedit simulator تعبیه شد ه در Mininet ……………………………………………………..71
منابع ……………………………………………………………………………………………………………………………………………………………………..76
ضمیمه ……………………………………………………………………………………………………………………………………………………………77
چکیده:
با توجه به اینکه جهت طراحی، ایجاد، مدیریت، عیب یابی و رصد کردن یک شبکه برای بدست آوردن بازده بهینه احتیاج به آزمون های عملی وآزمایشات متعدد میباشد، از طرفی انجام چنین آزمونهایی با تجهیزات واقعی در محیط فیزیکی از نظر هزینه، زمان و بکار گیری نیروی انسانی متخصص بهیچ وجه منطقی و مقرون به صرفه نیست، تولید واستفاده از نرم افزارهای شبیه ساز و مخصوصا" تقلیدگر برای برآورده کردن چنین خلای اجتناب ناپذیر است.
Mininet برنامه' تقلید گر شبکه های نرم افزار محوراست که بتازکی تولید شده و بعلت Open Source بودن و جنبه های استراتژیک SDN بعنوان بروزترین مبحث شبکه های نوظهور در مدت کوتاهی توسط Devoloper ها توسعه یافته و هنوز هم در حال بهینه شدن است..می تواند شبکه ای نرم افزار محور را بصورت مجازی را ایجاد کرده و کرنل های واقعی و کدهای برنامه و سوییچ های شبکه را بر روی یک ماشین (ماشین مجازی، ابر یا سیستم واقعی) به اجرا درآورد. این نرم افزار به دلیل امکان تعامل پذیری توسط خط فرمان و یا API می تواند در راستای توسعه، آموزش و تحقیق استفاده شود. همچنین این نرم افزار قابلیت های گسترده ای بمنظور تست ، ارزیابی و توسعه ابزارهای مبتنی بر شبکه های SDN و Openflow خواهد داشت.
کرنل اصلی Mininet به زبان Peython و بطور پیشفرض برای اجرا در سرورهای بر پایه' لینوکس طراحی شده. ولی اخیرا این قابلیت منحصر بفرد به آن اضافه شده که به کمک فناوریهای نوین مجازی سازی در سایر سیستم عاملهای پر کاربرد مثل Windows و Mac OS اجرا و بکارگیری شود.
هدف این پروژه ، ایجاد گام به گام شبکه های مجازی نرم افزار محور ، انجام عملیات مدیریتی ،کنترلی، مونیتورینگ و Debuging به کمک نرم افزار تقلید گر شبکه های SDN بنام Mininet بر روی یک لپ تاپ یا pc خانگی واحد با استفاده از تکنیک های مجازی سازی بصورت سناریوهای کاملا" عملی و همراه تصویر میباشد.تمام مراحل پروژه در یک لپ تاپ خانگی باذسیستم عامل ویندوز8 بطور موفق تست شده . و در ویندوزهای 7 و +7 و حتی xp قابل انجام است.
پایان نامه' دوره'کارشناسی ارشد مهندسی نرم افزار کامپیوتر
پیاده سازی شبکه' نرم افزار محور با شبیه ساز Mininet
مقدمه:
مروری بر شبکه های تعریف شده با نرم افزار
یک شبکه بزرگ عمدتا" از ابزارهای گوناگون از تولیدکنندگان مختلف با توپولوژیهای گسترده تشکیل شده است که همگی نیز برای عملکرد صحیح نیاز به پیکربندی و مانیتور کردن هستند، چه پیکربندی و چه مانیتور کردن چنین شبکه هایی فقط برای بار اول و شروع کافی نیست و در ادامه عملکرد بسته به نیازهای کاربران و درخواستهای آنها باید تغییر نمایند. پس در همین جا با چالشی روبرو هستیم، چگونه می توان با کمترین خطا و کمترین زمان پائین بودن شبکه و حداقل پیچیدگی این کار را انجام دهیم.هر تجهیز شبکه به شکل و ساختار خود پیکربندی می شود و هر کدام باید بصورت جداگانه مورد پیکربندی قرار گیرد، حال اگر شبکه با وسعت شبکه یک کشور داشته باشیم که از هزاران سویچ و روتر تشکیل شده، تفریباً کار بسیار سخت و زمان بری خواهد بود و چگونه می توان عدم بروز خطا را گارانتی نمود. به چند نفر و چند ساعت کار برای پیاده سازی یک تغییر کوچک که اتفاقاً باید در تمامی تجهیزات اعمال شود نیاز است.پس در همین جا نیاز به یک سیستم یکپارچه کننده شبکه احساس می گردید. سیستمی که بتواند فراتر از هر پروتکل و پیچیدگی کار کاربران و مدیران شبکه را کم و به بهترین شکل پیاده سازی کند.سیستمی که در واقع بتواند دستورات را از کاربر گرفته و به زبان و کدهای مختلف کامپایل کرده و به تجهیزات اعمال کند فارغ از هرگونه درگیر شدن کاربر و یا حتی اطلاع آن از پیچیدگی و تنوع شبکه.در زمینه های نرم افزاری بحث مجازی سازی (ماشینهای مجازی) کارها را بسیار آسان کرده و با استفاده از آن می توان براحتی از یک سیستم بیشترین بهره وری را بدست آورد. در کنار این بهینه سازی، انعطاف پذیری و حرکت از یک سیستم به سیستم دیگر و افزایش و کاهش منابع از دیگر خصایص مجازی سازها بود که باعث شد به سرعت مورد توجه همه قرار گیرد.در اینجا نیاز به یک مجازی سازی بر روی سخت افزارهای شبکه حس می گردید به شکلی که اجزاء شبکه بصورت منابع تحت کنترل قرار گیرند و همانند پردازنده و حافظه قابل مدیریت و برنامه ریزی باشند. بتوان این اجزا را در یک محیط مجازی تحت کنترل قرار داد. یک شبکه مجازی که اجزاء آن را منابعی همانند سویچها، روترها و تجهیزات شبکه تشکیل می دهند و براحتی می توان آنها را برنامه ریزی کرد. براحتی میتوان یک کد را از طرف کاربر گرفته و به شبکه مجازی اعمال نمود.این شبکه مجازی بر اساس بار موجود قدرت انعطاف داشته و می تواند بزرگ و یا کوچک شود. براحتی می تواند بر اساس بار و فشار سرویسها میزان مصرف برق خود را کم و زیاد کند، به این شکل شبکه ای خواهیم داشت که استهلاک و مصرف برق آن کمتر می-گردد. علاوه بر این از منابع به شکل بهتری استفاده می شود و منابع در یک سگمنت از شبکه بدون استفاده و یا در سگمنتی دیگر سرریز نمی شوند، منابع بصورت المانهایی خواهند بود که براحتی قابل تخصیص به قسمتهای مختلف خواهند بود.جدا از این قابلیت شگرف بحث اعملا پیکربندی بر روی همه با یک دستور از دیگر خواسته ها بود. SDN تمامی نیازهای بالا را می توانست تامین کند. با استفاده از SDN کل شبکه و المانهای آن بصورت یک شبکه مجازی دیده می شد که با استفاده از نرم-افزارها و API ها طراحی شده قابل کنترل می گردید.در اینجا نیاز به یک پروتکل ارتباطی بین نرم افزارها و سخت افزارها مشاهده می گردید. پروتکلی که بتواند کد را به تمامی ابزارهای گوناگون از تولیدکنندگان گوناگون اعمال کند. یعنی باید زبان همه را بفهمد. در اینجا Open flow مطرح گردید. هر المانی از شبکه که این پروتکل را پشتیبانی می کند می تواند در شبکه SDN قرار گیرد و تحت پوشش آن برود در واقع لایه های ارتباطی شبکه ما به شکل بالا تغییر می نماید.در شبکه های sdn با استفاده از یک لینک واسط رمزنگاری شده بنام پروتکل OpenFlow با سوئیچ یا تجهیزات دیگر بطور خصوصی ارتباط برقرارکرده و حرف می زنیم. هیچ پروتکل استاندارد دیگری در شبکه، قادر به اجرای وظایف OpenFlow نیست و پروتکلی نظیر آن الزمی است تا کنترل شبکه را از سوئیچ های شبکه خارج و به نرم افزار کنترلر مرکزی منطقی هدایت کند.در ابتدا، OpenFlow کنترلر مرکزی را تعریف می کند و بعد می گوید چگونه این کنترلر می تواند به صورت امن به دستگاه های شبکه متصل و مشخص می کند که آن را کنترل کند. چگونه باید بسته های دریافتی را دستکاری و پردازش و دوباره ارسال کرد.
اجزای تشکیل دهنده SDN
1) کنترلر:
یک" میان افزار، بورد الکترونیکی" که بعنوان مغز شبکه برای مدیریت فرایندهای بخش کنترلی شبکه طراحی شده است. یکی از ایده های بزرگ SDN این است که دستگاهی به نام کنترلر با همه دستگاه های موجود در یک دامین شبکه ارتباط مستقیم داشته، از توپولوژی شبکه آگاه باشد و شبکه را از یک نقطه مرکزی برنامه ریزی کند. یک کنترلر SDN، مدل برنامه ریزی شبکه را از حالت توزیع شده به حالت متمرکز تبدیل می کنند. در شکل زیر یک کنترلر SDNبه عنوان یک میان افزار، شاهد برقراری دو ارتباط توسط کنترلر هستیم. یک ارتباط با دستگاههای سطوح پایین شبکه که به آن Southbound می گوییم و دیگری ارتباط با سطوح بالایی شبکه که به آن Northbound اطالق می شود. در SDN ارتباطات Southbound موضوع اصلی مطرح میان سازندگان سخت افزار و وضع کنندگان استانداردها و پروتکل های شبکه هستند.
.
لیست زیر تعدادی از کنترلرهای موجود را بهمراه زبان برنامه نویسی استفاده شده برای طراحیآن و مشخصات آنها را نشان میدهد.
POX: (Python) Pox as a general SDN controller that supports OpenFlow. It has a high-level SDN API including a queriable topology graph and support for virtualization.
MUL: (C) MūL, is an openflow (SDN) controller. It has a C based muli-threaded infrastructure at its core. It supports a multi-level north bound interface for hooking up applications. It is designed for performance and reliability which is the need of the hour for deployment in mission-critical networks.
NOX: (C++/Python) NOX was the first OpenFlow controller.
Trema: (C/Ruby) Trema is a full-stack framework for developing OpenFlow controllers in Ruby and C.
Beacon: (Java) Beacon is a Java-based controller that supports both event-based and threaded operation.
Floodlight: (Java) The Floodlight controller is Java-based OpenFlow Controller. It was forked from the Beacon controller, originally developed by David Erickson at Stanford.
Maestro: (Java) Maestro is an OpenFlow "operating system" for orchestrating network control applications.
Ryu: (Python) Ryu is an open-sourced Network Operating System (NOS) that supports OpenFlow.
NodeFlow (JavaScript) NodeFlow is an OpenFlow controller written in pure JavaScript for Node.JS.
ovs-controller (C) Trivial reference controlle
2) سوئیچ های مجازی:
عمر معماری شبکه سنتی دیگر به اتمام رسیده است.. در معماری سنتی تمامی تصمیمات به صورت مجزا در هر سوئیچ اتخاذ می شد. شکل زیر معماری سوئیچ های متداول سنتی را نشان می دهد. در این معماری تصمیمات در مورد مسیریابی بسته ها و سیاست های شبکه به صورت محلی در هر سوئیچ انجام می شود و در هر سوئیچ می بایست سیاست های شبکه به طور مجزا پیکربندی شود.
این در حالی است که در معماری جدید SDN، فرایندهای کنترلی سوئیچ ها به یک کنترل کننده به طور منطقی (Logically Centralized) منتقل شده و سوئیچ ها تبدیل به دستگاه های روانه سازی (Forwarding Device) ساده شده و هم از نظر مدیریت شبکه و هم از نظر قیمت بسیار بهینه تر شده است.از طرفی چون تمام کنترل شبکه از طریق برنامه های تعیین شده برای کنترلری که مجزا از این سخت افزار انتقال دهنده انجام میشود این انعطاف وجود دارد که از همین packet forwarding Device تنها با تغییر در ساختار کدهای کنترلی بعنوان روتر، فایروال، پل و… در صورت لزوم بهره برد. شکل زیر ساختار کلی معماری SDN را نشان می دهد:
با ظهور فناوری های مجازیسازی سرورها که توسط هایپروایزرها به کار گرفته می شوند، نقش سوئیچ مجازی در ایجاد اتصال سرورهای مجازی با کارت های شبکه مجازی و تراکم ترافیک و ارسال آن به خارج ار هایپروایزرها در شبکه های فیزیکی، پررنگ تر شده است. سوئیچ های سختافزاری و مجازی نقش مهمی در SDN ایفا می کنند، زیرا آن ها به طور مستقیم مسئول ارسال جدول های برنامه ریزی شده توسط کنترلرها
هستند. سوئیچ SDN به سوئیچی اطلاق می شود که از طریق کنترل کننده مرکزی قابل برنامه ریزی باشد. این برنامه ریزی از طریق یک واسط جنوبی (Southbound API) که در اغلب موارد پروتکل OpenFlow می باشد صورت می پذیرد. مثلا شما می خواهید بسته هایی را که از نوع ICMP می باشند را فیلتر کنید و اجازه عبور از سوئیچ را به آن ندهید. شما می توانید یک قاعده (Rule) در کنترل کننده تنظیم کنید و آن را با استفاده از پروتکل OpenFlow در سوئیچ های شبکه نصب کنید. از این پس تمامی بسته های Ping یا همان ICMP دورریخته خواهند شد. پس دیگر نیازی به پیکربندی تمامی سوئیچ های شبکه به صورت دستی نخواهد بود. اگرچه در معماری سنتی نیز توسط پروتکل های مدیریتی از جمله SNMP قابلیت مدیریت متمرکز تجهیزات وجود دارد ولی هدف اصلی SDN و پروتکل هایی از قبیل OpenFlow مدیریت خودکار شبکه با در نظر گرفتن پویایی و شرایط بار شبکه و همچنین جداسازی صفحه کنترل از صفحه داده می باشد که در نتیجه تجهیزات شبکه بسیار ساده و ارزان قیمت خواهند شد.
سوئیچ Open vSwitch یا به اختصار OVS یک سوئیچ مجازی چندلایه ای است که بسیاری از پروتکل ها و واسط های شبکه در آن پیاده سازی شده است. این سوئیچ که به طور نرم افزاری پیاده شده است، یک سوئیچ متن باز تحت حمایت Apache License ۲٫۰ بوده و علاوه بر پشتیبانی از پروتکل هایی از جمله sFlow، NetFlow، SPAIN، RSPAIN، CLI، LACP و ۸۰۲٫۱ag، از تمامی نسخه های پروتکل OpenFlow از ۱٫۰ تا ۱٫۵ نیز پشتیبانی می کند
مجازی سازی
در مجازی سازی محیطی برای استفاده و دستیابی به واقعیتی که به صورت مجازی سازی شده برای شما طراحی شده است ارائه می شود، مجازی سازی تکنولوژی است که به واسطه کـــارکرد و منطق خاصی که درطراحی خود دارد واقعی به نظر نمی رسد ولی دارای کارکردی واقعی است.
بعنوان مثال:
یک کاربر عادی می خواهد از برنامه ایی استفاده نماید که فقط تحت سیسـتم عامل Windows XP قابلیت اجرا شدن را دارد ولی این کـاربر یک کامپیوتر (Laptop) دارد که بر روی آن از قبـــــــــــل سیستم عامل Windows 7 نصب شده است، در این شرایط این کاربر یا می بایست از سیستم عامل اصلی (original) که بر روی Laptop خودش نصب شـده است چشم پوشی نماید و آن را پاک کرده و یک Windows XP را به جای آن نصب نماید و یا اینکه از راهکارهای مجازی سازی استفاده نماییـــد، در این صورت این کاربر می تواند در کنار سیستم عامل خودش یعنی (Windows 7) از سیستم عامل Windows XP نیز استفاده نماید.و یا فرض نمایید شما می خواهید در کنار سیستم عامل های خانواده Windows مایکروسافت از سیستم عامل های خانواده Linux نیز استفاده نمایید ولی نمی خواهید ویندوز نصب شده فعـلی را پاک کرده و به جای آن Linux نصب نمایید، در این شرایط نیز راهکارهای مجازی سازی می توانند به شما کـــمک کنند که در داخل سیستم عامل فعلی ویندوز خودتان، سیستم عامل های دیگری داشته باشید که همگی در داخل ویندوز اصــلی شما می باشند و یا ممکن است شما در حال آموختن شبکه و مفاهیم تخصصی می باشید در اینصــــورت برای انجام و پیاده سازی تمرینات عملی خودتان نیاز به لابراتوار و محیطی از کامپیوترهای متصل به هم در قالب یک شبکه داریددر این حالت یک انتخاب به وجود آوردن محیط لابراتوار فیزیکی از کامپیوترها می باشد و راه حــل دیگر استفاده از راهکارهای مجازی سازی است که به شما امکان برپایی یک شبکه و لابراتوار کامل را خواهد داد که با استفاده از آن می توانید تمامی تمرینات عملی خودتان را انجام دهید.ولی یک راه دیگر وجود دارد که با استفاده از آن می توانید بدون آنکه نیازی باشد سیستم عامل جدیدی را در پارتیشن دیگری نصب نماید آن را در همان ویندوز فعلی خودتان نصب کرده و برنامه مورد نظر را در داخل آن اجرا نمایید.(به این ترتیب نیازی نیست که هر بار کامپیوتر را راه اندازی (Restart ) مجدد نمایید و وارد یکی از ویندوزهای نصب شده شوید) این راه حل مجازی سازی است.
در محیط واقعی برای طراحی،توسعه،عیب یابی، تست، پیاده سازی ، کنترل المانها و بررسی عملکرد اجزای مختلف شبکه نه تنها احتیاج به نیروی انسانی ، سخت افزارهای فیزیکی (روتر، سوییچ ، سرور و …) و نرم افزارهای کنترلی و مونیتورینگ برای سگمنتهای شبکه داریم. بلکه بدلیل محدودیتهای کار در محیطهای فیزیکی مخصوصا"در محدوده های وسیع بعضا" این کارعملی نیست و برفرض امکانپذیر بودن مستلزم صرف انرژی، زمان زیاد، نیروی متخصص کافی و هزینه های سر بار زیادی میباشد. از طرفی انعطاف پذیری که برای پیاده سازی سناریوهای آزمایشی مختلف آنگونه که در بستر مجازیسازی شده با نرم افزارهای مقلد و شبیه ساز امکانپذیر است در محیط فیزیکی وجود نداشته و بهیچ وجه منطقی و مقرون بصرفه نخواهد بود.
تفاوت simulaton و Emulation
The main difference between simulation and emulation is that simulation is done all in software and emulation is done in hardware and software.
Emulation allows developers to see the real-time interactions between different hardware and software models.
ماشین مجازی چیست؟
به طور خلاصه استفاده از سخت افزار و منابع سخت افزاری شامل حافظه، پردازنده، دیسک، کارت شبکه و … در یک سیستم کامپیوتری برای راه اندازی و استفاده (میزبانی) بیش از یک سیستم عامل به صورت همزمان را مجازی سازی می نامیم.با این تعریف سیستمهایی که داری بوت دو یا چند گانه هستند و در هنگام بوت شدن یک سیستم عامل انتخاب شده و کنترل سخت افزار را بر عهده می گیرد.مجازی سازی به طور کلی به دو روش انجام می شود:
Type1نوع یک و حرفه ای آن اصطلاحا به آن baremetal hypervisor نیز می گویند :
شامل استفاده از یک سیستم عامل مخصوص مجازی سازی در سرور فیزیکی (Host) و در اختیار گرفتن منابع اصلی مثل رم ، پردازنده و دیسک در سیستم میزبان و واگذاری و مدیریت منابع بین سیستم عاملهایی که به عنوان مهمان (Guest) نصب می شوند، در این نوع مجازی سازی به سیستم عامل میزبان که وظیفه کنترل و تقسیم I/O و منابع اصلی سرور بین سیستم عاملها را دارد هایپروایزر (hypervisor) گویند.
Type2
نوع دوم جنبه آزمایشگاهی و کاربردهای خانگی دارددر این نوع مجازی سازی یک نرم افزار که نصب و کاربرد بسیار آسانی دارد با چند مرحله next در سیستم عامل ما نصب می شود و مثل هر برنامه کاربردی دیگر یا Application در سیستم عامل اولیه نصب می شود و امکان ایجاد ماشین مجازی یا سیستم عامل دیگری در لپ تاپ و کامپیوتر شخصی را به ما می دهد. از جمله معروفترین نمونه های این نوع می توان به VMWare Workstation و Virtual Box اشاره نمود.ماشنهای مجازی نوع یک خود به دو نوع تقسیم می شوند. هایپروایزرهایی که اجازه استفاده از منابع بین سیستم عاملهای میهمان به صورت اشتراکی میدهند مثل OpenVZو دسته دیگر هایپرویزورهایی که به هر سیستم عامل مهمان مقدار مشخص شده منابع سخت افزاری را واگذار می کنند و در صورت پر شدن منابع هر میهمان، میهمان دیگری دچار مشکل نمی شود. این نوع مجازی در اجاره سرورهای مجازی VPS – VDS برای اجاره کنننده بسیار اهمیت دارد زیرا مطمئن خواهد بود مقدار حافطه یا پرازنده مورد نظر کاملا اختصاصی است. از جمله هایپرویزورهایی که از این دسته هستند vmWare ESXi ، Ms HyperV و Cytrix Xen می باشند.
Mininet چیست:
مینی نت در واقع یک Emulator یا مقلد شبکه است که با استفاده از آن می توان یک توپولوژی متشکل از تعدادی میزبان مجازی، لینک مجازی و سوئیچ مجازی SDN را اجرا نمود. به طور مثال در فضای کاربر هریک از این میزبان های مجازی برنامه ای که مدنظرمان می باشد را اجرا کنیم. مثلا می توانیم در میزبان h1 یک سرور Apache اجرا نموده و در میزبان h2 با استفاده از یک مرورگر فایرفاکس به اطلاعات سرور اجرا شده بر روی h1 دسترسی پیدا نماییم.همانطور که در شکل زیر ملاحظه می کنید، در میزبان سمت راست یک سرور httpd یا همان آپاچی اجرا شده و در میزبان سمت چپ می توان با استفاده از مرورگر فایرفاکس به اطلاعات این سرور دسترسی داشت. می توان سایر برنامه های موجود در لینوکس را نیز بر روی میزبان های مینی نت اجرا نمود و این تنها مثالی از قابلیت های فراوانی است که مینی نت به همراه دارد. مینی نت یک بستر برای تست و ارزیابی شبکه SDN می باشد و با استفاده از آن می توان محیطی متشکل از چندین سوئیچ و میزبان مجازی با توپولوژی دلخواهی را تشکیل داد.
اکنون به بررسی نحوه اتصال واسط شبکه میزبان های مینی نت به واسط شبکه سوئیچ مجازی (Software Switch) بپردازیم. در مینی نت هر میزبان دارای یک واسط شبکه eth0 می باشد. به هریک از این واسط ها می توان آدرس IP اختصاص داد. به طور مثال در شکل زیرآدرس IP میزبان ۱ برابر ۱۰٫۰٫۰٫۱ و آدرس IP میزبان ۲ برابر۱۰٫۰٫۰٫۲ می باشد veth1 و veth2 واسط های شبکه مربوط به سوئیچ مجازی می باشند. درواقع veth1 پورت شماره ۱ سوئیچ و veth2 پورت شماره ۲ آن می باشد که هریک از آن ها به یک میزبان متصل شده اند.
کاربردها ی مینینت و دلایل برتری آن نسبت به نرم افزارهای مشابه:
It's fast – starting up a simple network takes just a few seconds. This means that your run-edit-debug loop can be very quick.
سرعت قابل توجه در تشکیل ،اجرا ،خطایابی و رفع اشکال یک شبکه
You can create custom topologies: a single switch, larger Internet-like topologies, the Stanford backbone, a data center, or anything else.
قابلیت ساخت شبکه هایی با معماری دلخواه و سفارشی با مقیاس بزرگ وکوچک مثل شبکه ای با تنها یک سوییچ یا شبکه ای با معماری مشابه اینترنت یا شبکه ای شبیه back bone اصلی دانشگاه استنفورد، یا شبکه' یک مرکز داده.
You can run real programs: anything that runs on Linux is available for you to run, from web servers to TCP window monitoring tools to Wireshark.
قابلیت اجرای برنامه های واقعی مبتنی بر لینوکس از طریق وب سرور و مونیتورینگ شبکه با آنالایزر وایرشرک.
You can customize packet forwarding: Mininet's switches are programmable using the OpenFlow protocol. Custom Software-Defined Network designs that run in Mininet can easily be transferred to hardware OpenFlow switches for line-rate packet forwarding.
قابلیت برنامه ریزی سوییچهای سازگار با پروتکل اوپن فلو برای سفارشی سازی فرایند ارسال بسته های داده در شبکه های SDN
You can run Mininet on your laptop, on a server, in a VM, on a native Linux box (Mininet is included with Ubuntu 12.10+!), or in the cloud (e.g. Amazon EC2.)
قابلیت اجرا در یک نوت بوک یا لپ تاپ از طریق ماشین مجازی ، سرور محلی نسخه های لینوکس، یا سیستم رایانش ابری ای،سی،2 آمازون
You can share and replicate results: anyone with a computer can run your code once you've packaged it up.
سهولت اشتراک گذاری ، تعویض ، مبادله' متقابل نتایج اجرای کدهای مینی نت توسط کاربران وتوسعه دهندگان نرم افزار
You can use it easily: you can create and run Mininet experiments by writing simple (or complex if necessary) Python scripts.
ساخت آسان شبکه های مجازی آزمایشگاهی و تحقیقاتی با اسکریپت های مبتنی بر زبان برنامه نویسی پیتون.
Mininet is an open source project, so you are encouraged to examine its source code on https://github.com/mininet, modify it, fix bugs, file issues/feature requests, and submit patches/pull requests. You may also edit this documentation to fix any errors or add clarifications or additional information.
متن باز بودن پروژه' مینی نت ،سهولت دستیابی وامکان ویرایش کدها با دیتابیس مینی نت برای ارتقای عملکرد و رفع اشکالات احتمالی و اضافه کردن اطلاعات جانبی در آدرس اینترنتی: https://github.com/mininet
مهمترین دستورات کاربردی لینوکس استفاده شده در پروژه:
Command
Description
Ifconfig
نمایش تنظیمات کارت شبکه
Ping
کنترل اتصال اینترفیس اجزا' دارای آی پی
Apt-get
نصب،حذف،بروزرسانی برنامه های مورد نیاز
sudo
Switch User and Doing | by default sudo in Root
Service
Services manager | Ex: service
dhclient
بعنوان کلاینتDHCP معرفی اینترفیس خاص به سرور
توضیح در مورد دستور پرکاربرد sudo :
وقتی که در ابتدا یک نسخه' لینولس نصب می شود (در این پروژه هسته' اوبونتو که بصورت پیشفرض در ماشین مجازی مینی نت تعبیه شده) دو حساب کاربری ( account) ایجاد می شود: حساب کاربری اولیه شما و یک حساب ریشه (root) که پشت صحنه عمل می کند. این حساب ریشه امتیاز لازم و ضروری مورد نیاز برای تغییر فایلهای سیستمی و تنظیمات را دارد در حالی که حساب کاربری اولیه شما این اختیارات را ندارد. به جای اینکه از حساب کاربری اولیه خود خارج شوید و سپس به عنوان ریشه وارد شوید، شما می توانید از دستور sudo برای در دست گرفتن اختیارات و امتیازات حساب ریشه برای انجام وظایف مدیریتی مانند نصب و حذف نرم افزار، ایجاد و حذف کاربران جدید و تغییر فایلهای سیستمی استفاده کنید.
دستور sudo به شما دسترسی مجازی نامحدود به فایلهای سیستمی و تنظیمات می دهد. خیلی مهم است که شما فقط وقتی از sudo استفاده کنید که بدانید چه کاری انجام می دهید.
آشنایی با سمبل های خط فرمان استفاده شده در پروژه :
* $ preceeds Linux commands that should be typed at the shell prompt
* mininet> preceeds Mininet commands that should be typed at Mininet's CLI,
* # preceeds Linux commands that are typed at a root shell prompt
$ به دستورات لینوکس که باید در خط فرمان نوشته شود اشاره میکند.
Mininet> به دستورات خاص مینی نت که باید در خط فرمان رابط متنی مینینت تایپ شود اشاره میکند. ریشه'.این دستورات مبتنی بر زبان peythom میباشد.
# به دستورات لینوکس که در خط فرمان حساب ریشه تایپ میشوند اشاره دارد.
برنامه هایی که برای این پروژه نیاز داریم:
Windows +7(7- 8 – 8.1- 10) OS بعنوان host system
1- Virtualization Product (VirtualBox,vmWare) in my project virtualbox (170 MB)
2- SSH Client (Putty.exe)
3- X11 Server (Xming Server for windows) 2MB
4- mininet virtual machine image file on ubonto 14.4 OS (720MB)
Ubonto بعنوان) virtualized guest system(
SSh (secure shell):
یک پروتکل ارتباطی امن بر پایه TPC/IP بین سرویس دهنده و سرویس گیرنده است که با رمز گذاری داده ها بین کلاینت و سرور از افشای اطلاعات در طول مسیر جلوگیری میکند
(Putty) نام یک مجموعه نرم افزار رایگان SSH Client/Server در محیط windows می باشد که با استفاده از آن می توانید از طریق پروتکل های Raw ،Rlogin وSSH به یک سرور لینوکس متصل شوید.
X11
پایه ای ترین امکانات برای یک محیط GUI را فراهم می کند مانند رسم و نمایش پنجره ها، ارتباط با ماوس و کیبرد و ..(در پروژه ما باز کردن آنالایزر wireshark و رابط گرافیکی مینی نت (miniedit
در این پروژه از نرم افزار xming.exe بدین منظور استفاده میکنیم.
محیط دسکتاپ های (desktop-environment) زیر قابلیت استفاده از X11 را دارند:
* KDE
* GNOME
* Xfce
* LXDE
* Razor-Qt
* CDE
* EDE
* Enlightenment
* و …
مفهوم X11 Forwarding چیست؟
هر کاربری برای مدیریت از راه دور یک میزبان لینوکس، ممکن است به یک واسط گرافیکی روی آن میزبان نیاز داشته باشد. نرم افزارهایی مانند OpenSSH در سیستم های عامل مبتنی بر لینوکس و PuTTY در سیستم عامل ویندوز قادر هستند بسته های X11 را در یک اتصال کاملا امن و رمز شده برای ایجاد یک ارتباط گرافیکی انتقال دهند . این فرآیند که باعث می شود یک واسط گرافیکی روی سیستم راه دور در اختیار کاربران قرار گیرد، X11 Forwarding نامیده می شود.
دانلود نرم افزارهای مورد نیاز:
مرورگر وب را باز میکنیم . به آدرس زیر مراجعه کرده لینک مشخص شده را کلیک میکنیم.
www.mininet.org
همانطور که مشاهده میکنید 3 روش برای نصب مینی نت ارایه شده است:
نصب ماشین مجازی مینی نت روی یک نرم افزار مجازی سازی روی ویندوز ،لینوکس، مکینتاش و…-
نصب محلی روی سرور لینوکس-
نصب مستقیم روی اوبونتو لینوکس از طریق سایت رایانش ابری ای- سی آمازون –
گزینه' مورد نظر ما گزینه'اول است. چون قصد داریم از ویندوز بعنوان هاست استفاده کنیم.
روی لینک مشخص شده کلیک میکنیم.
در شکل زیر گزینه'مشخص شده برای کاربران ویندوز را را انتخاب میکنیم. تا فایل ماشین مجازی با حجم 763 مگا بایت دانلود شود.
سپس به آدرس زیر مراجعه و نرم افزارهای زیر را از جدول پایین صفحه برای ویندوز +7 دانلود میکنیم
فایلهای نصب virtualbox.exe و xming.exe را در لپ تاپ یا کامپیوتر دسکتاپ با سیستم عامل ویندوز 7 یا ورژن های جدیدتر ویندوز (ترجیحا" ویندوز 64 بیتی با رم 1 و بالاتر) اجرا میکنیم تا این دو نرم افزار نصب شوند،
با فرض اینکه ویندوز در درایو C نصب شده و نام پوشهٔ پروفایل کاربر Ali است ، نرم افزار putty.exe را در مسیر زیر کپی میکنیم:
C / users / Ali
نرم افزار virtualbox را اجرا کرده روی دکمه' new کلیک میکنیم:
در پنجره باز شده در قسمت name نام دلخواه میدهیم ، درقسمت type گزینه' Linux و در قسمت ورژن Ubuntu 32 bit را از لیست کشویی انخاب و سپس next
در پنجره بعدی میزان حافظه سئوال میشود. مقدار پیشفرض را تغییر نداده و سپس next
در دیالوگ باکس بعدی از شما برای درست کردن هارد مجازی و یا استفاده از هارد مجازی موجود سئوال میشود ، گزینه' سوم use an existing virtual drive را انتخاب کرده. روی آیکون مشخص شده کلیک میکنیم. سپس مسیر پوشه' ماشین مجازی مینی نت را که در محل دلخواه از حال فشرده خارج کرده ایم آدرس دهی کرده فایل با نام mininet-vm-i386.vmdk که هارد دیسک مجازی مینی نت هست را انتخاب و open میکنیم.و دکمه' creat را میزنیم . ماشین مجازی مینینت پس از چند لحظه با نام انتخاب شده درست میشود.
مطابق شکل زیر تنظیمات ماشین مجازی را انجام میدهیم :
Setting > Network> Adapter 2
در تنظیمات تب Adapter 2 تیک enabe network Adapter را فعال، سپس از لیست باکس برای Attached to ، گزینه' Host-only Adapter را انتخاب روی مثلث کوچک آبی رنگ برای تنظیمات بیشتر کلیک کرده و در این پنجره برای اعطا, مجوز مقدار لیست باکس Permission model را برابر Allow all قرارمیدهیم.برای تایید تنظیمات OK
نکته : اضافه کردن Host-only Adapter به شما اجازه می دهد تا به آسانی از طریق ماشین میزبانتان به ماشین مجازی تان دسترسی داشته باشید.
تنظیمات کامل شد. ماشین مجازی مینی نت آماده' اجراست.
روی دکمه'start کلیک میکنیم تا مینی نت Run شود.
در مرحله' بعد اینتر میکنیم تا هسته' اوبونتو و ماشین مجازی مینی نت لود شود.
بعد از لود کامل رابط کاربری برای لاگین تقاضای نام کاربری و پسوورد میکند ، برای لاگین و رمز عبور هردو بصورت پیشفرض mininet تعریف شده. بنابراین برای Login عبارت mininet را با حروف کوچک تایپ ، سپس اینتر میکنیم.
توجه کنید موقع وارد کردن پسوورد هنگام تایپ به دلایل امنیتی حروف نمایش داده نمیشود.
بعد از لاگین موفق خط فرمان مطابق شکل زیر ظاهر خواهد شد.
نکته : از این مرحله به بعد شاید نیاز باشد برای کنترل برنامه بین محیط میزبان(ویندوز) و محیط میهمان مجازی (mininet vm on ubunto ( چندین بارسوئیچ انجام دهیم. برای این منظور در virtualbox یک کلید بنام Hst key تعریف شده که معمولا " این کلید right ctrl کیبورد است. با فشردن کلید ترکیبی ctrl+p میتوانیم کنترل برنامه را به محیط سیستم عامل ویندوز و بالعکس انتقال دهیم.
گام بعدی:ایجاد ارتباط بین سیستمهای میزبان ومیهمان
هدف : قصد داریم با استفاده از پروتکل ssh از طریق فرایند x11 forwarding یک ارتباط امن بین سیستم میزبان و میهمان ایجاد کرده، با ایجاد این اتصال امن این امکان فراهم خواهد شد تا از یک ماشین مبتنی بر ویندوز در یک محیط مجازیسازی شده به کمک امولاتور شبکه' sdn بنام مینی نت در یک سیستم واحد مثل یک لپ تاپ اقدام به ایجاد سناریوهای آزمایشی شبکه های sdn کنیم. و ابزارهای مدیریتی برای کنترل شبکه اعمال نماییم. بدین ترتیب با کمترین هزینه و امکانات سخت افزاری بصورت گام به گام با مفاهیم اساسی تشکیل و مدیریت شبکه' نرم افزار محورآشنا شده و تمرینهای عملی مطابق با محیط واقعی را محقق خواهیم ساخت.
ادامه:
دستو ifconfig را برای مشاهده'اینترفیسهای فعال نوشته و اینتر .در شکل زیر میبینیم که دو پورت اترنت صفر eth0 و لوپ بک lo بطور پیشفرض آی پی دارند.
دستور زیر را برای ورود بعنوان سوپر یوزر برای به اختیار گرفتن اعمال تغییرات در حساب root سیستم میزبان و مشاهده' همه' اینرفیسهای موجود تایپ کرده , Enter.
sudo ifconfig -a
همانطور که در شکل زیر میبینیم اینترفیس eth1 فاقد هرگونه IP است.
با دستور زیر از سرور dhcp برای پورت eth1 تقاضای اختصاص IP Dynamic میکنیم. سپس با دستور clear صفحه را پاک میکنیمsudo dhclient eth1
دستور ifconfig -a را تایپ میکنیم . مشاهده میکنیم که به eth1 IP, اختصاص داده شده ، معمولا" بطور پیشفرض IP اختصاص داده شده یکی از موارد زیر است.
192.168.56.101
192.168.56.102
حال میخواهیم با پروتکل ssh و x11 forwarding از پورت eth1 یک ارتباط امن برای اتصال به سیستم میهمان ایجاد کنیم. لذا ابتدا برنامه'xming را در ویندوز اجرا ی.میکنیم.آیکون xming در system tray باید نمایش داده شود.
روش اول ایجاد اتصال
استفاده از خط فرمان متنی ویندوز
حال میخواهیم از خط فرمان command promp ویندوز به اینترفیس eth1 سیستم guest یک لینک ssh بزنیم. لذا برنامه' cmd را از Run ویندوز اجراکرده دستور زیر را در خط فرمان cmd تایپ میکنیم: فلشها محل space را نشان میدهند.
>putty.exe -X mininet@192.168.56.102
رابط کاربری متنی putty ظاهر شده تقاضای رمز عبور میکند. رمز همان mininet است پس از وارد کردن رمز و اینتر همانطور در شکل زیر نشان داده شده لینک ssh ایجاد و ارتباط هاست و ماشین مجازی اوبونتوی تعبیه شده در مینی نت برقرار میشود.
روش دوم اتصال:از طریق رابط گرافیکی putty.exe
1- ابتدا برنامه Xming server را روی ویندوز اجرا می کنیم
2- از این به بعد برای ارتباط با MiniNet از طریق SSH باید مراحلی که در عکس مشخص شده را طی کنید.
3- و گزینه Enable X11 forwarding را تیک بزنید.
4- سپس IP سرور Mininet را در قسمت Sessionوارد میکنیم و به MiniNet با قابلیت X11
متصل می شویم
.
نکته:
ضمن اینکه پروژه را پیش میبریم توجه داشته باشیم که فرایندها و مراحل کارها در این پروژه با محیط واقعی در یک شبکه با هر مقیاسی که باشد کاملا" مشابه است. کدهایی که بکارمیبریم کدهای orginal مینی نت هستند. یعنی نمونه سازی و مدلسازی در کار نیست. تنها تفاوت این است که در محیط واقعی میتوانیم به همین روش از یک هاست به سرور راه دور مینی نت متصل شویم و اقدامات مدیریتی در شبکه داشته باشیم.
اما در این پروژه به کمک امولیشن همین پروسه را روی یک ماشین واحد و بصورت اتصال هاست واقعی به یک سرور مجازی بصورت لابراتواری بررسی و تمرین میکنیم. و این دقیقا" همان کاری است که متخصصان ، طراحان و مدیران شبکه قبل از اجرای یک پروژه ی واقعی برای تست و رسیدن به نتیجه ی بهینه مکررا" انجام میدهند.تا از صرف زمان،نیروی انسانی و هزینه ی اضافی برای تست در محیط فیزیکی اجتناب شود.
حال قصد داریم اقدام به ایجاد شبکه در محیط مینی نت کنیم.
Mininet به طور پیشفرض چندین توپولوژی از قبیل single، linear، tree و … را دارا می باشد.
کد این توپولوژی ها به زبان python نوشته شده. ودرفایلهایی با پسوند .py ذخیره و با مقاصد آموزشی در مینی نت برای استفاده' علاقمندان تعبیه شده.
اما برای ایجاد توپولوژی دلخواه در بستر Mininet می بایست از کتابخانه های موجود در آن استفاده نماییم و به زبان پایتون برنامه نویسی کنیم.که بعدا" به آن خواهیم پرداخت.
Mininet Documented commands
دستورات مستند mininet
Command
Descriptions
1
EOF
خروج از mininet
2
Exit
خروج از mininet
3
Quit
خروج از mininet
4
Time
مدت زمان اجرای یک دستور را در mininet می دهد
5
Sh
اجرای یک دستورShell زمانی که داخل mininet هستیم
6
intfs
لیست همه اینترفیسهای شبکه
7
Gterm,xterm
Xtermیک ترمینال استاندارد برپایه X-windows
Gterm = GNOME Terminal
8
Pingall
Ping بین همه هاست ها
9
Pingallfull
Ping بین همه هاست ها ولی با جزئیات بیشتر
10
Dpctl
ابزاری برای کنترل Flow Table یک سوئیچ
معمولا از این ابزار برای عیب یابی استفاده می شود.
11
Link
برای فعال و غیرفعال کردن یک لینک در توپولوژی
12
help
راهنما
13
nodes
تمام نودهای شبکه ما را نشان می دهد
14
iperf
ابزای برای محاسبه پهنای باند بین دو هاست
15
iprefudp
ابزاری برای تست کارایی پهنای باند بین دو هاست با تعریف یک پهنای باند خاص مثلا 20 مگابایت
16
dump
اطلاعاتی در مورد نود ها میدهد
17
net
لیست اتصالات شبکه را می دهد
18
Source
خواندی یکسری دستورات از یک فایل
19
Pingpair
پینگ بین اولین دو هاست، بیشتر برای تست های سریع استفاده میشود.
20
Pingpaifull
مانند دستور بالا ولی با جزئیات بیشتر
21
py
اجرای یک عبارت پایتون
22
Noecho
اجرای یک دستور بدون نمایش خروجی
دستورات کنترلی اینتر فیس ها :
Ifconfig <eth0> down | up غیرفعال و فعال کردن یک اینترفیس خاص
Sudo ifdown -a غیر فعال کردن همه کارتهای شبکه
Sudo ifup -aفعال کردن همه کارتهای شبکه
Sudo ifdown <eth0>غیرفعال کردن یک اینترفیس خاص
Sudo ifup <eth0>فعال کردن یک اینترفیس خاص
توپولوژی پیش فرض minimal
1 سوییچ 2 هاست
در رابط putty قطعه کد زیر را وارد میکنیم:
sudo mn
به شکل زیر نگاه کنید پس از اجرا :
مراحل: ساخت شبکه، اضافه کردن دو هاست ، اضافه کردن سوییچ ، برقراری لینکها، شروع کار کنترلر، توجه کنید که در خط فرمان اعلان به mininet> تغییر کرد. یعنی در این محیط باید از دستورات مینی نت استفاده شود.
دستور help لیست دستورات مینینت را نمایش خواهد داد.
دستور زیر تمام ابزارها و کنترلهایی که در این توپولوژی میتواند لیست کند.
:~$ sudo mn -h
دستور nodes همه' گره هارا نمایش میدهد.
دستور net همه' لینکها را نمایش میدهد.
دستور dump از اطلاعات همه' گره هانسخه برداری میکند..
توجه کنید با دستور dump یک سوییچ و دو هاست لیست شده.
عبارت اول در هر خط نام هاست ، سوییچ ، کنترلر میباشد.
دستورات بایستی به نودها اعمال شود.
مثال:
> h1 if config -a
> s1 ifconfig -a
تست اتصال هاست های شبکه با دستور ping:
> h1 ping -c 1 h2
دستور CLI مینینت برای تست پینگ همه' اتصالات شبکه:
> pingall
نکته:
مینی نت این امکان منحصر بفرد را فراهم کرده است که همه' هاست های شبکه می توانند هر دستور یا application که در زیر مجموعه ی سیستمهای مبتنی بر لینوکس و VM و file system آنها قابل دسترسی است اجرا کنیم.
همچنین میتوانیم هر bash command شامل کنترلهای (& , jobs, kill , …..) قابلیت اعمال کردن دارد.
Run کردن وب سرور روی هاست مجازی
میخواهیم یک وب سرور ساده را با درخواستی از طرف h2 روی h1 فعال کنیم.
سپس بااستفاده از bash control بنام kill وب سرور را خاموش کنیم.دستور exit باعث خروج از محیط کدنویسی دستورات built in commands of mininet میشود.
mininet> h1 python -m SimpleHTTPServer 80 &
mininet> h2 wget -O – h1
mininet> h1 kill %python
exit
Advanced Startup Options
Run a Regression Test
اعمال ابزارهای شروع مجدد پیشرفته برای تست شبکه به روش واپسروی
حال که با دستور اجرای دستور خروج دسترسی ما به محیط دستورات مینی نت قطع شده،نیازی نیست که برای انجام اقدامات کنترلی جهت تست شبکه به آن محیط بازگردیم،
این قابلیت وجود دارد که با مجموعه دستوراتی بنام تست واپسروی اجزا و اتصالات را تست کنیم.
مثال: دستور زیر با روش Reggression Test ابتدا شبکه ای با معماری مینی مال ایجادکرده. کنترلر پیشفرض open flow را فعال مکند. س از همه ی اتصالات پینگ میگیرد و در نهایت توپولوژی را از بین میبرد.
$ sudo mn -test pingpair
دستور زیر همان توپولوژی قبلی را ایجادکرده. برای بدست آوردن پهنای باند روی یکی از هاستها یک
Iperf server اجرا میکند.در هاست دوم یک iperf client ران میکند.سپس پهنای باند را مانیتور میکند.اجرای دستور حدود 10 ثانیه زمان احتیاج دارد. نتیجه مطابق شکل زیر است.
~$ sudo mn -test iperf
تغییر سایز ونوع معماری شبکه
قصد داریم توپولوژی پیشفرض 1سوییچ متصل به 2هاست را به توپولوژیهای مختلف دیگر تبدیل کنیم. بدین منظور از کنترل -topo استفاده میکنیم.
Single
در محیط کدنویسی مینی نت:
>sudo mn –topo single,3
اگر از محیط دستور نویسی مینی نت خارج شده ایم از روش تست پسرو استفاده میکنیم:
sudo mn –test pingall –topo single,3$
این دستور یک شبکه با 3 هاست متصل به 3 سوییچ تشکیل داده صحت همه ی اتصالات را با دستور پینگ تست میکند.
توپولوژی Liner 3 هاست 3 سوییچ
sudo mn –topo linear,3
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s2-eth1
h3 h3-eth0:s3-eth1
s1 lo: s1-eth1:h1-eth0 s1-eth2:s2-eth2
s2 lo: s2-eth1:h2-eth0 s2-eth2:s1-eth2 s2-eth3:s3-eth2
s3 lo: s3-eth1:h3-eth0 s3-eth2:s2-eth3
Liner 4 هاست 4 سوویچ
به روش تست پسرو
$ sudo mn –test pingall –topo linear,4
توپولوژی Tree در محیط کدنویسی مینی نت
< sudo mn –topo tree,3
با دستور net لینکها را مانیتور میکنیم:
mininet> net
h1 h1-eth0:s3-eth1
h2 h2-eth0:s3-eth2
.
.
.
ایجاد دگرگونی در لینکها:link variation
از مینی نت ورژن 2 میتوانیم از command line پارامترهای لینکها را ست کنیم.
$ sudo mn –link tc,bw=10,delay=10ms
mininet> iperf
…
mininet> h1 ping -c10 h2
اگر زمان تاخیر هر لینک 10 ms باشد کل زمان تاخیر برابر با 40ms بایدباشد.درخواستICMP باید مسیر 2 لینک را پیمایش کند یکی بسمت سوییچ، یکی بسمت مقصد.همچنین پاسخ ICMP همین مسیر را باید در جهت مخالف پیمایش کند.
قابلیت تنظیم سطح بیهودگی: Adjustable Verbosity level
سطح بیهودگی پیشفرض برابر info است. وظیفه' آن ثبت وقایع و فرایندهای معمولی شبکه در یک logfile است. که کاربرد آن تسهیل بررسی و رفع نواقص فعالیتهای شبکه است. این سطح را میتوان به debug ارتقا داد تا بطور دقیق بررسی وضعیت کند عملکرد مینینت در هنگام شروع بکار و حین فعالیت
چگونه بوده و این اطلاعات را نمایش دهد.کنترلv – باعث چاپ اطلاعات میشود.
$ sudo mn -v debug
…
mininet> exit
Custom Topologiesتوپولوژی های سفارشی
توپولوژیهای سفارشی بوسیله' کدهای python به سادگی میتواند تولید شود. یک نمونه که توسط توسعه دهندگان مینی نت ارایه شده یک API بنام custom/topo-2sw-2host.py است،که از دو سوییچ که مستقیم به هم وصل شده اند و هرکدام از سوییچها به یک هاست متصل شده تشکیل شده
زمانیکه یک توپولوژی سفارشی تولید میشود این امکان وجود دارد که مورد تست قرارگرفته و به عنوان توپولوژی جدید به سایر توپولوژیهای کتابخانه ی مینی نت اضافه شود، برای مثال توپولوژی فوق را با دستور زیر تست و نتیجه را مشاهده میکنیم.
$ sudo mn –custom ~/mininet/custom/topo-2sw-2host.py –topo mytopo –test pingall
در ادامه بعضی از این توپولوژیهای سفارشی که توسط توسعه دهندگان تولید شده را مرور میکنیم. برای مشاهده'نمونه های بیشتر میتوانیم به آدرس اینترنتی زیر مراجعه کنیم.
https://github.com/mininet/mininet/blob/master/examples/README.md
emptynet.py:
مثالی جهت تشکیل یک شبکه' بدون هرگونه شی, و نحوه ی اضافه کردن نودها به آن
hwintf.py:
این مثال طرز اضافه کردن یک اینترفیس بعد از درست کردن شبکه را نشان میدهد
intfoptions.py:
پیکر بندی یک intf را برای مونیتورینگ پهنای باند، زمان تاخیر و توقف یک لینک بیان میکند
limit.py:
تنظیم لینکها با توجه به محدودیتهای cpu
linearbandwidth.py:
ایجاد یک نمونه توپولوژی سفارشی و اعمال تستهای کنترلی مختلف روی شبکه
linuxrouter.py:
ایجاد وپیکربندی یک روتر در مینینت که از تکنولوژی linux ip forwarding استفاده میکند.
miniedit.py:
ایجاد شبکه با رابط گرافیکی مینی نت بنام miniedit
mobility.py:
جدا کردن اینرفیس یک سوییج وانتساب آن به سوییچ دیگر در زیر شبکه ی دیگر برای انتقال یک هاست به زیر شبکه ی دوم
multiLink.py:
ایجاد یک توپولوژی که بین نودها لینکهای دوگانه و چندگانه برقرار شود
multiping.py:
ارایی ی روشی برای مونیتورینگ اتصالات چندین هاست بطور همزمان و real-time
مثال : نمونه کد python توپولولوژی سفارشی مربوط به فایل کتابخانه ای مینی نت
linearbandwidth.py
Test bandwidth (using iperf) on linear networks of varying size,
using both kernel and user datapaths.
We construct a network of N hosts and N-1 switches, connected as follows:
h1 <-> s1 <-> s2 .. sN-1
| | |
h2 h3 hN
WARNING: by default, the reference controller only supports 16
switches, so this test WILL NOT WORK unless you have recompiled
your controller to support 100 switches (or more.)
In addition to testing the bandwidth across varying numbers
of switches, this example demonstrates:
– creating a custom topology, LinearTestTopo
– using the ping() and iperf() tests from Mininet()
– testing both the kernel and user switches
"""
from mininet.net import Mininet
from mininet.node import UserSwitch, OVSKernelSwitch, Controller
from mininet.topo import Topo
from mininet.log import lg
from mininet.util import irange, quietRun
from mininet.link import TCLink
from functools import partial
import sys
flush = sys.stdout.flush
class LinearTestTopo( Topo ):
"Topology for a string of N hosts and N-1 switches."
def __init__( self, N, **params ):
# Initialize topology
Topo.__init__( self, **params )
# Create switches and hosts
hosts = [ self.addHost( 'h%s' % h )
for h in irange( 1, N ) ]
switches = [ self.addSwitch( 's%s' % s )
for s in irange( 1, N – 1 ) ]
# Wire up switches
last = None
for switch in switches:
if last:
self.addLink( last, switch )
last = switch
# Wire up hosts
self.addLink( hosts[ 0 ], switches[ 0 ] )
for host, switch in zip( hosts[ 1: ], switches ):
self.addLink( host, switch )
def linearBandwidthTest( lengths ):
"Check bandwidth at various lengths along a switchchain."
results = {}
switchCount = max( lengths )
hostCount = switchCount + 1
switches = { 'reference user': UserSwitch,
'Open vSwitch kernel': OVSKernelSwitch }
# UserSwitch is horribly slow with recent kernels.
# We can reinstate it once its performance is fixed
del switches[ 'reference user' ]
topo = LinearTestTopo( hostCount )
# Select TCP Reno
output = quietRun( 'sysctl -w net.ipv4.tcp_congestion_control=reno' )
assert 'reno' in output
for datapath in switches.keys():
print "*** testing", datapath, "datapath"
Switch = switches[ datapath ]
results[ datapath ] = []
link = partial( TCLink, delay='1ms' )
net = Mininet( topo=topo, switch=Switch,
controller=Controller, waitConnected=True,
link=link )
net.start()
print "*** testing basic connectivity"
for n in lengths:
net.ping( [ net.hosts[ 0 ], net.hosts[ n ] ] )
print "*** testing bandwidth"
for n in lengths:
src, dst = net.hosts[ 0 ], net.hosts[ n ]
# Try to prime the pump to reduce PACKET_INs during test
# since the reference controller is reactive
src.cmd( 'telnet', dst.IP(), '5001' )
print "testing", src.name, "<->", dst.name,
bandwidth = net.iperf( [ src, dst ], seconds=10 )
print bandwidth
flush()
results[ datapath ] += [ ( n, bandwidth ) ]
net.stop()
for datapath in switches.keys():
print
print "*** Linear network results for", datapath, "datapath:"
print
result = results[ datapath ]
print "SwitchCounttiperf Results"
for switchCount, bandwidth in result:
print switchCount, 'tt',
print bandwidth[ 0 ], 'server, ', bandwidth[ 1 ], 'client'
print
print
if __name__ == '__main__':
lg.setLogLevel( 'info' )
sizes = [ 1, 10, 20, 40, 60, 80, 100 ]
print "*** Running linearBandwidthTest", sizes
linearBandwidthTest( sizes )
Wireshark
Wireshark is a free and open-source packet analyzer. It is used for network troubleshooting, analysis, software and communications protocol development, and education.
یک آنالیزگر پکت در شبکه است. یک آنالیزگر پکت، پکت هایی که در شبکه رد وبدل می شوند را به دام انداخته و آنها را مورد پردازش قرار می دهد و در صورت امکان جزئیات آن را نمایش می دهد.
در واقع این نرم افزار به طور دقیق آنچه را که از طریق کابل می گذرد را به دام انداخته و مورد برسی قرار می دهد.
وایر شرک بطور پیشفرض در ماشین مجازی مینی نت تعبیه شده.
میخواهیم آنالایزر wireshark را روی مینی نت Run کرده و پکتهای ارسالی در شبکه را مانیتور کنیم.
ابتدا یک شبکه با توپولوژی پیشفرض مینیمال ایجاد میکنیم.
$ sudo mn
exit
برای Run کردن wireshark دستور زیر را وارد میکنیم:
$ sudo wireshark &
رابط گرافیگی وایر شرک ظاهر میشود.در textbox فیلتر عبارت of را تایپ کرده روی دکمه' appley کلیک میکنیم.
Capture > select interface >lo >start
پکت های دام انداخته شده از اینتر فیس loop back ومشخصاتشان آنالیز ومطابق شکل زیر بصورت real-time نمایش داده میشوند.:
برای توقف مانیتورینگ پکتها روی stop کلیک کنید.
XTerm Display : For more complex debugging
گزینه' مونیتورینگ و عیب یابی با جزئیات اتصالات شبکه
نمایش xterm قابلیت کارامد مینینت برای مونیتورینگ جریان داده ، اتصالات نودها و عیب یابی نقاط ضعف شبکه است.این امکان را میدهد تا از تک تک نودها بتوانیم از المانهای متصل با کنترل بسته های و ICMP وtcp وضعیت شبکه را با جزئیات مانیتور کنیم.
Practical cenario for multiple real-time Monitoring & Debuging in mininet
سناریو:
مونیتورینگ چندگانه و همزمان از تراکنشهای real time با رابط مینی نت و wireshark و رابط xterm
با کد زیردر رابط کاربری mininet (putty) یک توپولوژی مینیمال با قابلیت xterm ایجاد میکنیم.
این دستور توپولوژی را ایجاد و ترمینالهای کنترلی تمام هاست ها را نمایش میدهد.
$ sudo mn -x
در پنجره' ترمینال h1 آنالایزر wireshark را با دستور زیر اجرا میکنیم:
# wireshark &
در پنجره' xterm مربوط به h2 با دستور زیر یک ردیاب tcp ایجاد میکنیم. این عمل صرفا" برای نشان دادن 2 روش متفاوت مونیترینگ است.
# tcpdump
در رابط مینی نت (putty) یک دستور ping بین h1 و h2 اجرا میکنیم:
mininet> h1 ping h
نتیجه را بصورت مانیتورینگ چندگانه ، همزمان در زمان واقعی با wireshark(tcp,ICMP packets) ، mininet(ping) و پنجره' xterm هاست 2 طبق شکل زیر مشاده میکنیم.
معرفی رابط گرافیکی Miniedit
The Mininet network Emulator includes MiniEdit, a simple GUI editor for Mininet. MiniEdit is an experimental tool created to demonstrate how Mininet can be extended.
MiniEdit یک رابط گرافیکی کاربری ساده تعبیه شده در مینی نت است.
مینی ادیت یک ابزار آزمایشگاهی عملی است که نشان میدهد شبکه چگونه میتواند بوسیله' مینی نت تشکیل و توسعه داده شود.
در شکل زیر تصویری از رابط کاربری مینی نت را مشاهده میکنید.
در ادامه میخواهیم چگونگی ایجاد یک شبکه، پیکربندی، ذخیره' توپولوژی و اجرای آن را در مینی ادیت بررسی کنیم.
برای Run کردن مینی ادیت باید ماشین مجازی مینی نت فعال و اتصال امن ssh بین ماشین هاست و مینینی نت همانگونه که توضیح داده شد برقرار شده باشد.
کد اسکریپت مینی ادیت در پوشه' examples در مینی نت قرار دارد.
برای اجرای مینی ادیت دستور زیر را در رابط متنی پاتی وارد میکنیم.
$ sudo ~/mininet/examples/miniedit.py
مینی ادیت اجرا و رابط کاربری نمایش داده خواهد شد.
همانطور که در تصویر زیر میبینید، دارای یک نوار منوی ساده در قسمت بالا، یک نوار ابزار در سمت چپ، و محیط سفید رنگ برای قرار دادن اجزای شبکه و ساخت توپولوژی های گرافیکی است .
اجزای نوار ابزار:
ایجاد یک معماری سفارشی با Miniedit
با کلیک روی ابزار select و ابزارهای معرفی شده توپولوژی زیر را با 3 کنترلر 8 سوییچ و 10 هاست ایجاد کرده. برای ایجاد لینکها اول روی ابزار لینک کلیک سپس روی یکی از نودها کلیک و بسمت نود دیگر کشیده ، روی نود دوم کلیک میکنیم.
برای پیکربندی کنترلرهاباید روی هر یک از کنترلها راست کلیک properties را انتخاب کنیم. شماره پورت اتصال c1 را به 6634 و c2 را به 6635 تغییر میدهیم.
برای تنظیمات کلی باید در نوار منو روی تب Edit کلیک و گزینه' Perferences را انتخاب کنید.
خط فرمان CLI مینی ادیت بطور پیشفرض غیرفعال است، برای استفاده از آن باید تیک گزینه' start CLI
را فعال کنیم.
Save topology file
توپولولوژی با ید با پسوند *.mn ذخیره شود. از منوی فایل گزینه'save را کلیک و توتولوژی را با نام دلخواه با حروف انگلیسی ذخیره میکنیم.
Save custom Mininet script
حالا اسکریپت سفارشی مینی نت این توپولوژی را ذخیره کنیم. که با پسوند *.py ذخیره میشود.
برای اینکار از منوی فایل مینی ادیت گزینه '' Save Level 2 Script را انتخاب و در پو شه' examples ذخیره میکنیم.
Run the MiniEdit network scenario
حال میخواهیم سناریوی سفارشی ایجاد شده را در CLI مینی نت در رابط کاربری putty مشاهده کنیم.
گزینه'Run از منوی ران و یا دگمه'Run در قسمت پایین سمت چپ مینی ادیت کلیک ونتیجه را مشاهده میکنیم. (شکل زیر)
Experiment with the network
تمرین : بررسی المانهای شبکه ایجاد شده
View Open vSwitch configurations
گام اول :
حال که شبکه' SDN شفارشی ما اجرا شد میتوانیم خصوصیات هر یک از المانها را بررسی کنیم.
ابتدا قصد داریم پیکر بندی های سوییچ در شبکه را چک کنیم.از منو تب Run گزینه ی
Show OVS Summary را برای مشاهده' لیست پیکربندی های سوییچ انتخاب میکنیم. در پنجره'بازشده میتوانیم بازبینی کنیم هر یک از سوییچها بدرستی عمل Listening را نسبت به کنترلری که به آن متصلند انجام دهند. وصحت وسقم پورتهای متصل به سوییچ را چک کنیم.
Check switch flow tables
گام بعدی: چک کردن جدول جریان پکتها در سوییچها
$ sudo ovs-ofctl dump-flows s1
شبیه سازی یک لینک قطع شده در توپولولوژی در Miniedit
در توپولوژی فوق نشانگر را روی یکی از لینکهای آبی رتگ نگهداشته راست کلیک میکنیم. گزینه'
Link Down را از منوی شناور انتخاب میکنیم. لینک مزبور به نقطه چین تغییر وضعیت میدهد که نشاندهنده' قطع شدن لینک است.
جدول flow را مجددا" بررسی میکنیم.
$ sudo ovs-ofctl dump-flows s1
بی پاسخ بودن ping را بررسی میکنیم.
منابع:
Mininet: Rapid Prototyping for Software Defined Networks : By Bob Lantz Mininet Core Team
MiniNet: A Starting Point to Software Defined Network
By STEVE JIN
Software DefineNetworks (SDN)and its relevance in the DC
Bjørn R. Martinussen
DC Solutions Architect
MiniNet as an SDN test platform
by Andrea Dainese
brm@cicso.com
http://mininet.org/walkthrough/
http://www.cs.tau.ac.il/~schiffli/sdn/Lecture2-Tools-TAU.pptx
https://mailman.stanford.edu/pipermail/mininet-discuss/…/000756.html
https://groups.google.com/forum/#!topic/geni-users/isPxC_mQwbA
https://www.youtube.com/watch?v=jmlgXaocwiE
https://www.cs.duke.edu/courses/current/compsci514/FloodlightTutorial.pdf
http://search.iiit.ac.in/blog/pulkitgoel/simulating-virtual-network-mininet
Download/Get Started With Mininet http://mininet.org/download/
sdnhub.org/resources/useful-mininet-setup
exer_ses2-intro_to_mininet_learning_switch_tutorial.pdf
http://ijssst.info/Vol-16/No-4/data/8258a205.pdf
archive.openflow.org/wk/index.php/OpenFlow_Tutorial
http://netseminar.stanford.edu/seminars/11_14_13.pdf
https://www.youtube.com/watch?v=uJoKEiN_Bgg
https://github.com/mininet/mininet/wiki/Videos
video.wmasn.com/video_CPasnNg9Z4I.htm.htm
www.costiser.ro/2014/08/07/sdn-lesson-1-introduction-to-mininet
ضمیمه
لینک دانلود فایل نصب سرور x11
http://up.persianscript.ir/do.php?filename=af76-Xming-6-9-0-31-setup.rar
لینک دانلود رایگان منابع معتبر انگلیسی مرتبط با شبکه های SDN
Beginnings
The Road to SDN, Nick Feamster, Jennifer Rexford, Ellen Zegura, 2013
Ethane: Taking Control of the Enterprise, Martìn Casado, Michael J. Freedman, Justin Pettit, Jianying Luo, Nick McKeown, Scott Shenker, Sigcomm 2007
Design and Implementation of a Routing Control Platform, Matthew Caesar, Donald Caldwell, Nick Feamster, Jennifer Rexford, Aman Shaikh, Jacobus van der Merwe, NSDI 2005
A Clean Slate 4D Approach to Network Control and Management, Albert Greenberg, Gisli Hjalmtysson, David A. Maltz, Andy Myers, Jennifer Rexford, Geoffrey Xie, Hong Yan, Jibin Zhan, Hui Zhang,CCR 2005
SANE: A Protection Architecture for Enterprise Networks, Martìn Casado, Tal Garfinkel, Aditya Akella, Michael J. Freedman, Dan Boneh, Nick McKeown, Scott Shenker, Usenix Security 2006
Tesseract: A 4D Network Control Plane, Hong Yan, David A. Maltz, T.S. Eugene Ng, Hemant Gogineni, Hui Zhang, Zheng Cai, NSDI 2007
The Case for Separating Routing from Routers, Nick Feamster, Hari Balakrishnan, Jennifer Rexford, Aman Shaikh, Jacobus van der Merwe, FDNA 2004
A Survey of Active Network Research, David L. Tennenhouse, Jonathan M. Smith, W. David Sincoskie, David J. Wetherall, Gary J. Minden, IEEE Communications 1997
The Tempest: A Practical Framework for Network Programmability, Jacobus E. van der Merwe, Sean Rooney, Ian Leslie, Simon Crosby, IEEE Network 1998
In VINI Veritas: Realistic and Controlled Network Experimentation, Andy Bavier, Nick Feamster, Mark Huang, Larry Peterson, Jennifer Rexford, Sigcomm 2006
IETF ForCES (Forwarding and Control Element Separation)
OpenFlow
OpenFlow: Enabling Innovation in Campus Networks, Nick McKeown, Tom Anderson, Hari Balakrishnan, Guru Parulkar, Larry Peterson, Jennifer Rexford, Scott Shenker, Jonathan Turner, CCR 2008
What OpenFlow is (and more importantly, what it's not), Martìn Casado
Programming Protocol-Independent Packet Processors, Pat Bosshart, Dan Daly, Martin Izzard, Nick McKeown, Jennifer Rexford, Dan Talayco, Amin Vahdat, George Varghese, David Walker
SDN Building Blocks
General Design
Fabric: A Retrospective on Evolving SDN, Martìn Casado, Teemu Koponen, Scott Shenker, Amin Tootoonchian, HotSDN 2012
The Scaling Implications of SDN, Martìn Casado
On the Scalability of Software-Defined Networking, Soheil Hassas Yaganeh, Amin Tootoonchian, Yashar Ganjali, IEEE Communications Magazine Feb 2013
A Highly Available Software Defined Fabric, Aditya Akella, Arvind Krishnamurthy, HotNets 2014
Software-Defined Networking: A Comprehensive Survey, Diego Kreutz, Fernando M.V. Ramos, Paulo Esteves Veríssimo, Christian Esteve Rothenberg, Siamak Azodolmolky, Steve Uhlig, IEEE 2015
Control plane
NOX: Towards an Operating System for Networks, Natasha Gude, Teemu Koponen, Justin Pettit, Ben Pfaff, Martìn Casado, Nick McKeown, Scott Shenker, CCR 2008
Can the Production Network Be the Testbed?, Rob Sherwood, Glen Gibb, Kok-Kiong Yap, Guido Appenzeller, Martìn Casado, Nick McKeown, Guru Parulkar, OSDI 2010
Onix: A Distributed Control Platform for Large-scale Production Networks, Teemu Koponen et al, OSDI 2010
The Beacon OpenFlow Controller, David Erickson, HotSDN 2013
Maestro: A System for Scalable OpenFlow Control, Zheng Cai, Alan L. Cox, T.S. Eugene Ng, 2011
The Controller Placement Problem, Brandon Heller, Rob Sherwood, Nick McKeown, HotSDN 2012
HyperFlow: A Distributed Control Plane for OpenFlow, Amin Tootoonchian, Yashar Ganjali, INM 2010
Exploiting Locality in Distributed SDN Control, Stefan Schmid, Jukka Suomela, HotSDN 2013
Kandoo: A Framework for Efficient and Scalable Offloading of Control Applications, Soheil Hassas Yeganeh, Yashar Ganjali, HotSDN 2012
Applying Operating System Principles to SDN Controller Design, Matthew Monaco, Oliver Michel, Eric Keller, HotNets 2013
Software Transactional Networking: Concurrent and Consistent Policy Composition, Marco Canini, Petr Kuznetsov, Dan Levin, Stefan Schmid, HotSDN 2013
The Case for Reliable Software Transactional Networking, Marco Canini, Petr Kuznetsov, Dan Levin, Stefan Schmid, 2013
Beehive: Towards a Simple Abstraction for Scalable Software-defined Networks, Soheil Hassas Yeganeh, Yashar Ganjali, HotNets 2014
Tolerating SDN Application Failures with Lego SDN, Balakrishnan Chadrasekaran, Theophilus Benson, HotNets 2014
Scotch: Elastically Scaling up SDN Control-Plane usingvSwitch based Overlay, An Wang, Yang Guo, Fang Hao, T.V. Lakshman, Songqing Chen, CoNext 2014
ONOS: Towards An Open Distributed SDN OS, Pankaj Berde, Matteo Gerola, Jonathan Hart, Yuta Higuchi, Masayoshi Kobayashi, Toshio Koide, Bob Lantz, Brian O'Connor, Pavlin Radoslavov, William Snow, Guru Parulukar, HotSDN 2014
A Network State Management Service, Peng Sun, Ratul Mahajan, Jennifer Rexford, Lihua YuanMing Zhang, Ahsan Arefin, Sigcomm 2014
CoVisor: A Compositional Hypervisor for Software-Defined Networks, Xin Jin, Jennifer Gossels, Jennifer Rexford, David Walker, NSDI 2015
Towards Secure and Dependable Software-defined Networks, Diego Kreutz, Fernando M.V. Ramos, Paulo Veríssimo, HotSDN 2013
Data plane
DevoFlow: Scaling Flow Management for High-performance Networks, Andrew R. Curtis, Jeffrey C. Mogul, Jean Tourrilhes, Praveen Yalagandula, Puneet Sharma, Sujata Banerjee, Sigcomm 2011
Scalable Flow-based Networking with DIFANE, Minlan Yu, Jennifer Rexford, Michael J. Freedman, Jia Wang, Sigcomm 2010
Using CPU as a Traffic Co-processing Unit in Commodity Switches, Guohan Lu, Rui Miao, Yongqiang Xiong, Chuanxiong Guo, HotSDN 2012
Hey, You Darned Counters! Get off My ASIC!, Jeffrey C. Mogul, Paul Congdon, HotSDN 2012
Forwarding Metamorphosis: Fast Programmable Match-Action Processing in Hardware for SDN, Pat Bosshart, Glen Gibb, Hun-Seok Kim, George Varghese, Nick McKeown, Martin Izzard, Fernando Mujica, Mark Horowitz, Sigcomm 2013
No Silver Bullet: Extending SDN to the Data Plane, Anirudh Sivaraman, Keith Weinstein, Suvinay Subramanian, Hari Balakrishnan, HotNets 2013
Reclaiming the Brain: Useful OpenFlow Functions in the Data Plane, Liron Schiff, Michael Borokhovich, Stefan Schmid, HotNets 2014
Application-aware Data Plane Processing in SDN, Hesham Mekky, Fang Hao, Sarit Mukherjee, Zhi-Li Zhang, T.V. Lakshman, HotSDN 2014
Shadow MACs: Scalable Label Switching for Commodity Ethernet, Kanak Agarwal, Colin Dixon, Eric Rozner, John Carter, HotSDN 2014
CAB: A Reactive Wildcard Rule Caching System for Software-Defined Networks, Bo Yan, Yang Xu, Hongya Xing, Kang Xi, H. Jonathan Chao, HotSDN 2014
Infinite CacheFlow in Software-defined Networks, Naga Katta, Omid Alipurfard, Jennifer Rexford, David Walker, HotSDN 2014
An Adaptable Rule Placement for Software-defined Networks, Shuyuan Zhang, Franjo Ivancic, Cristian Lumezanu, Yifei Yuan, Aarti Gupta, Sharad Malik, DSN 2014
Compiling Packet Programs to Reconfigurable Switches, Lavanya Jose, Lisa Yan, George Varghese, Nick McKeown, NSDI 2015
The Design and Implementation of Open vSwitch, Ben Pfaff et al., NSDI 2015
Hybrid networks
Panopticon: Reaping the Benefits of Partial SDN Deployment in Enterprise Networks, Dan Levin, Marco Canini, Stefan Schmid, Fabian Schaffert, Anja Feldmann, USENIX ATC 2014
HybNET: Network Manager for A Hybrid Network Infrastructure, Hui Lu, Nipun Arora, Hui Zhang, Cristian Lumezanu, Junghwan Rhee, Guofei Jiang, Middleware (industrial track) 2013
ClosedFlow: OpenFlow-like Control over ProprietaryDevices, Ryan Hand, Eric Keller, HotSDN 2014
Programming
Languages for Software-Defined Networks, Nate Foster et al, IEEE Communication Magazine Feb 2013
Frenetic: A Network Programming Language, Nate Foster, Rob Harrison, Michael J. Freedman, Christopher Monsanto, Jennifer Rexford, Alec Story, David Walker, ICFP 2011
Composing Software-Defined Networks, Christopher Monsanto, Joshua Reich, Nate Foster, Jennifer Rexford, David Walker, NSDI 2013
Participatory Networking: An API for Application Control of SDNs, Andrew D. Ferguson, Arjun Guha, Chen Liang, Rodrigo Fonseca, Shriram Krishnamurthi, Sigcomm 2013
A Compile and Run-time System for Network Programming Languages, Christopher Monsanto, Nate Foster, Rob Harrison, David Walker, POPL 2012
Machine-Verified Network Controllers, Arjun Guha, Mark Reitblatt, Nate Foster, PLDI 2013
Nettle: Functional Reactive Programming of OpenFlow Networks, Andreas Voellmy and Paul Hudak, PADL 2011
Procera: A Language for High-Level Reactive Network Control, Andreas Voellmy, Hyojoon Kim, Nick Feamster, HotSDN 2012
FatTire: Declarative Fault Tolerance for Software-defined Networks, Mark Reitblatt, Marco Canini, Arjun Guha, Nate Foster, HotSDN 2013
A Balance of Power: Expressive, Analyzable Controller Programming, Tim Nelson, Arjun Guha, Daniel J. Dougherty, Kathi Fisler, Shriram Krishnamurthi, HotSDN 2013
Hierarchical Policies for Software Defined Networks, Andrew D. Ferguson, Arjun Guha, Chen Liang, Rodrigo Fonseca, Shriram Krishnamurthi, HotSDN 2012
Splendid Isolation: A Slice Abstraction for Software-Defined Networks, Stephen Gutz, Alec Story, Cole Schlesinger, Nate Foster, HotSDN 2012
CAP for Networks, Aurojit Panda, Colin Scott, Ali Ghodsi, Teemu Koponen, Scott Shenker, HotSDN 2013
Corybantic: Towards the Modular Composition of SDN Control Programs, Jeffrey C. Mogul, Alvin AuYoung, Sujata Banerjee, Lucian Popa, Jeongkeun Lee, Jayaram Mudigonda, Puneet Sharma, Yoshio Turner, HotNets 2013
NetEgg: Programming Network Policies by Examples, Yifei Yuan, Rajeev Alur, Boon Thau Loo, HotNets 2014
Tango: Simplifying SDN Control with Automatic SwitchProperty Inference, Abstraction, and Optimization, Aggelos Lazaris, Daniel Tahara, Xin Huang, Li Erran Li, Andreas Voellmy, Y. Richard Yang, Minlan Yu, CoNext 2014
Merlin: A Language for Provisioning Network Resources, Robert Soulé, Shrutarashi Basu, Parisa Jalili Marandi, Fernando Pedone, Robert Kleinberg, Emin Gün Sirer, Nate Foster, CoNext 2014
Democratic Resolution of Resource Conflicts BetweenSDN Control Programs, Alvin AuYoung, Yadi Ma, Sujata Banerjee, Jeongkeun Lee, Puneet Sharma, Yoshio Turner, Chen Liang, Jeffrey C. Mogul,CoNext 2014
Kinetic: Verifyable Dynamic Network Control, Hyojoon Kim, Joshua Reich, Arpit Gupta, Muhammad Shahbaz, Nick Feamster, Russ Clark, NSDI 2015
Updates
Abstractions for Network Update, Mark Reitblatt, Nate Foster, Jennifer Rexford, Cole Schlesinger, David Walker, Sigcomm 2012
zUpdate: Updating Data Center Networks with Zero Loss, Hongqiang Harry Liu, Xin Wu, Ming Zhang, Lihua Yuan, Roger Wattenhofer, David A. Maltz, Sigcomm 2013
Walk the Line: Consistent Network Updates with Bandwidth Guarantees, Soudeh Ghorbani, Matthew Caesar, HotSDN 2012
A Safe, Efficient Update Protocol for OpenFlow Networks, Rick McGreer, HotSDN 2012
Incremental Consistent Updates, Naga Praveen Katta, Jennifer Rexford, David Walker, HotSDN 2013
OF.CPP: Consistent Packet Processing for OpenFlow, Peter Perešíni, Maciej Kuźniar, Nedeljko Vasić, Marco Canini, Dejan Kostić, HotSDN 2013
HotSwap: Correct and Efficient Controller Upgrades for Software-Defined Networks, Laurent Vanbever, Joshua Reich, Theophilus Benson, Nate Foster, Jennifer Rexford, HotSDN 2013
On Consistent Updates in Software Defined Networks, Ratul Mahajan, Roger Wattenhofer, HotNets 2013
Dynamic Scheduling of Network Updates, Xin Jin, Hongqiang Harry Liu, Rohan Gandhi, Srikanth Kandula, Ratul Mahajan, Ming Zhang, Jennifer Rexford, Roger Wattenhofer, Sigcomm 2014
Good Network Updates for Bad Packets, Arne Ludwig, Matthias Rost, Damien Foucard, Stefan Schmid, HotNets 2014
Providing Reliable FIB Update Acknowledgments in SDN, Maciej Kuźniar, Peter Perešíni, Dejan Kostić, CoNext 2014
Incremental Update for a Compositional SDN Hypervisor, Xin Jin, Jennifer Rexford, David Walker, HotSDN 2014
Compiling Minimum Incremental Update for Modular SDN Languages, Xitao Wen, Chunxiao Diao, Xun Zhao, Yan Chen, Li Erran Li, Bo Yang, Kai Bu, HotSDN 2014
Enforcing Customizable Consistency Properties in Software-Defined Networks, Wenxuan Zhou, Dong Jin, Jason Croft, Matthew Caesar, P. Brighten Godfrey, NSDI 2014
Efficient Synthesis of Network Updates, Jedidiah McClurg, Hossein Hojjat, Pavol Cerny, Nate Foster, PLDI 2015
Emulation and Simulation
A Network in a Laptop: Rapid Prototyping for Software-Defined Networks, Bob Lantz, Brandon Heller, Nick McKeown, HotNets 2010
Fast, Accurate Simulation for SDN Prototyping, Mukta Gupta, Joel Sommers, Paul Barford, HotSDN 2013
High-Fidelity Switch Models for Software-Defined Network Emulation, Danny Yuxing Huang, Kenneth Yocum, Alex C. Snoeren, HotSDN 2013
Verification
Veriflow: Verifying Network-Wide Invariants in Real Time, Ahmed Khurshid, Wenxuan Zhou, Matthew Caesar, P. Brighten Godfrey, NSDI 2013
Header Space Analysis: Static Checking for Networks, Peyman Kazemian, George Varghese, Nick McKeown, NSDI 2012
Real Time Network Policy Checking using Header Space Analysis, Peyman Kazemian, Michael Chang, Hongyi Zeng, George Varghese, Nick McKeown, Scott Whyte, NSDI 2013
A NICE Way to Test OpenFlow Applications, Marco Canini, Daniele Venzano, Peter Perešini, Dejan Kostić, Jennifer Rexford, NSDI 2012
A SOFT Way for OpenFlow Interoperability Testing, Maciej Kuźniar, Peter Perešíni, Marco Canini, Daniele Venzano, Dejan Kostić, CoNEXT 2012
FlowChecker: Configuration, Analysis, and Verification of Federated OpenFlow Infrastructures, Ehab Al-Shaer, Saeed Al-Haj, SafeConfig 2010
Towards A Verifiable Software Dataplane, Mihai Dobrescu, Katerina Argyraki, HotNets 2013
An Assertion Language for Debugging SDN Applications, Ryan Beckett, X. Kelvin Zou, Shuyuan Zhang, Sharad Malik, Jennifer Rexford, David Walker, HotSDN 2014
Towards Correct Network Verification, Soudeh Ghorbani, Brighten Godfrey, HotSDN 2014
Testing
Leveraging SDN Layering to Systematically Troubleshoot Networks, Brandon Heller et al, HotSDN 2013
Troubleshooting Blackbox SDN Control Software with Minimal Causal Sequences, Colin Scott et al., Sigcomm 2014
OFRewind: Enabling Record and Replay Troubleshooting for Networks, Andreas Wundsam, Dan Levin, Srini Seetharaman, Anja Feldman, Usenix ATC 2011
Where Is the Debugger for My Software-Defined Network?, Nikhil Handigol, Brandon Heller, Vimalkumar Jeyakumar, David Mazières, Nick McKeown, HotSDN 2012
OFLOPS: An Open Framework for OpenFlow Switch Evaluation, Charalampos Rotsos, Nadi Sarrar, Steve Uhlig, Rob Sherwood, Andrew W. Moore, PAM 2012
Logically Centralized? State Distribution Trade-offs in Software Defined Networks, Dan Levin, Andreas Wundsam, Brandon Heller, Nikhil Handigol, Anja Feldman, HotSDN 2012
On Controller Performance in Software-Defined Networks, Amin Tootoonchian, Sergey Gorbunov, Yashar Ganjali, Martìn Casado, Rob Sherwood, Hot-ICE 2012
Answering Why-Not Queries in Software-defined Networks with Negative Provenance, Yang Wu, Andreas Haeberlen, Wenchao Zhou, Boon Thau Loo, HotNets 2013
Controller-agnostic SDN Debugging, Ramakrishnan Durairajan, Joel Sommers, Paul Barford, CoNext 2014
What You Need to Know About SDN Flow Tables, Maciej Kuźniar, Peter Perešíni, Dejan Kostić, PAM 2015
SDN Applications
Monitoring and measurement
Software Defined Traffic Measurement with OpenSketch, Minlan Yu, Lavanya Jose, Rui Miao, NSDI 2013
FlowSense: Monitoring Network Utilization with Zero Measurement Cost, Curtis Yu, Cristian Lumezanu, Vishal Singh, Yueping Zhang, Guofei Jiang, Harsha V. Madhyastha, PAM 2013
Software-defined Latency Monitoring in Data Center Networks, Curtis Yu, Cristian Lumezanu, Abhishek Sharma, Qiang Xu, Guofei Jiang, Harsha V. Madhyastha, PAM 2015
Enabling Layer 2 Pathlet Tracing through ContextEncoding in Software-Defined Networking, Hui Zhang, Cristian Lumezanu, Junghwan Rhee, Nipun Arora, Qiang Xu, Guofei Jiang, HotSDN 2014
Online Measurement of Large Traffic Aggregates on Commodity Switches, Lavanya Jose, Minlan Yu, Jennifer Rexford, Hot-ICE 2011
Resource/Accuracy Tradeoffs in Software Defined Measurement, Masoud Moshref, Minlan Yu, Ramesh Govindan, HotSDN 2013
OpenTM: Traffic Matrix Estimator for OpenFlow Networks, Amin Tootoonchian, Monia Ghobadi, Yashar Ganjali, PAM 2010
Extensible and Scalable Network Monitoring using OpenSAFE, Jeffrey R. Ballard, Ian Rae, Aditya Akella, INM/WREN 2010
Lightweight DDoS Flooding Attack Detection using NOX/OpenFlow, Rodrigo Braga, Edjard Mota, Alexandre Passito, LCN 2010
DREAM: Dynamic Resource Allocation for Software-defined Measurement, Masoud Moshref, Minlan Yu, Ramesh Govindan, Amin Vahdat, Sigcomm 2014
Compiling Path Queries in Software-Defined Networks, Srinivas Narayana, Jennifer Rexford, David Walker, HotSDN 2014
Security
Ethane: Taking Control of the Enterprise, Martìn Casado, Michael J. Freedman, Justin Pettit, Jianying Luo, Nick McKeown, Scott Shenker, Sigcomm 2007
Resonance: Dynamic Access Control in Enterprise Networks, Ankur Nayak, Alex Reimers, Nick Feamster, Russ Clark, WREN 2009
OpenFlow Random Host Mutation: Transparent Moving Target Defense using Software Defined Networking, Jafar Haadi Jafarian, Ehab Al-Shaer, Qi Duan, HotSDN 2012
FRESCO: Modular Composable Security Services for Software-Defined Networks, Seungwon Shin, Phil Porras, Vinod Yagneswaran, Martin Fong, Guofei Gu, Mabry Tyson, NDSS 2013
NetFuse: Short-circuiting Traffic Surges in the Cloud, Ye Wang, Yueping Zhang, Vishal Singh, Cristian Lumezanu, Geoff Jiang, ICC 2013
Improving Network Management with Software Defined Networking, Hyojoon Kim, Nick Feamster, IEEE Communications Magazine Feb 2013
A Security Enforcement Kernel for OpenFlow Networks, Phillip Porras, Seungwon Shin, Vinod Yegneswaran, Martin Fong, Mabry Tyson, Guofei Gu, HotSDN 2012
FlowGuard: Building Robust Firewalls for Software-defined Networks, Hongxin Hu, Wonkyu Han, Gail-Joon Ahn, Ziming Zhao, HotSDN 2014
Fleet: Defending SDN from Malicious Administrators, Stephanos Matsumoto, Samuel Hitz, Adrian Perrig, HotSDN 2014
A Survey of Securing Networks Using Software Defined Networking, Syed Taha Ali, Vijay SIvaraman, Adam Radford, Sanjay Jha, Transactions on Reliability 2015
Software Defined Networking for Security Enhancement in Wireless Mobile Networks, Aaron Yi Ding, Jon Crowcroft, Sasu Tarkoma, Hannu Flinck, Computer Networks 2014
Cloud
Applying NOX to the Datacenter, Arsalan Tavakoli, Martìn Casado, Teemu Koponen, Scott Shenker, HotNets 2009
A Management Method of IP Multicast in Overlay Networks using OpenFlow, Yukihiro Nakagawa, Kazuki Hyoudou, Takeshi Shimizu, HotSDN 2012
Dynamic Graph Query Primitives for SDN-based Cloud Network Management, Ramya Raghavendra, Jorge Lobo, Kang-Won Lee, HotSDN 2012
Meridian: An SDN Platform for Cloud Network Services, Mohammad Banikazemi, David Olshefski, Anees Shaikh, John Tracey, Guohui Wang, IEEE Communications Magazine Feb 2013
BigData
Transparent and Flexible Network Management for Big Data Processing in the Cloud, Anupam Das, Cristian Lumezanu, Yueping Zhang, Vishal Singh, Guofei Jiang, Curtis Yu, HotCloud 2013
Programming Your Network at Run-time for Big Data Applications, Guohui Wang, T.S. Eugene Ng, Anees Shaikh, HotSDN 2012
Virtualization
Can the Production Network Be the Testbed?, Rob Sherwood, Glen Gibb, Kok-Kiong Yap, Guido Appenzeller, Martìn Casado, Nick McKeown, Guru Parulkar, OSDI 2010
OpenNF: Enabling Innovation in Network Function Control, Aaron Gember-Jacobson, Raajay Viswanathan, Chaithan Prakash, Robert Grandl, Junaid Khalid, Sourav Das, Aditya Akella, Sigcomm 2014
SIMPLE-fying Middlebox Policy Enforcement Using SDN, Zafar Ayyub Qazi, Cheng-Chun Tu, Luis Chiang, Rui Miao, Vyas Sekar, Minlan Yu, Sigcomm 2013
FlowTags: Enforcing Network-Wide Policies in the Presence of Dynamic Middlebox Actions, Seyed Kaveh Fayazbakhsh, Vyas Sekar, Minlan Yu, Jeffrey C. Mogul, HotSDN 2013
Enabling Fast, Dynamic Network Processing with ClickOS, Joao Martins, Mohamed Ahmed, Costin Raiciu, Felipe Huici, HotSDN 2013
Design and Implementation of a Consolidated Middlebox Architecture, Vyas Sekar, Norbert Egi, Sylvia Ratnasamy, Michael K. Reiter, Guangyu Shi, NSDI 2012
Don't Call Them Middleboxes, Call Them Middlepiples, Hani Jamjoom, Dan Williams, Upendra Sharma, HotSDN 2014
Routing
Hedera: Dynamic Flow Scheduling for Data Center Networks, Mohammad Al-Fares, Sivasankar Radhakrishnan, Barath Raghavan, Nelson Huang, Amin Vahdat, NSDI 2010
ElasticTree: Saving Energy in Data Center Networks, Brandon Heller, Srini Seetharaman, Priya Mahadevan, Yannis Yakoumis, Puneet Sharma, Sujata Banerjee, Nick McKeown, NSDI 2010
OpenFlow-based Server Load Balancing Gone Wild, Richard Wang, Dana Butnariu, Jennifer Rexford, Hot-ICE 2011
Plug-n-Serve: Load-balancing Web Traffic using OpenFlow, Nikhil Handigol, Srinivasan Seetharaman, Mario Flajslik, Nick McKeown, Ramesh Johari, Sigcomm 2009 Demo
Revisiting Routing Control Platforms with the Eyes and Muscles of Software-Defined Networking, Christian Esteve Rothenberg, Marcelo Ribeiro Nascimento, Marcos Rogerio Salvador, Carlos N.A. Correa, Sidney C. de Lucena, Robert Raszuk, HotSDN 2012
Traffic Engineering in Software-defined Networks, Sugam Agarwal, Murali Kodialam, T.V. Lakshman, Infocom 2013
WAN
Achieving High Utilization with Software-Driven WAN, Chi-Yao Hong, Srikanth Kandula, Ratul Mahajan, Ming Zhang, Vijay Gill, Mohan Nanduri, Roger Wattenhofer, Sigcomm 2013
B4: Experience with a Globally-Deployed Software Defined WAN, Sushant Jain et al., Sigcomm 2013
SDX: A Software Defined Internet Exchange, Arpit Gupta et al., Sigcomm 2014
Virtualizing the Access Network via Open APIs, Vijay Sivaraman, Hassan Habibi Gharakheili, Dennis Ong, John Matthews, Craig Russell, CoNEXT 2013
Optical (many thanks to Yawei Yin for most of the references below)
PAC.C, Saurav Das and others
Enabling the Future Optical Internet with OpenFlow: A Paradigm Shift in Providing Intelligent Optical Network Services, Dimitra Simeonidou, Reza Nejabati, Siamak Azodolmolky, ICTON 2011
Software-Defined Optical Networks Technology and Infrastructure: Enabling Software-Defined Optical Network Operations, Mayur Channegowda, Reza Nejabati, Dimitra Simeonidou, Journal of Optical Communications and Networking 2013
SDN and OpenFlow for Dynamic Flex-Grid Optical Access and Aggregation Networks, Neda Cvijetic, Akihiro Tanaka, Philip N. Ji, Karthik Sethuraman, Shuji Murakami, Ting Wang, Journal of Lightwave Technology 2014
First Field Trial of an OpenFlow-based Unified Control Plane for Multi-layer Multi-granularity Optical Networks, Lei Liu, Dongxu Zhang, Takehiro Tsuritani, Ricard Vilalta, Ramon Casellas, Linfeng Hong, Itsuro Morita, Hongxiang Guo, Jian Wu, Ricardo Martinez, Raul Muñoz, Optical Fiber Communication Conference 2012
Extending software defined network principles to include optical transport, Steven Gringeri, Nabil Bitar, Tiejun J. Xia, IEEE Communications Magazine 2013
Wireless
SoftRAN: Software Defined Radio Access Network, Aditya Gudipati, Daniel Perry, Li Erran Li, Sachin Katti, HotSDN 2013
OpenRadio: A Programmable Wireless Dataplane, Manu Bansal, Jeffrey Mehlman, Sachin Katti, Philip Levis, HotSDN 2012
Towards Programmable Enterprise WLANs with Odin, Lalith Suresh, Julius Schulz-Zander, Ruben Merz, Anja Feldmann, Teresa Vazao, HotSDN 2012
Towards Software-Defined Cellular Networks, Li Erran Li, Z. Morley Mao, Jennifer Rexford, EWSDN 2012
SoftMoW: Recursive and ReconfigurableCellular WAN Architecture, Mehrdad Moradi, Wenfei Wu, Li Erran Li, Z. Morley Mao, CoNext 2014
Other resources
Links
OpenFlow webpage
OpenFlow switch specification, 1.1.0, 2011
OpenFlow research demos
List of OpenFlow software projects maintained by Martìn Casado
NEC's SDN initiatives
Conferences, workshops and summits
Symposium on SDN Research (SOSR) 2015
Open Networking Summit 2011 2012 2013 2014 2015
Workshop on Hot Topics in Software Defined Networking (HotSDN) 2012 2013 2014
Workshop on Software Defined Networks (SDN) 2012
European Workshop on Software Defined Networking (EWSDN) 2012 2013 2014
4