دوره آموزشی SDN (قسمت اول) - مقدمه و مفاهیم

با سلام و عرض خسته‌نباشید خدمت تمامی کاربران عزیز وبسایت نتورک‌باز ؛ با دوره آموزشی جدید و عنوان Software Defined Networking یا همان SDN در خدمت شما هستیم. امروزه مباحثی مانند Cloud،SDN و... از مباحث داغ دنیای فناوری‌اطلاعات محسوب میشوند و بسیاری از فعالان این حوزه معتقدند که آینده دنیای شبکه‌های کامپیوتری در دست SDN قرار خواهد داشت / بامن همراه شوید تا در این دوره آموزشی بصورت جامع با این تکنولوژی آشنا شویم و بقول معروف ، SDN را در دست بگیریم.

SDN and Network Programmability

در دوره‌های آموزشی مدارک سیسکو و مدارک دیگر Vendorها ، همیشه با مدل سُنتی و قدیمی Network ها آشنا میشویم و یاد میگیریم که شبکه به چه‌صورت کار میکند و کنترل میشود ، مدلی که دهه‌هاست که از آن استفاده شده‌است...؛ شما با پروتکل‌های گوناگون آشنا میشوید، کامندهای گوناگون را برای Customize کردن عملکرد آن پروتکلها یاد میگیرید و سرویس‌های گوناگون را بصورت دیوایس‌به‌دیوایس و یکی‌یکی در شبکه‌خود پیاده‌سازی میکنید. Network Programmability مدل عملکرد شبکه‌هارا تغییر میدهد و از متدهای جدیدی برای کنترل دیوایس‌ها و عملکرد آنها استفاده میکند؛ Network Programmability به‌خودی‌خود به مبحث کنترل نرم‌افزاری شبکه اشاره دارد که با اینکار شبکه‌ها میتوانند بسیار راحت‌تر با محیطی که همیشه درحال تغییر میباشد خودشان را وفق دهند ، مانند Virtual Machineها که به راحتی در دیتاسنتر جابجا میشوند و پترن ترافیکی را تغییر میدهند. مفهوم مشابه ، Software Defined Networking یا همان SDN هم به همین صورت، بروی مفاهیم کنترل داینامیک و نرم‌افزاریشبکه بجای Static Configuration تاکید دارد. SDN و Network Programmability از مباحث بسیار گسترده و پیچیده شبکه‌های کامپیوتری میباشد که البته در این دوره آموزشی قرار است با مفاهیم و موارد مهم آنها آشنا شویم و ایده‌های پایه‌ی آنهارا بررسی کنیم.

مفاهیم

دیوایس‌های تحت شبکه ، داده‌های شمارا به شکلِ قالبی از پیام‌ها(عموما Frameهای Data-link مانند Ethernet frameها) Forward میکنند؛ شما از قبلا آموخته‌اید که روترها و سوئیچ‌ها به چه صورت Forwarding را انجام میدهند و این پیام‌هارا جابجا میکنند، SDN و Network programmability ایده‌های قبلی‌ای که با آنها آشنا شده‌اید را برمیدارند و قسمت‌های مختلفش را آنالیز میکنند، سپس راهی برای بهتر کردن آنها برای نیازهای امروزی پیدا میکنند و ایده‌هارا بصورتی در کنار هم قرار میدهند که برای نوع جدید شبکه‌ها قابل استفاده باشند؛ در نهایت همچنان پیام شما در شبکه Forward خواهد شد ، اما چرا و چگونهی آن تغییر کرده‌است. در ابتدا میبایستی ببینیم که یکسری مفاهیم در شبکه‌های سنتی به چه‌صورت عمل میکنند و سپس توضیح خواهیم داد که چگونه یک نرم افزار کنترلر مرکزی(centralized controller software) به‌نام Controller معماری‌ای برای کنترل نرم‌افزاری آسانتر در شبکه ایجاد میکند.

  • ـ Planeها:

یک لحظه به این فکر کنید که دیوایس‌های شبکه چه‌کارهایی انجام میدهند؟ یک روتر چه کاری انجام میدهد؟ یک سوئیچ چه کاری انجام میدهد؟ ایده‌های زیاده باید به ذهنتان رسیده باشد؛ برای مثال، همگی آنها برای ایجاد شبکه، بصورت فیزیکی و توسط کابلها ویا Wireless به یکدیگر متصل میشوند؛ همگی آنها پیغامهای شمارا Forward میکنند، سوئیچ Frameهارا و روتر هم Packetهارا؛ آنها از پروتکلهای گوناگون بسیاری برای یادگیری موارد مفید استفاده میکنند(مثل Routing Protocolها برای یادگیری Routeهای لایه‌ی شبکه). تمام کارهایی که دیوایس‌های شبکه انجام میدهند میتوانند در دستبه‌بندی‌های گوناگون Planeها قرار بگیرند.

در ادامه با 3عدد از Planeهایی که عموما برای توضیح عملکرد network programmability استفاده میشوند، آشنا خواهیم‌شد:

  • Data Plane
  • Control Plane
  • Management Plane

یک - Data Plane:

تمامی Taskها و کارهایی که یک دیوایس‌شبکه انجام میدهد تا بتواند پیغام شمارا Forwardکند مربوط به Data Plane میباشد، یا اینکه میتوان گفت که هرچیزی که مربوط به دریافت،پردازش و Forward کردن دیتا(هر نوع دیتایی از قبیل Frameها، پکت‌ها و...) در Device، بخشی از Data-Plane میباشند. برای مثال، باتوجه به شکل زیر، به این فکر کنید که یک روتر چگونه IP Packetهارا Forward میکند؛ اگر برای یک لحظه بروی منطق لایه3ای تمرکز کنید:

  • در قدم اول: Host پکت را به روتر پیشفرض‌اش(R1) ارسال میکند.
  • در قدم دوم: R1 مقداری پردازش بروی پکت دریافتی انجام میدهد و سپس تصمیم مربوط به Forwardingرا میگیرد(Routing) و پکت را Forward میکند.
  • و درقدم سوم و چهارم: روتر های R3وR4 هم به همین صورت بسته را دریافت،پردازش و ارسال میکنند.


کمی گسترده‌تر به این موضوع نگاه کنید و  به "تمامی کارهایی که ممکن است یک سوئیچ ویا یک روتر هنگام دریافت،پردازش و ارسال یک پیغام انجام دهد" فکر کنید؛ درسته که Forwarding Decision بر اساس منطق انجام میشود(جالب است بدانید که گاهی اوقات به Data Planeـ، Forwarding Plane هم میگوند)، اما بیآیید و کمی فراتر از Match کردن Destination addressهای داخل یک جدول فکر کنید و بیشتر وارد جزئیات شوید... ، به عنوان مثال لیست زیر "تعدادی از Actionهای مرسومی که دیوایس‌های‌شبکه در بخش Data Plane انجام میدهند" را نام برده است:

  • ـ De-encapsulating و Re-encapsulating یک بسته در یک Frameـه Data-link
  • حذف ویا اضافه کردن Headerـه مربوط به 802.1Q (ترانک)
  • ـ Match کردن Destination MAC Address با Mac Address Table
  • ـ Match کردم Destination IP Address با IP Routing Table
  • ـ Encrypt(رمزنگاری)ـه داده‌ها و اضافه کردن IP Headerـه جدید(VPN)
  • تغییر IP Addressـه مبدا و IP Address مقصد(NAT)
  • ـ Discardکردن تعدادی از بسته‌‌ها برای فیلترینگ(ACL ویا Port Security)
  • و...

تمامی موارد فوق و موارد مشابه آنها هستند که Data-Plane را ایجاد میکنند؛ پس دانستیم و یادگرفتیم که تمامی Taskهای مربوط به «دریافت،پردازش و ارسال» در یک دیوایس‌شبکه چه بصورت کُلی و چه بصورت جزئی، همگی بخشی از Data-Plane میباشند.

دو - Control Plane:

حالا به این نکته فکر کنید که Data Plane، قبل از هر چیز، چه نوع اطلاعاتی برای عملکرد نیاز دارد تا بتواند بدرستی کار کند؟؛ برای مثال Routerها قبل از هرچیزی، به وجود داشتن Route در جدول Routing Table نیاز دارند تا Data Plane بتواند Forwarding را بدرستی انجام‌دهد. سوئیچ‌های لایه 2 به وجود داشتن MAC Address ها در MAC Address Table نیاز دارند تا بتوانند Ethernet Frameهارا برای Destination مورد نظرشان ارسال کنند؛ سوئیچ ها میبایستی از Spanning tree Protocol استفاده کنند تا بتوانند مشخص کنند که از چه اینترفیس‌هایی میتوان برای Forwarding استفاده کرد(تا Data plane بتواند بدرستی کار کند و در شبکه Loop ایجاد نکند). از یکنظر میتوان گفت که اطلاعات عرضه‌شده به Data-plane ، نحوه عملکردش را کنترل میکنند؛ به عنوان مثال، روتری که در Routing Tableـه خود هیچ داده‌ای نداشته باشد نمیتواند Packet Forwarding انجام دهد؛ Data-Plane وجود دارد اما وقتی که سعی میکند تا عمل Matching را انجام دهد موردی پیدا نمیکند و شکست میخورد، در نتیجه بسته دریافتی را Discard میکند... اما به محض اینکه در داخل روتر، Route تعریف میشود، Data-planeـه روتر میتواند پکتهارا Forwardکند.

حالا چه چیزی محتوای Routing Table را کنترل میکند؟ تعدادی از پردازش‌های مربوط به Control Plane.

هر Actionـی که برای کنترل Data-plane انجام میشود، مربوط به Control Plane میباشد؛ اکثر این Actionها ایجاد کردن جداولی است که معمولا Data plane از آن استفاده میکند، مانند Routing-table، IP-ARP-Table، Switch-MAC-Address-Table و الی آخر... . با حذف و اضافه کردن Entry ها به جداول، Control plane نحوه‌ی عملکرد Data plane را کنترل میکند. مطمئنا در همین لحظه شما بسیاری از پروتکلهای Control Plane را میشناسید... مثل تمامی Routing Protocolها(RIP،OSPF،EIGRP و...).

همانطور که در تصویر زیر نشان داده شده‌است، Networking Protocolها و Device های سُنتی، Data-Plane و Control-Plane را از یکدیگر جدا کرده و توابع عملیاتی‌اشان را بصورت فردی و یکی‌یکی بروی دیوایس‌ها توزیع میکنند؛ یعنی هر دیوایس به خودی خودی دارای Control plane و Data Planeـه جداگانه است و هربار که هر پکتی وارد هر دیوایسی میشود، دوباره و دوباره با این 2 عدد Plane سروکار دارد. در این مثال، OSPF(پروتکل Control-planeـه فعلی)، بروی هرکدام از دیوایس‌ها بصورت جداگانه اجرا شده است:

بدون پروتکل‌ها و فعالیت Control-Plane، دیوایس‌های سُنتی تحت شبکه(منظور همان دیوایس‌های عادی‌ای که امروزه از آنها استفاده میکنیم میباشد) نمیتوانند بدرستی کار کنند؛ روترها بدون داشتن پروتکلی برای یادگیری مسیرها بی‌کاربرد میشوند، سوئیچ‌ها بدون امکان یادگیری MAC بدرد نمیخورند(گرچه همیشه با استفاده از flooding میتوانند بسته را به مقصد برسانند اما Load بسیار زیاد میشود و عملا شبکه بسیار غیربهینه خواهد بود). پس نتیجه میگیریم که Data plane به اطلاعاتی که توسط Control plane فراهم میگردد تکیه دارد و بدون آن اطلاعات نمیتواند بدرستی عمل کند.

سه - Management Plane:

ـ Control-plane بصورت یک واحده بالاتر، Taskهای بسیاری انجام میدهد که بصورت مستقیم بروی رفتار Data-plane تاثیر میگذارند، Management-planeهم به همین صورت است اما با این تفاوت که بصورت مستقیم بروی Data-plane تاثیر نمیگذارد و بجایش، Management-plane حاوی پروتکل‌هایی است که به مهندس شبکه اجازه مدیریت Device را میدهد. SSH و Telnet دوتا از معروفترین پروتکل‌های Management-plane میباشند؛ برای متوجه شدنه تفاوت‌های مهم آن با Control-plane Protocolها، دو روتر را درنظر بگیرید: یکی از آنها بصورتی کانفیگ شده‌است که اجازه برقراری ارتباط Telnet و SSH را فراهم کند و دیگری بصورت برعکس میباشد و اجازه برقراریه ارتباط SSH و Telnet را نمیدهد؛ هردوی آنها همچنان میتوانند یک Routing Protocol را اجرا کنند و بسته‌هارا مسیریابی کنند(چه از SSH و Telnet پشتیبانی کنند و چه نکنند).

در شکل زیر میتوانید تعدادی دیگر از پروتکلهای Management-plane را مشاهده کنید.

Cisco Switch Data Plane Internals:

در همان روزهای اولیه‌ی دیوایس‌هایی با نام LAN Swichها، سوئیچها میبایستی از یک سخت‌افزار خاصی برای Forward کردن Frameها استفاده میکردند، بدلیل تعداد بسیار زیاد Frameها در ثانیه(frames per second یا همان fps). با توجه به تعداد پورتهای روی یک سوئیچ،سرعت هر پورت و حداقل frame sizeـه یک Ethernet frame، حتی سوئیچ‌های رده پایین هم نیاز داشتند که بتوانند میلیون‌ها از Frameهارا در کسری از ثانیه ارسال کنند؛ برای مثال اگر سازنده‌ی یک سوئیچ بخواهد که سرعت موردنیاز Data-planeاش را محاسبه کند، احتمالا با اعداد زیر مواجه میشود:

  • سوئیچ دارای 24 پورت میباشد.
  • هر کدام از پورتها دارای 100Mbps پهنای‌باند میباشد.
  • فرض میکنیم که طول هر Frameـه ما، 125 بایت میباشد(برای راحت‌تر محاسبه کردن در این مثال).
  • از Full duplex بروی همه پورت‌ها استفاده میشود، پس سوئیچ میتواند بروی تمامی 24 پورتش بصورت همزمان، انتظار دریافت دیتا داشته باشد.
  • نتیجه : هر پورت 100000fps دریافت خواهدکرد، پس درکل میشود 2/4میلیون Frame در ثانیه؛ پس data-planeـه سوئیچ میبایستی آمادگیه پردازش 2/4میلیون Frame برثانیه را داشته باشد.

در همین حین که ممکن است 2.4میلیون عدد بزرگی به نظر برسد، بایستی گفت که هیچوقت هدف‌ما، مشخص کردن یک عدده عالی برای داشتن سرعت بالا درdata-plane نبوده است و بجایش از همان سالهای ابتدایی(حدود سالهای 1990میلادی)، LAN Switchها نیاز قدرت پردازشی داشتند که بتواند بصورت نرم افزاری پردازش‌های بیشتری نسبت به CPUهای عمومی انجام دهد؛ به همین دلیل سوئیچ‌های سخت افزاری همیشه دارای یک سخت‌افزار خاص دیگری در داخل خود هستند که بتوانند پردازش data-plane را به‌صورت جداگانه و به‌خوبی انجام دهد.

اولا، میبایستی گفت که منطق Switching در CPU انجام نمیشود و این مورد بر عهده ی Application Specific Integrated Circuit یا همان ASIC میباشد. ASIC یک چیپ میباشد که برای یک هدف خاص ایجاد شده است، مثل پردازش بسته‌ها در یک دیوایس تحت‌شبکه.

دوما، ASIC میبایستی قادر باشد که Table lookupـه مربوط به MAC Address Table را انجام دهد، پس برای lookupـه هرچه‌سریعتر، سوئیچ نیاز به یک Memoryـه خاص دارد که بتواند دقیقا معادله محتوای MAC Address table را در آن نگهداری کند، Ternary Content-Addressable memory یا همانTCAM.

ـ TCAM memory نیازی به ASIC برای سرچ‌کردنه محتوای یک جدول ندارد و بجایش ASIC فقط محتوا به فیلده TCAM(برای جستجو) میدهد، مثلا به TCAM یک MAC Address میدهد و TCAM موردی که با آن Match میشود را بازمیگردند(بدون اینکه نیاز به اجرای یک الگوریتم سرچ داشته باشد).

درنظر داشته باشید که بازهم همه ی سوئیچ‌ها دارای یک CPU و Memoryـه کُلی هم میباشند.همانطور که در شکل زیر نمایش داده شده است... . IOS درون CPU اجرا میشود و از RAM استفاده میکند؛ بیشتر توابع و عملیات Control-plane و management-plane درون IOS اجرا میشوند؛ توابع مربوط به Data-plane(و تابع مربوط به MAC Learningـه Control-plane) در داخل ASIC انجام میشوند.

درنظر داشته باشید که بعضی از روترها هم از یک سخت‌افزار خاص برای پردازش توابع Data-plane استفاده میکنند(به همان دلیلی که سوئیچ‌ها از این سخت‌افزار ها استفاده میکنند)؛ برای اطلاعات بیشتر درمورد Hardware data-plane forwarding در روترهای سیسکو، میتوانید درمورد Quantum Flow Processor مطالعه کنید که تکنولوژی جالب و جذابی میباشد.

پایان قسمت اول.

امیدوارم که تا اینجا، مقاله براتون مفید واقع شده باشد :)