مهندسی‌شبکه: از کدام روتینگ‌پروتکل استفاده کنیم؟

مدتی پیش یک مصاحبه‌کاری داشتم که شخصِ مصاحبه‌کننده درحال سوال کردن تجربیاتم در پروژه‌های قبلی بود؛ یادمه که ازم پرسید که چرا در فلان پروژه (که در سطح نسبتا وسیعی پیاده‌سازی شده بود) از روتینگ‌پروتکل EIGRP استفاده کردین ومثلا از OSPF استفاده نکردید؟ بارها شده‌بود که مقاله‌های مختلفی در مورد تفاوت‌ها مطالعه کرده بودم و با جزئیات هرکدوم از این روتینگ‌پروتکل‌ها هم آشنایی داشتم و چندباری هم درمورد این موضوع با همکارانم مذاکره و بحث کرده بودم، ولی متاسفانه نتونستم در جوابِ این سوال، توضیحاتم رو به قشنگی وبصورت کامل به اون شخص انتقال بدم...؛ نکته جالب اینجاست که این سوال واقعا از بهترین سوالاتی هستش که میشه در یک مصاحبه پرسید، چراکه فارغ از مباحث فنی، علمِ مهندسی‌شبکه‌ی شخص رو هم به چالش میکشه.

یک معمار، طراح ویا مهندس‌شبکه میبایستی قادر باشه که توی یک محیط خاص، شرایط رو بسنجه و براساس نیازها، محدودیت‌ها و شرایط سازمان روتینگ‌پروتکل موردنظر را انتخاب و پیاده‌سازی کنه و صرفا این بحث، چیزی نیست که فقط براساس علاقه انتخاب و پیاده‌سازی بشه. فاکتورهای زیادی در این انتخاب دخیل هستند، از قبیل: "توپولوژی، Scale، بهینه‌بودن، زیرساخت، تجهیزات و وندور، روتینگ‌پروتکل فعلی، سرویس‌های فعلی، برنامه‌های سازمان برای آینده، دانشِ نیروها و..."؛ گرچه این بحث جزء مواردی هستش که با تجربه و حضور در محیطهایِ کاری مختلف، بهتر یادگرفته میشه و البته، کارشناس‌ها نظرات گوناگونی در مواضع مخلفت‌اش دارند(در نتیجه خوشحال میشم که نظرات خودتون رو هم در قسمت کامنت‌ها ارائه بدید). اما بازهم در ادامه میخوایم یکسری نکات رو شرح بدیم که میتونه و امیدوارم براتون کارآمد باشه.

مقدمه

بحث‌ها و دلایل استفاده از Routing Protocolها بر هیچکس پوشیده نیست!؛ مطمئنا ساختار Static Route و مسیریابی‌ایستا در بسیاری مواردی میتواند بهترین راهکار موجود باشد، مثلا ممکن‌است شبکه شما "بسیار بسیار کوچک" و "سر راست"بوده و در نتیجه، واقعا نیازی به سربار و پردازش اضافه در شبکه نداشته باشید؛ اینجور مواقع Static Routing میتواند بهترین پاسخ برای باشد. با افزایش مقیاس، پیچیده‌تر شدن شبکه، افزایش Nodeها، افزایش خطاها و درنتیجه افزایش نیاز به بهینه‌سازی، خودکارسازی و اتوماتیک کردن فرایندها، نیاز به استفاده از Routing Protocolها بیشتر میشود و درنهایت بجایی میرسیم که به خودمون میگیم وقتشه روتینگ پروتکل مورد نیازمون رو پیاده‌سازی کنیم دیگه!

روتینگ‌پروتکلِ RIP

روتینگ‌پروتکل RIP سالها به دنیا خدمت کرده‌است و بی‌شک، وجودش کمک بسیاری برای شبکه‌ها بوده‌است(و خواهد بود!)؛ اینروزها خیلی کم دیده میشه که در سطح Enterprise از این روتینگ‌پروتکل استفاده شود، چراکه نسبت به رقیب‌های دیگرش یعنی OSPF و EIGRP، حرف زیادی برای گفتن ندارد و به اندازه آنها بهینه، سریع و مقیاس‌پذیر نمیباشد، درنتیجه میتوان گفت دعوای اصلی بیشتر برسر OSPF یا EIGRP میباشد تا دیگر گزینه‌ها... درسته که هنوزم در بسیاری از مکان‌ها دیده میشود که هنوز هم از RIP استفاده میکنند، اما فکر میکنم کمتر کسی هنوز قبول داشته باشد این RP برای محیطهای بزرگ و مهم، قابل‌اطمینان و مفید باشد وصرفا دیده میشود که امروزه فقط برای کارراه‌اندازی از RIP استفاده میشود. گرچه یادگیری مفاهیم و عمقِ این RP برای یادگیری مباحث Routing و Routing Protocolها همیشه مفید بوده و خواهد بود.

بالاخره OSPF یا EIGRP؟

یکجورایی میشه گفت که در Enterpriseها، دعوای اصلی برسر EIGRP ویا OSPF میباشد؛ بزارید همین اول خیالتون رو راحت کنم و بگم که درکل، جوابی که میتونید به سوال اصلیِ‌ما بدهید اینست: بستگی به شرایط دارد! به چی؟ به همون مواردی که در اول پست ذکر کردیم! ده‌ها فاکتور از قبیل: توپولوژی، Scale، بهینه‌بودن، زیرساخت، تجهیزات و وندور، روتینگ‌پروتکل فعلی، سرویس‌های فعلی، برنامه‌های سازمان برای آینده، دانشِ نیروها و... هردوی این روتینگ‌پروتکل‌ها مزایا و معایب مخصوص به خودشون رو دارن و هیچوقت نمیشه گفت که روتینگ‌پروتکل‌ِ X، در تمامی Environmentها وشرایط گوناگون بهترین گزینه‌است؛ درنتیجه باید یاد بگیریم که هرکدام در شرایط گوناگون به چه شکلی عمل میکنند و بازدهی و Performanceاشان به چه صورت است.

شاید بتوان گفت که در Scaleهای کوچک این موارد و این بررسی‌ها زیاد مهم نباشد و اهمیتی نداشته‌باشد، اما در مقیاس‌های بزرگتر مثل استانی، کشوری و...، اهمیت این موضوع که از کدام Routing Protocol استفاده کنیم بسیار مهم و حیاتی میباشد. برای انتخاب بین این دو مورد، هر محقق شناخته‌شده در دنیای Networking، تحلیل و نِگَرش خاص‌خودش را دارد که در انتهای مطلب مطرحشون میکنیم.

قبل از هرچیز بذارید یکسری موارد و ویژگی‌های این روتینگ‌پروتکل‌هارا یادآوری کنیم:

الگوریتم

پروتکل EIGRP بر اساس الگوریتم DUAL(اختصار Diffusive Update Algorithm) و OSPF هم براساس الگوریتم SPF(اختصار Shortest Path First) عمل میکند؛ نکته‌مهم در تفاوت‌های این دو الگوریتم اینست که چگونه بهترین مسیر را محاسبه و معرفی میکنند. SPF براساس پهنای‌باند لینک‌ها و با استفاده از Cost، متریک را محاسبه کرده و بهترین مسیر را انتخاب میکند؛ ازآنطرف، EIGRP بصورت پیشفرض از Delay و پهنای‌باند برای محاسبه متریک استفاده میکند وهمچنین قابلیت تاثیر دادن موارد دیگر هم مانند MTU، Reliability، Load و... در آن وجود دارد.

مصرف CPU

پروتکل OSPF از تمامی موارد مربوط به شبکه، اطلاعات گوناگونی را نگهداری میکند و با پیش‌آمدنِ کوچک‌ترین تغییری در شبکه(Area یکسان)، تمامی روترهای Area میبایستی اطلاعات خودرا Re-sync کرده و الگوریتم را دوباره محاسبه کنند. از آنطرف، EIGRP فقط یکسری اطلاعات مهم را درزمان ایجاد همسایگی انتقال میدهد و ازآن به بعد، فقط برقراری همسایگی را بررسی میکند و تغییرات ایجاد شده را(در زمان اتفاق) به دیگران اطلاع میدهد؛ درنتیجه نیازی نمیباشد که در زمان تغییر تمامی روترها اطلاعات خودرا بروز کنند و دوباره الگورتیم را اجرا و محاسبه کنند؛ در نتیجه OSPF مصرف CPU بیشتری نسبت به EIGRP، به‌همراه دارد.

زمان همگرایی(Convergence Time)

باتوجه به ساختار EIGRP، بسیاری معتقدند که EIGRP زمان همگرایی کمتری نسبت به OSPFدارد، چراکه از راهکار Successor و Feasible Successor برای مسیرِ بکاپِ Loop-free استفاده میکند و در OSPF تشخیص و محاسبه مسیر جدید میتواند بیشتر زمان‌بر باشد. (گرچه بسیاری‌هم معتقدند که باتوجه به اینکه OSPF از BFD پشتیبانی میکند، با این ترکیب میتواند حتی از EIGRP هم بهتر عمل کند.)

سادگی

پروتکلEIGRP نسبت به OSPF، مفاهیم و Conceptهای کمتر و ساده‌تری دارد و درنتیجه این باعث میشود که در Scaleهای بزرگ و پیچیده، مدیریت OSPF سخت‌تر از EIGRP باشد.

طراحی و معماری

پروتکل OSPF دارای ساختارهای خاصی در طراحی میباشد(مواردی که میبایستی در طراحی و ایجاد Areaها و... درنظر داشته باشید.) اما EIGRP سخت‌گیری‌ها و محدودیتِ‌خاصی در زمانِ‌طراحی برای‌شما ایجاد نمیکند. شاید هم بتوان گفت که نکته مثبت درمورد OSPF همین است که اگر ازهمان ابتدا، بَنابَر این سیستم بخواهید شبکه خودرا طراحی کنید، مجبور میشوید که طراحی را به شکل صحیح و استانداردِ تعریف شده پیش ببرید و ساختارهای Areaبندی‌شده را ایجاد کنید، اما خب EIGRP به این صورت نیست و شما یک شبکه Flat و کُلی دارید.

پروتکل OSPF توسط الگوریتم قدرتمند Dijkstra SPF عمل میکند که خب مسلما دارای مصرف منابع بیشتری نسبت به EIGRP(که از DUALاستفاده میکند)میباشد؛ به‌هرحال میتوان گفت که OSPF کنترل بیشتری در شبکه به‌ما میدهد، با دانستن وضعیت تمام لینک‌ها و وضعیت‌های موجود در یک Area، انتخاب مسیر میتواند بهتر و دقیق‌تر صورت‌بگیرد؛ بالاخره از روش Routing by Rumor(مسیریابی براساس شایعه) که EIGRP از آن استفاده میکند(مثل تمامی پروتکل‌های Distance Vector دیگر)که بهتر است! نه؟

درکل، اینروزها دیگه با Open Standard شدن EIGRP، بحث‌های قدیمی که همیشه گفته میشد "چون شبکه Multi-vendorاست، باید از OSPF استفاده کنیم" تمام شده است و ازآنطرف، قدرتِ‌پردازش روترهای‌مدرنِ امروزی دیگر دربرابر الگوریتم‌ها و محاسبات OSPF کَم نمی‌آورند و تنها نکته‌ی مهم اینست انتخاب روتینگ‌پروتکل بستگی به شرایط دارد.

یک - Integration

درسته که روتینگ‌پروتکل EIGRP حالا به‌عنوان یک پروتکل استاندارد شناخته‌شده است و RFCهای آن دردسترس قرار گرفته‌اند؛ اما آیا واقعا درحال حاضر، بروی تمامی تجهیزات داخل سازمان شما، این RP تعبیه‌شده است و وجود دارد؟ پاسخ‌شما به احتمال بسیار زیاد خیر میباشد؛ مشکل سیسکو اینست که در بسیاری از مواقع سعی‌کرده است که مشتریان خودرا مجبور به Vendor lock-in کند و بسیاری از این کار خوششان نمی‌آید و دوست دارند که دست خودرا برای انتخاب تجهیزات دیگر، باز بگذارند.

دو - Path Selection

تصمیم‌گیری برای انتخاب بهترین مسیر در OSPF بسیار باحال و حساب‌شده میباشد؛ RP با داشتن یک دیدِ کامل از تمامی اطلاعات موردنیاز و وضعیت‌ها در شبکه(معمولا یک Area)، بهترین مسیر موردنظر را انتخاب میکند و تمامی Forwarding decisionها براساس اینکه "کل شبکه به‌چه شکلی دارد عمل میکند" گرفته میشود، نه فقط بر اساس یک بخش کوتاهی که روتر نسبت به آن اطلاع دارد(?).

گرچه قرار نیست که بگیم این راهکار مورد استفاده در Distance Vectorها و روش Routing by Rumor کاملا بد و بی‌مصرف است و Link-stateها عالین!؛ هرچی نباشه کل اینترنت ما برپایه BGPای که رفتارش مشابه Distance Vectorها است عمل میکند و حتی تصورش‌هم سخت است که رفتار مربوط به Link-stateها در اینترنت و این پروتکل، انجام پیاده‌سازی و انجام گردند(از BGP به عنوان یک پروتکل Path-Vector یاد میشود). زمان‌هایی هم هستند که به‌این اندازه دیدِکامل و اطلاعات زیاد، کاربرد ندارند و فقط باعث بار و پردازش زیاد میشوند، در اینجور مواقع مسلما EIGRP و BGP، بهترین موارد برای استفاده میباشند.

سه - Route Summarization

درمورد این موضوع زیاد نمیشه نظری خاصی رو اعلام کرد، نکته بسیارخوب در EIGRP اینست که درهرجایی، هر اینترفیسی و هرقسمتی، میتوانید Summarization انجام دهید و هیچ محدودیتی وجود ندارد؛ بسیاری بر این باورند که OSPF با اینکه محدودیت‌های در Summarization نسبت به EIGRPدارد، اما در Scaleهای بزرگ دقیقا همانجایی که نیاز میباشد این امکان را فراهم کرده‌است وشاید این قابلیت "Summarization در همه جا!" زیاد کاربردی نباشد.

بسیاری معتقدند که درشبکه‌های بزرگ و خیلی پیچیده، OSPF گزینه‌بهتری میباشد، چراکه قدرت کنترل بیشتری به‌ما میدهد و عملکرد مفیدتری میتواند داشته باشد.(درمورد این موضوع، این مقاله‌ی نسبتا قدیمی از Jeff Doyle خیلی جالب و مفید هستش، پیشنهاد میکنم حتما مطالعه کنید.)

در انتها، باتوجه به نتیجه‌های مختلفی که دیدم، همیشه و همیشه نکته بسیار مهم همان موضوعِ "بستگی دارد" میباشد و هیچوقت نمیتوان گفت که همیشه از فلان گزینه استفاده کنید، هرکدام از این روتینگ‌پروتکل‌ها، ده‌ها Concept و مفاهیم گوناگون برای شرایط گوناگون دارند، فقط میبایستی آن شرایط را تشخیص دهید و باتوجه به آنها، گزینه بهتر را انتخاب کنید.

خوشحال میشم نظر و تحلیل شمارو هم درمورد این موضوع بدونم؛ حتما اگر چیزی در ذهنتون بود در قسمت کامنت‌ها ذکر کنید.موفق باشید.