2.10.5.2 VLAN
Open Flow می تواند شبکه های مجزا مانند VLAN را در اختیار کاربران بگذارد. ساده ترین راه ، تعیین VLAN ID برای Flowهای پورت های مشخص است. ترافیکی از یک کاربر فرستاده می شود و VLAN ID مناسب به آن داده می شود. راهکار های بیشتر نیز از طریق کنترل امکان پذیر است.
2.10.5.2.1 Mobile wireless VOIP Clients
کاربران VOIP می توانند ارتباط را از طریق Open Flow ایجاد کنند. کنترل کننده محل کاربران را ردیابی می کند و ارتباطات را دوباره مسیریابی می کند. کاربران با جابجا شدن میان شبکه ها و Access point های مختلف ارتباطشان قطع نمی شود و کنترل کننده ارتباط آنها را دوباره مسیریابی می کند.
2.10.5.2.2 شبکه های غیر IP
در اینجا تمام مثال ها درباره شیکه های IP بوده است اما در Open Flow لازم نیست همه شبکه ها IP باشند، تا زمانی که Header پکت ها با Flow Table منطبق باشد کافی است. این کار در آزمایش ها باعث آدرس دهی ، نامگذاری و مسیریابی های تازه می شود. Open Flow چندین راه برای پشتیبانی شبکه های Non IP پیش روی پژوهشگران می گذارد.
2.10.5.2.3 پردازش پکت ها
مثال های بالا برای پژوهش هایی بودند که کنترل کننده ، مسیر پکت ها و آغاز Flow را تعیین می کند. دو راه برای پردازش پکت ها در openflow enable switch وجود دارد. ساده ترین راه این است که تمام پکت ها از کنترل کننده عبور کنند. در این روش تمام پکت ها مستقیم به کنترل کننده فرستاده می شوند. انعطاف پذیری این روش بالاست اما عملکرد پایین است. این روش برای آزمایش پروتکل های جدید مناسب است و برای پیاده سازی در شبکه های بزرگ مناسب نیست.
راه دوم فرستادن پکت ها به سوئیچ قابل برنامه ریزی است. سوئیچ آنها را پردازش می کند.
2.10.6 Openflow
به منظور پیادهسازی عملی SDN دو موضوع باید در نظر گرفته شود. اول این که باید یک معماری منطقی مشترک در تمام سوئیچها، روترها و سایر تجهیزات شبکه وجود داشه باشد که توسط کنترلر SDN مدیریت شود. این معماری منطقی ممکن است به روشهای متفاوت با تجهیزات فروشندگان مختلف و روی دستگاههای شبکه متفاوت پیادهسازی شود. دوم این که، یک پروتکل استاندارد و امن باید بین کنترلر SDN و دستگاه شبکه وجود داشته باشد.
هر دوی این نیازمندیها توسط Openflow برطرف میشود که هم یک پروتکل بین کنترلرهای SDN و دستگاههای شبکه بوده و هم نمونه یک ساختار منطقی عملکردهای سوئیچ شبکه میباشد.
پروتکل Openflow در Openflow Switch Specification که توسط Open Networking Foundation منتشر شده است، تعریف شده است.
2.10.7 معماری منطقی سوئیچ
شکل 2.16 معماری منطقی سوئیچ [8]
شکل 2.14 یک ساختار ابتدایی از محیط Openflow را نشان میدهد. کنترلر SDN با سوئیچهای سازگار با Openflow توسط پروتکل Openflow که روی SSL اجرا میشود ارتباط برقرار میکند. هر سوئیچ به سایر سوئیچهای Openflow و به دستگاههای کاربر متصل میشود که مبدا و مقصد بستههای جریان داده میباشند.
با هر سوئیچ یکسری جداول که بر روی سختافزار یا Firmware پیادهسازی شدهاند برای مدیریت جریانهای بستهها در طول سوئیچ استفاده میشوند.
مشخصات Openflow سه نوع جدول را در معماری منطقی سوئیچ تعریف میکند. جدول جریان داده که بستههای وارده را با یک جریان داده خاص مطابقت میدهد و کارهای خاصی را که باید روی بستهها انجام شود را مشخص میکند. امکان دارد چندین جدول جریان داده وجود داشته باشد که بصورت خط لوله عمل کنند. یک جدول جریان داده ممکن است یک جریان داده را به سمت Group Table هدایت کند که این کار ممکن است باعث فعال شدن مجموعهای از رفتارها شود که بر روی یک یا چند جریان داده تاثیر بگذارد. یک جدول اندازهگیری میتواند چند فعالیت مرتبط با کارایی را در جریان داده فعال سازد.
در اینجا لازم است به تعریف بهتری از جریان داده بپردازیم. یک جریان داده یک توالی از بسته های در حال عبور از شبکه میباشد که مجموعهای از مقادیر فیلد هدر را به اشتراک میگذارد. به عنوان مثال یک جریان داده میتواند شامل تمام بسته ها با IP addressها، مبداء و مقصد یکسان، یا تمام بسته ها با مشخصه VLAN یکسان باشد.
2.10.8 مولفههای جدول جریان داده
هرجدول جریان داده حاوی ورودیهایی میباشد که از 6 مولفه تشکیل شده است.
2.10.8.1 Match Fields : برای انتخاب بستههایی که با مقادیر داخل فیلدها مطابقت دارند استفاده میشود.
2.10.8.2 Priority :اولویت نسبی ورودیهای جدول
2.10.8.3 Counters : به روز شده برای بستههای تطبیق داده شده. مشخصات Openflow انواع مختلف تایمرها را معرفی میکند مثل تعداد بایتهای بستههای دریافتی در هر پورت یا در هر جدول جریان داده و یا هر ورودی جدول جریان داده ؛ تعداد بستههای از بین رفته و مدت زمان جریان داده
2.10.8.4 Instructions : کاری که باید انجام شود اگر تطبیق اتفاق بیفتد.
2.10.8.5 Timeouts : ماکزیمم زمان Idle (بیکاری) قبل از این که جریان داده توسط سوئیچ از بین برود.
2.10.8.6 Cookie : ارزش داده نامفهوم که توسط کنترلر انتخاب شده است. ممکن است توسط کنترلر برای فیلتر کردن آمار جریان داده، تغییر جریان داده و حذف جریان داده استفاده شود؛ ولی در زمان پردازش بسته استفاده نمیشود.
2.10.9 مولفه فیلدهای تطبیق داه شده ورودی یک جدول شامل فیلدهای ضروری زیر است:
2.10.9.1 پورت ورودی: شناسه پورت روی سوئیچ جایی که یک بسته دریافت میشود.
2.10.9.2 آدرسهای مبدا و مقصد Ethernet: هر ورودی میتواند یک آدرس دقیق،یک مقدار Bitmask که تنها
برخی از بیتهای آدرس آن چک شده است و یا یک مقدار جایگزین شونده (که با هر مقداری Match میشود) باشد.
2.10.9.3 شماره پروتکل IPV4 و IPV6: که مقدارش، header بعدی در بسته را مشخص می کند.
2.10.9.4 آدرس مبداء و مقصد IPV4 و IPV6: هر ورودی میتواند یک آدرس دقیق، یک مقدار bitmask، یک مقدار Subnet mask یا یک مقدار جایگزین شونده باشد.
2.10.9.5 پورتهای TCP مبدا و مقصد: مقدار دقیق منطبق شده یا قابل جایگزین شدن
2.10.9.6 پورتهای UDP مبدا و مقصد: مقدار دقیق منطبق شده یا قابل جایگزین شدن
2.10.9.7 فیلدهای منطبق قبلی باید توسط هر سوئیچ سازگار با Openflow پشتیبانی شوند.
2.10.10 فیلدهای زیر ممکن است پشتیبانی شوند:
2.10.10.1 پورت فیزیکی: برای انتخاب پورت فیزیکی، زمانی که بسته روی پورت منطقی دریافت میشود
2.10.10.2 Metadata : اطلاعات اضافی که میتواند از یک جدول به جدول دیگر هنگام پردازش بسته منتقل شود.
2.10.10.3 نوع Ethernet : فیلد نوع Ethernet
2.10.10.4 VLAN ID و VLAN User Priority
2.10.10.5 IPV4 یا IPV6 DS ، فیلدهای سرویسهای متمایز26 و ECN27
2.10.10.6 پورتهایمبداء و مقصد 28SCTP : مقادیر دقیقا منطبق شده یا قابل جایگزین شدن
2.10.10.7 مقادیر دقیقا منطبق شده ICMP29 type Field یا قابل جایگزین شدن ICMP Code Field
2.10.10.8 کد عملیاتی ARP : با فیلد Ethernet Type به طور دقیق منطبق است.
2.10.10.9 آدرسهای مبداء و مقصد IPV6 در ARP30 Payload میتواند یک آدرس دقیق، مقدار bitmask، مقدار Subnet mask یا مقدار قابل جایگزین شدن باشد
2.10.10.10 فیلدهای ICMPV6 Type و ICMPV6 Code : مقدار دقیقا منطبق شده یا قابل جایگزین شدن
2.10.10.11 IPV6 Neighbor Discovery Target Address
2.10.10.12 IPV6 Neighbor Discovery Source and Target Addresses : بخشهای آدرس Link-Layer در یک IPV6 Neighbor Discovery message
2.10.10.13 MPLS Label Value ، Traffic Class و BoS (Bottom of Stack) فیلدهای بالای برچسب یک MPLS Label Stack.
بنابراین، Openflow میتواند توسط ترافیک شبکه که شامل چندین پروتکل و سرویسهای شبکه میباشد استفاده شود. توجه داشته باشید که در لایه MAC/Link، فقط Ethernet پشتیبانی میشود. بنابراین، Openflow نمیتواند ترافیک لایه 2 را روی شبکههای بیسیم کنترل کند.
حال میتوان تعریف دقیقتری از جریان داده را ارائه داد. از دید یک سوئیچ، جریان داده یک توالی از بستههایی است که با یک ورودی خاص در جدول جریان داده، تطبیق داده میشود. این تعریف از دید بسته است، به این معنی که مقدار header field های بسته باید جریان داده را ایجاد کنند نه مسیری که در طول شبکه دنبال میکنند. ترکیب ورودیهای جریان داده در چندین سوئیچ، جریان داده ای را تعریف میکند که محدود به یک مسیر خاص است.
مولفه دستورالعمل یک ورودی جدول، شامل مجموعهای از دستورالعملها میباشد که در صورتی که بسته با ورودی تطبیق داده شود اجرا میگردد. قبل از توضیح در مورد انواع دستورالعملها، باید اصطلاحات Action و Action Set تعریف شود. Actionها ارسال بسته، تغییر بسته و عملیات پردازش گروهی جدول را توصیف میکنند.
2.10.11 مشخصات Openflow کارهای زیر را انجام می دهد:
2.10.11.1 Output : بسته را به صورت خاصی ارسال میکند.
2.10.11.2 Set-Queue : مشخصه صف را برای یک بسته تنظیم میکند. وقتی یک بسته با استفاده از عمل output به یک پورت ارسال میشود، مشخصه صف مشخص میکند کدام صف متصل به این پورت برای برنامهریزی و ارسال بسته استفاده میشود. مدل ارسال توسط پیکربندی صف مشخص میشود و یک پشتیبانی اولیه از QoS فراهم میکند.
2.10.11.3 گروه: بسته را در بین گروه خاصی پردازش میکند.
2.10.11.4 اضافه کردن / حذف کردن برچسب: اضافه کردن یا حذف کردن یک برچسب برای بسته VLAN یا MPLS.
2.10.11.5 تنظیم فیلد (Set-Field): کارهای Set-Field با نوع فیلدشان از هم تشخیص داده میشوند. آنها مقدار header Fieldهای مخصوص به خود را در بسته تغییر میدهند.
2.10.11.6 تغییر TTL) TTL-Change): عملیات مختلف تغییر TTL مقادیر IPV4 Time To Live، IPv6 Hop Limit یا MPLS TTL در یک بسته را تغییر میدهند.
Action Set لیستی از Actionهای مرتبط با بسته میباشد که زمانی که بسته توسط هر جدول پردازش میشود روی هم انباشته میشود و زمانی که بسته ، خط لوله پردازش را ترک میکند اجرا میشود.
2.10.12 دستورالعملها 4 نوع هستند:
2.10.12.1 هدایت بسته در طول خط لوله: دستورالعمل Goto-Table بسته را در طول خط لوله به سمت جدول هدایت میکند. دستورالعمل Meter، بسته را به یک Meter خاصی هدایت میکند.
2.10.12.2 اجرای Action روی بسته : ممکن است Actionها زمانی که با یک ورودی جدول منطبق شوند روی بسته اجرا شوند.
2.10.12.3 به روز رسانی Action set: ادغام کردن Actionهای خاص با Action set فعلی برای همین بسته روی همین جریان داده یا پاک کردن تمام Actionها در Action set
2.10.12.4 به روز رسانی metadata: مقدار metadata میتواند با بسته مرتبط باشد که برای انتقال اطلاعات از یک جدول به جدول بعدی استفاده میشود.
2.10.13 خط لوله جدول جریان داده
شکل 2.17 خط لوله ی جریان داده [8]
یک سوئیچ شامل یک یا چند جدول جریان داده میباشد. همانطور که در شکل 2.15 نشان داده شده است، اگر بیشتر از یک جدول جریان داده وجود داشته باشد، به صورت یک خط لوله، با جداول برچسب گذاری شده که از 0 شروع میشود، سازماندهی میشوند.
وقتی یک بسته به منظور تطبیق وارد یک جدول میشود، ورودی شامل بسته، مشخصه پورت ورودی، مقدار metadata مربوطه و Action Set مربوطه میشود. برای جدول 0، مقدار metadata خالی است و Action Set تهی است. پردازش به صورت زیر جریان مییابد:
ورودی جریان داده منطبق با بالاترین اولویت را پیدا کنید. اگر هیچ انطباقی با هیچ ورودی وجود ندارد و هیچ Table-miss
entry وجود ندارد، بنابراین بسته از بین رفته است. اگر فقط با Table-miss entry انطباق وجود دارد، در این صورت ورودی یکی از این سه Action را مشخص میکند:
a ) ارسال بسته به کنترلر . این action، کنترلر را قادر میسازد که یک جریان داده جدید برای این بسته و بسته های مشابه تعریف کند یا تصمیم به از بین بردن بسته بگیرد.
b ) ارسال بسته به یک جریان داده Table دیگر در pipeline
c ) از بین بردن بسته
اگر انطباق با یک یا چند ورودی به جز Table-miss entry وجود داشته باشد، در این صورت انطباق به عنوان matching entry (ورودی منطبق) با بالاترین الویت شناخته می شود.
a )هر Counterای را که با این ورودی مرتبط است را به روزرسانی کنید
b ) هر دستورالعملی را که با این ورودی مرتبط است را اجرا کنید. این دستورالعملها ممکن است شامل به روز رسانی Action set، به روز رسانی مقدار metadata و اجرای Actionها باشد.
c ) سپس این بسته به یک جدول جریان داده در pipeline، به Group table یا به meter Table منتقل میشود یا ممکن است به سمت پورت خروجی هدایت شود.
برای آخرین جدول در pipeline، انتقال به یک جریان داده Table دیگر، یک راهحل نیست. زمانی که یک بسته نهایتاٌ به سمت پورت خروجی هدایت شد، یک action set اضافی اجرا میشود و سپس بسته برای خروج در صف قرار میگیرد.
2.10.14 ساختار پروتکل Openflow
پروتکل Openflow پیغامهای رد و بدل شده بین یک Openflow کنترلر و یک Openflow Switch را توصیف میکند. این پروتکل روی SSL یا (Transport Layer Security) ، TLSپیادهسازی میشود و یک کانال امن Openflow را ایجاد میکند.
پروتکل Openflow ، کنترلر را قادر میسازد Actionهای اضافه کردن (Add)، به روز رسانی (update) حذف(delete)، را روی ورودیهای جریان داده در جداول جریان داده اجرا کند. این پروتکل، همانطور که در جدول 2.3 نشان داده شده است،از 3 نوع پیام پشتیبانی میکند:
جدول 2.3 پیغام های ورودیهای جریان داده در جداول جریان داده [8]
Description
Message
Controller-to-Switch
Request the capabilities of a switch. Switch responds with a features reply that specifies its capabilities.
Features
Set and query configuration parameters. Switch responds with parameter settings.
Configuration
Add, delete, and modify flow/group entries and set switch port properties.
Modify-State
Collect information from switch, such as current configuration, statistics,]]>
