سفر به اعماق پروتکل های مسیریابی: EIGRP بخش اول

سلام به همراهان عزیز. بعد از شناختی که از سرزمین های هدفمون به دست آواردیم قصد داریم سفرمون رو شروع کنیم و پا به این سرزمین ها بذاریم. همونطور که در آخر قسمت قبل هم بیان کردم میخوایم به سراغ عضوی از سرزمین Distance Vector بریم که در حقیقت عضو این سرزمین بوده و هست ولی خیلیا اون رو دو رگه خطاب می کنن. شاید حدس زده باشید، بله منظورم پروتکل Cisco EIGRP هست 🙂 اما قبل از این که به سراغ این پروتکل بریم باید این رو عنوان کنم که از اینجا به بعد منبع ما برای بررسی پروتکل ها RFC هست. نه با زبان سخت و ثقیل RFC ها بلکه با زبان خودمون. اون چه که از این بعد قراره با هم بررسی کنیم پروتکلی که روی دستگاه یک وندور پیاده سازی شده نیست، بلکه هدف ما بررسی ذات حقیقی پروتکل های مسیریابی و آشنایی با نحوه ی عملکرد اصلی اون هاست. شاید خیلیا این کار و بیهوده و فقط مفید برای توسعه دهندگان پروتکل ها خطاب کنن اما خیلی وقتا مشکلات در پیاده سازی یک پروتکل مسیریابی از عدم درک درست عملکرد اون پروتکل نشات میگیره. بنابراین باز هم این رو تکرار میکنم که همیشه مشکلات سخت و پیچیده از جایی نشات می گیرن که ما ساده ترین مفاهیم رو فراموش کردیم 🙂 اما بیان بالاخره دل و به دریا بزنیم و وارد سرزمین Distance Vector بشیم.

معرفی پروتکل EIGRP:
ممکنه از خودتون بپرسید که چرا من شایسته ترین عضو سرزمین Distance Vector یعنی RIP رو برای شروع سفرم انتخاب نکردم. در جوابش باید بگم که هدفم بیشتر بررسی پروتکل هایی هست که در آینده ی نه چندان دور شاید تنها پروتکل های مسیریابی از نسلی باشن که من و شما می شناسیم (حتی ممکنه در آینده همین EIGRP هم دیگه جوابگو نباشه) اما اگر دوست داشتید که راجع به RIP هم صحبت کنیم و اون رو هم بیشتر بشناسیم خوشحال میشم حتما نظرتون رو در قسمت نظرات عنوان کنید 🙂

اما شاید باز از خودتون بپرسید که در اول این متن من بیان کردم که هدف ما بررسی پروتکل هایی فارغ از وندور هست ولی EIGRP که یک پروتکل برای شرکت سیسکو محسوب میشه و بنابراین نباید اینجا مطرح بشه. افرادی که کمی پیگیر جریان پروتکل ها هستن خوب می دونن که نهایتا در ماه مه سال ۲۰۱۶، RFC 7868 تحت عنوان ” Cisco’s Enhanced Interior Gateway Routing Protocol (EIGRP)” منتشر شد. به عقیده ی خیلیا این RFC معرفی کننده ی EIGRP اصیلی که روی دستگاه های شرکت سیسکو پیاده سازی شده نیست. اما قصد ما اینه که با رفتار این پروتکل متناسب با RFC آشنا بشیم اما اون بخشی از عملکرد این پروتکل که در RFC لحاظ نشده هم سعی می کنیم نهایتا با هم بررسی کنیم.

***

برای معرفی EIGRP باید به زمانی برگشت که توسعه دهندگان پروتکل IGRP که یک پروتکل اختصاصی شرکت سیسکو بود تصمیم بر توسعه ی این پروتکل گرفته و در صدد تبدیل آن به یک پروتکل Classless برآمدند. اما همزمان با تلاش برای بهبود قابلیت های عملکردی پروتکل IGRP، بر آن شدند تا از الگوریتم های آکادمیکی که در رابطه با بهبود زمان همگرایی بودند نیز در راستای این توسعه کمک گیرند. در نتیجه آن ها نه تنها به هدف خود یعنی ارتقای IGRP دست پیدا کردند بلکه سبب ایجاد پروتکل مسیریابی جدیدی شدند که با وجود برخی شباهت ها در رفتار به IGRP، یک پروتکل کاملا مجزا محسوب می شود.

اگر از قسمت اول این سری به خاطر داشته باشید، بیان شد که Distance Vector ها از الگوریتم مشهور Bellman-Ford برای پیدا کردن کوتاهترین مسیر استفاده می کنند، اما برخلاف آنها، EIGRP از یک سیستم محاسباتی جدید با نام Defusing Computation بهره می گیرد.
از سوی دیگر همانطور که در قسمت اول هم بیان گردید Distance Vector ها آپدیت های خود را به صورت دوره ای بعد از گذشت یک مدت زمان مشخص ارسال می کنند و نوع گزارش مسیرها نیز به صورت برداری از direction/distance می باشد. EIGRP هم از فرمول Direction/Distance برای گزارش مسیرها استفاده میکند اما آپدیت هایش دیگر به صورت دوره ای نیست بلکه دارای سه ویژگی است:

۱- غیر دوره ای (یا همان non-periodic)
۲- جزیی ( یا همان Partial)
۳- محدود (یا همان Bounded)

ادامه خواندن “سفر به اعماق پروتکل های مسیریابی: EIGRP بخش اول”

سفر به اعماق پروتکل های مسیریابی: Distance Vector ها (۲)

سلام به همه ی مهندسین گرامی. در این قسمت سعی داریم تا با هم بررسی کنیم که پروتکل های مسیریابی Distance Vector  برای حل مشکلاتی که در پایان قسمت قبل مطرح کردیم، چه راهکارهایی رو به کار می برند.

***

  • اگر از قسمت قبل به یاد داشته باشید، بیان شد که Distance Vector ها بر طبق قانون خود باید کل Routing Table را بعد از گذشت یک بازه ی زمانی مشخص ارسال می کردند. اما تصور کنید روتر X همسایه ای با نام Y دارد و از آن مسیرها به مقاصد A و B را فرا گرفته و در Routing Table خود ثبت نموده است. بازه ی زمانی مشخص می گذرد و X باید تمام مسیرهای موجود در Routing Table خود را با یک پیام آپدیت برای همسایه ی خود یعنی Y ارسال نماید، در این صورت روتر X باید مسیرها به مقاصد A و B ای را که از Y فرا گرفته، دوباره به آن تبلیغ کند.

اینجا دو مساله مطرح می شود: اول این که روتر X با این کار بیهوده به نوعی سبب هدر رفت منابع می شود (پهنای باند برای ارسال جداول روتی با حجم بالا که اکثر مسیرها از طریق همان همسایه فراگرفته شده باشد)

دوم این که فرض کنید مقصد A، از دسترس خارج شود. روتر Y از این موضوع باخبر می شود و قصد دارد تا با یک پیام آپدیت این موضوع رو به همسایه اش اطلاع دهد، اما قبل از این که بتواند این کار را انجام دهد ناگهان آپدیتی از روتر X دریافت می کند مبنی بر این که روتر X به مقصد A که یک گام با آن فاصله دارد، دسترسی دارد. اگر به خاطر داشته باشید بیان شد که Distance Vector ها حکم تابلویی سر دو راهی را دارند که فقط فاصله و جهت تا یک مقصد را اطلاع می دهند، اما این که آیا این اطلاعات واقعا درست است یا نه، هیچ تضمینی نیست. بنابراین روتر Y، حرف X را قبول کرده و دوباره مسیر به مقصد A را با افزایش یک گام به hop-count آن، به جدول روت خود اضافه می کند. به این ترتیب اگر پکتی به مقصد A به دست X برسد، آن را برای Y ارسال می کند و Y دوباره آن را برای X ارسال می کند و این عمل همینطور ادامه پیدا کرده و  Loop در مسیریابی رخ میدهد.

در اینجا قانونی مطرح می شود که : اگر آپدیتی از طریق یک اینترفیس ارسال شود، نباید شامل مسیرهایی باشد که از طریق دریافت پیام آپدیتی از روی همان اینترفیس، فرا گرفته شده باشند. به این قانون یک خطی Simple Split Horizon گفته می شود. پس Simple Split Horizon با سرکوب مسیرها از بروز loop جلوگیری میکند.

ادامه خواندن “سفر به اعماق پروتکل های مسیریابی: Distance Vector ها (۲)”

سفر به اعماق پروتکل های مسیریابی: Distance Vector ها (۱)

سلام به تمام مهندسین شبکه ی فارسی زبان در سراسر دنیا، من این افتخار رو پیدا کردم که در وبلاگی بنویسم که همیشه با شوق مطالبش رو میخوندم و همیشه صحبت کردن با صاحب این وبلاگ جز بزرگترین آرزوهام بوده.
به پاس اعتماد آقای مهندس مقدس نسبت به من و این که این فرصت رو در اختیار من گذاشتند که در وبلاگشون بنویسم، از ایشون صمیمانه سپاسگزارم و امیدوارم بتونم در جهت کمک به امر آموزش به زبان فارسی و شرح مسایلی که شاید خیلی کم مطلبی به زبان فارسی راجع به اون ها پیدا بشه بتونم قدم مثبتی بردارم.

تقریبا کل دیروز و داشتم در رابطه با این فکر می کردم که نقطه ی شروع مباحثم چی می تونه باشه، نهایتا یاد چند ماه پیش افتادم که تصمیم گرفتم پروتکل های مسیریابی رو خیلی جزیی بررسی کنم. تو شروع این راه فهمیدم اگر میخوام رفتار یک پروتکل مسیریابی رو خوب درک کنم باید هرچی که تا اون لحظه یاد گرفتم رو بذارم کنار و دوباره شروع کنم به یادگیری. من باید تمام پیش فرض ها رو فراموش میکردم و از صفر شروع میکردم. فهمیدم تو این راه مدام ذهنم باید بپرسه چرا؟ چطور؟ و این که پشت هر مساله ی سختی یک مفهوم خیلی ساده بوده که فراموش شده، پس باید از اول با همون مفاهیم ساده که خیلی بهشون اهمیت نمی دادم کارم رو شروع کنم.

تصمیم بر این هست که اون چه دارم تو این مسیر از اول فرا میگیرم با شما به اشتراک بذارم. اما قبل از رفتن سراغ یک پروتکل مسیریابی مشخص و بررسی نحوه ی عملکرد حقیقی یک پروتکل، شروع داستان سفرم رو قصد دارم با همون مفاهیم ساده ولی خیلی مهم که به فراموشی سپرده میشن شروع کنم یعنی: بررسی عملکرد دو دسته ی کلی Distance Vector ها و Link State ها! همیشه داشتن اطلاعات در رابطه با منشا یک موضوع، دید بازتری به آدم در تحلیل اون موضوع خواهد داد (البته به نظر من 🙂 )
برای همین قسمت اول “سفر به اعماق پروتکل های مسیریابی” رو به بررسی رفتار کلی Distance Vector ها اختصاص دادم.

ادامه خواندن “سفر به اعماق پروتکل های مسیریابی: Distance Vector ها (۱)”