بررسی مشکلات شبکه با SDN
بررسی مختصر شبکه به ما کمک میکند که مشکلاتی را توضیح دهیم که تکنولوژی SDN سعی بر برطرف کردن آن دارد. همانطور که به یاد می آورید شبکه به مجموعه ای از دستگاه های تخصصی (Specialized Computer) به نام روتر (Router) سوییچ (Switch) و … گفته میشود که این دستگاه ها توانایی ارسال و دریافت بسته (Packet) را به سمت یکدیگر دارا می باشند.
بسته (Packet) شامل بلوک های داده ای (Blocks of Data) است که از طریق لینک های فیزیکی ارسال می شوند.
بسته ها (Packet’s) شامل یکسری 0 و 1 هستند که این 0 و 1 ها حاوی مقدار کمی از داده ها ( در حقیقت داده (data) در سمت ارسال کننده به قسمت های کوچک شکسته می شود و در سمت مخالف یعنی در سمت گیرنده دوباره این قسمت ها به یکدیگر متصل می شوند (Reassembled) ) و دستورالعمل ها برای روتر ها و سوییچ ها در مورد مقصد بسته هستند که این اطلاعات در Header بسته قرار می گیرد . اطلاعات انتقال داده شده بین کامپیوتر ها را payload می نامند.
لایه های چندگانه (Multiple Layers of Data) داده ها هرکدام با مجموعه ایی از دستورالعمل های خاص خود با یکدیگر جمع می شوند (Assembled) تا کامپیوتر مربوطه در سمت مخالف خط ارتباطی با استفاده از این مجموعه دستورالعمل ها بتواند پاسخ مناسب را به بسته ارسالی بدهد . پس اطلاعات باید به شکل قابل استفاده و استاندارد برای همه کامپیوتر ها باشد از این رو یکی از استانداردهایی که در شبکه می توان با آن اشاره کرد مدل استاندارد OSI است. مدل استاندارد OSI توابع ارتباطی اجزای شبکه را مستقل از فروشندگان و تکنولوژیهای خاص تعریف می کند.
بهینه سازی شبکه با SDN
برای اینکه یک شبکه مفید باشد اطلاعات باید با بیشترین سرعت از یک قسمت شبکه به قسمت دیگر شبکه منتقل بشود. این انتقال می تواند بین سرور ها یا کامپیوترها باشد و یا حتی دستگاه های ارتباطی خاص مانند تلفن های مبتنی بر آی پی (IP Phone). هنگامی که یک Session در شبکه شکل می گیرد، اولین بسته به سمت Device مورد نظر در مقصد ارسال می شود، حال این دستگاه باید بداند که با بسته دریافتی چه رفتاری کند، و پروسه ی اینکه این تصمیم گیری چگونه انجام می شود (و نرم افزار در پشت صحنه) در قلب چراییه ایجاد تغییرات برای کاربران است تا قادر به ایجاد Application ها و Programهای خود (سفارشی شده) باشند.
اولین مساله این است که هر دستگاه شبکه واقعا یک جزیره به خودی خود است. بنابراین اگرچه هر دستگاهی بخشی از یک معماری بزرگ اتصالی است ولی این کامپیوترهای تخصصی (Specialized Computers) پورتال هایی (دروازه)هستند که از طریق آن ها تراکنش ها انجام می شود(جریان های ترافیکی عبوری). این یک مدل مصنوعی از چگونگی شکل گرفتن اینترنت است. این مدل طوری طراحی شده است که حتی اگر قسمت هایی از آن در دسترس نباشد قادربه کار کردن است. پس نتیجه این می شود که هر Node (دستگاه) در شبکه مستقل از بقیه است.
آشنایی مختصر با 3 اصطلاح درمعماری تجهیزات شبکه :
Control Plane
Forwarding Plane (Data Plane)
Management Plane
برای چند لحظه به این فکر نکنید که مثلا روتر چه کاری انجام میدهد؟ یا سوییچ چه کاری انجام می دهد ؟ در نتیجه فکرهای زیادی به ذهن شما خطور خواهد کرد. مثلا اتصال فیزیکی این دستگاه ها به یکدیگر با کابل یا با وایرلس برای اینکه یک شبکه ایجاد کنیم.
خب به طور مثال جا به جایی پیام ها در شبکه (منظور از پیام می تواند Ethernet Frame یا Packet باشد ):
سوییچ ها Ethernet Frame را ارسال می کنند و روتر ها Packet ها را ارسال (Forward) می کنند. آنها پروتکل های مختلف زیادی را استفاده می کنند برای اینکه اطلاعات مفیدی را به دست بیاورند.
هر کاری که دستگاه های شبکه انجام می دهند می تواند به سطوح مختلف کاری تقسیم بندی شود
مفهوم Control Plane
در حقیقت مغز متفکر دستگاه می باشد که تمام هوش و ذکاوت دستگاه در Control Plane است. از جمله وظایف Control Plane می توان به موارد زیر اشاره کرد:
[-] Routing Protocol
[-] IPv4 ARP
[-] IPv6 NDP
[-] Switch MAC Learning
[-] STP
….
مفهوم Data Plane
در حقیقت Forwarding Plane یا Data Plane وظیفه این را دارد که بسته ها را از یک رابط شبکه (Network Interface) دریافت کند و تحویل رابط شبکه ایی دیگر بدهد, این سطح از معماری دستگاه نحوه ی اینکه چه بسته ایی ا ز چه رابط شبکه ایی گرفته شود و تحویل چه رابط شبکه ایی داده شود را از سطح کنترلی دستور می گیرد .
شما می توانید اینگونه فکر کنید که Control Plane مغز متفکر دستگاه و Forwarding Plane یا Data Plane بازوی دستگاه است .
مفهوم Management Plane
این سطح مدیریتی دستگاه است که برای انجام امور مدیریتی استفاده می شود. در شکل زیر به طور کامل مفاهیم گفته شده را درک خواهیم کرد.
خب اینگونه معماری دستگاه های شبکه بهترین نوع معماری دستگاه ها است و اینگونه بنظر میرسد که راه حل کاملا منطقی برای ساختن یک سیستم شبکه و معماری آن است.
این معماری برای مدت طولانی به خوبی کار کرده و جواب نیاز های کاربران را داده است، امـــا مشکل این است که در طول زمان پیچیدگی عظیمی در شبکه ایجاد کرده است، به دلیل اینکه هر عملی (تابع)، هر برنامه کاربردی (Application) و هر مجموعه قوانین باید برای هر دستگاه به طور واحد برنامه ریزی شود، زیرا هر دستگاه به مغز کوچک (Control Plane) خود برای اجرای برنامه ها، تصمیم گیری های انتقال و … وابسته است و این مستقل بودن هر دستگاه زمانی که شبکه شما دارای ده ها هزار دستگاه است یک وضعیت کابووس وار را برای شما به ارمغان می آورد.
علاوه بر آنچه گفته شد شما فرض کنید که نیاز های جدید کاربران و مشتریان شما روز به روز افزایش پیدا می کند و این باعث می شود که شما به طور مداوم تغییراتی را روی دستگاه اعمال کنید یا حتی تنظیمات جدیدی را به آن کوه تنظیمات قبلی که الان در حال کار کردن است اضافه کنید، پس در نتیجه پیچیدگی (و همچنین خطاها) به صورت آبشارگونه ایی روی شبکه شما و دستگاه های شما جاری می شود. در حقیقت درخت پیچیدگی های شما در طول زمان با این معماری سنتی به صورت لگاریتمی افزایش خواهد یافت و مدیریت آن به شدت سخت خواهد شد، در شکل زیر پیچیدگی ها را به صورت درخت وار نشان داده ایم و همانطور که مشاهده می کنید با گسترده شدن شبکه پیچیدگی های آن به شدت زیاد می شود.
جدا کردن برنامه های شبکه (Networking Application) از مجموعه شبکه
علاوه بر مشکلات ناشی از توزیع اطلاعات شبکه در سراسر شبکه، مشکل دیگری وجود دارد و آن در نحوه تولید برنامه های کاربردی شبکه و کد کردن آنها در دستگاه های شبکه است.
دوباره خاطرنشان می کنیم که در این مقاله منظور ما از برنامه های کاربردی شبکه (Networking Applications) روتینگ(Routing)، بهینه سازی(Optimization) و غیره می باشد.
مشکل اینجا است که علاوه بر اینکه هر دستگاه شبکه دارای یک سطح کنترلی (Control Plane) مختص خود می باشد، هر دستگاه دارای سیستم عامل پیچیده و منحصر بفرد خود نیز می باشد که باید تنظیم سازی، ایمن سازی، برنامه ریزی و تنظیم مجدد بشود در هر زمانی که یک تغییر قرار است ایجاد بشود.
علاوه بر این مشکل دیگر نشستن این تنظیمات برروی سخت افزار سفارشی شده برای نرم افزارهای سفارشی شده آن تولید کننده خاص هست، مثل توابع مسـیر یابی (Routing Functions)، لیست های دسترسی (Access List)، نرم افزارهای مدیریتی و مثال هایی از این قبیل.
برای مثال شما رابطه چشمگیری بین برنامه های کاربردی (Applications)، سیستم عامل و سخت افزار سرورها در بخش مجازی سازی دیده اید.
اکثر سازندگان دستگاه ادعا می کنند که دارای دسته های کد (بخش های کاربردی کد) هستند که از یکدیگر کاملا متمایز هستند به مانند شکل زیر.
این خیلی خوب است اگر در عمل و واقعیت هم مثل این ادعا دستگاه ها کار کنند اما با توجه به شکل زیر متوجه میشویم که در عمل و واقعیت با چیزی مواجه میشویم که کاملا با ادعا اولیه در تضاد 100% است . در واقع پایگاه کد این بخش های غیرقابل برگشت در هم تنیده و وابسته به یکدیگر هستند به طوری که یک مشکل با یکی از برنامه ها ی کاربردی می تواند بر سیستم عامل تاثیر بگذارد که این می تواند به نوبه خود بر روی دستورالعمل های سخت افزاری تخصصی و بالعکس تاثیر بگذارد. به همین دلیل است که مشکلات برنامه یا تنظیمات آن اغلب می توانند از طریق شبکه پخش شوند و باعث ایجاد مشکلات مربوط به عملکرد و یا حتی بدتر , باعث ایجاد اختلال و راه اندازی مجدد سیستم بشوند.
با توجه به شکل زیر مشکلی که الان با یکدیگر بحث کردیم به راحتی قابل درک می باشد.
این سیستم ها همچنین پیچیدگی را حتی از آنچه که ا ز طریق توزیع کنترل ایجاد می شود بیشتر افزایش میدهند.
به یاد بیاورید که هر یک از این دستگاه ها به صراحت میلیون ها خط کد را دارا می باشند که روی نسخه های مختلف سخت افزار و حافظه قرار می گیرند و همه ی این پیچیدگی ها پیچیده است.
این تنها بخشی از دلایلی هست که نوآوری کندتر از آن چیزی است که اکثر کاربران خواهان آن هستند و سفارشی کردن نیز به مراتب سخت تر (برای چندین کاربر در یک شبکه مشترک )، چرا که هر یک از شرکت های بزرگ شبکه با مشکلات مشابه پیچیدگی مواجه هستند و هر برنامه کاربردی جدیدی که تولید می شود باید با همه سخت افزار ها و نرم افزار های تولید کنندگان مختلف سازگار باشد.
مساله سازگاری با استفاده از سازمان های استاندارد مطرح می شود امـا حتی اگر یک برنامه کاربردی جدید طراحی شده و پس از آن بررسی و سپس تولید شود می تواند سال ها به طول بیانجامد.
لازم به ذکر است که این نتیجه حاصل از طرح های ناسازگار شرکت ها ی بزرگ شبکه نیست. هنگامی که این سیستم ها برای اولین بار ایجاد شد، نوآوری و همکاری های زیادی صورت گرفت که طی دو دهه زمینه ی تجارت و ارتباطات را سریعا تغییر داد. در حقیقت هنوز هم ادامه دارد و واقعا کاملا مورد توجه است، مساله این است که امروز چه چیزی واقعا مورد نیاز شبکه های امروزی هست ؟
شبکه های برنامه ریزی شده به جای شبکه هایی که مجموعه ایی از دستگاه ها به صورت جداگانه برنامه ریزی شده اند.
بخش سخت اینکار استفاده از یک سیستم کنترل متمرکز برای برنامه ریزی شبکه به طور بالقوه نیاز به این است که فروشندگان شبکه کدهای خود را برای عموم باز کنند، نه آن چیزی که آن ها خود مایل به انجام آن هستند.
خوشبختانه بعضی از راه حل ها برای این کار وجود دارد، همانطور که در مقاله بعدی در بخش کنترل کننده ها به آن خواهیم پرداخت. در حقیقت شما شاهد خواهید بود که بسیاری از فروشندگان بزرگ تجهیزات شبکه از ابتکار بوجود آمده در SDN حمایت می کنند گرچه این به معنی تغییر در کسب و کار و از دست دادن کنترل آن ها روی بخش هایی از بازار کار است.
در حقیقت ما با استفاده از تکنولوژی SDN می خواهیم سطح کنترلی دستگاه ها را از سایر سطوح دستگاه ها جدا کنیم و آن ها را یکپارچه، متمرکز و قابل برنامه ریزی کنیم، ضمن اینکه می خواهیم کم کم به سمت شبکه های نرم افزاری هم مهاجرت کنیم به همین دلیل است مه شرکت های بزرگ شبکه اعلام کردند اگر شبکه کاری تا پایان سال 2018 علم برنامه نویسی نداشته باشد شبکه کار محسوب نمی شود.
ما در این مقاله مشکلات شبکه های امروزی، پیچیدگی های آن, مدیریت دشوار آن را با هم به طور خلاصه مرور کردیم.
در مقاله بعدی با یکدیگر شروع به بحث و گفت و گو به صورت عمیق تر و جامع تر درباره SDN پیش نیازهای آن, پروتکل های مربوط به آن و اصطلاحات آن می پردازیم.