می دانیم که روتر در شبکه های IP همواره ترافیک را روی بهترین مسیر ارسال می کند و بهترین مسیر، مسیری است که پایین ترین متریک و یا کمترین Distance را بین پروتکل های مسیریابی داشته باشد. چنانچه برای مقصد خاصی بیش از یک مسیر با کمترین متریک وجود داشته باشد، روتر به صورت پیش فرض ترافیک را بین حداکثر 4 مسیر تقسیم می کند.

تعداد مسیرهای مساوی تا 16 مسیر نیز قابل افزایش است.

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

تقسیم بار بر اساس آدرس مقصد این ویژگی مثبت را دارد که هیچگاه ترافیک های مربوط به یک Session از مسیرهای مختلف ارسال نمی گردند و بنابراین هیچگاه نامرتب به مقصد نخواهند رسید. به همان ترتیبی که در مبدا ارسال می شوند، در مقصد دریافت خواهند شد. این بدین دلیل است که همه بسته های یک Session از یک مسیر ارسال می شوند.

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

برخلاف روش Fast Switching که در آن فقط می توان بر اساس آدرس مقصد تقسیم بار ترافیکی را انجام دارد، در روش مبتنی بر CEF، عمدتا سه روش برای Load Balancing وجود دارد که در زیر به آنها اشاره می کنیم

Per-destination Load Sharing (Per-session)

بهتر است این روش Load Sharing را Per-session به جای Per-destination نام گذاری کنیم. چرا که تقسیم بار بر اساس فیلدهای آدرس مبدا و مقصد (نه تنها بر اساس آدرس مقصد) صورت می گیرد. به صورت پیش فرض همین الگوریتم فعال است. با این روش تمام بسته های ترافیکی که به یک Session تعلق دارند از یک مسیر ارسال می شوند. بنابراین داده ها به همان ترتیبی که در مبدا ارسال می شوند در مقصد دریافت خواهند شد.

با توجه به تعداد مسیرهای مساوی، چند بیت سمت راست آدرس IP مبدا و مقصد درهم می شوند و با توجه به خروجی Hash، یکی از مسیرها برای ارسال آن ترافیک استفاده خواهد شد.

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

Per-packet Load Sharing

الگوریتم بعدی که در روش CEF قابل پیاده سازی است، الگوریتم Per-packet نامیده می شود که در آن بسته های خروجی به نوبت روی مسیرها تقسیم می شوند. مهمترین مزیتی که این روش دارد، تقسیم ترافیک به نسبت مساوی بین مسیرها انجام می شود. استفاده از این روش زمانی پیشنهاد می گردد که بین دو روتر چندین لینک مشابه وجود داشته باشد، زیرا در این صورت پهنای باند بین آن دو روتر دقیقا به نسبت تعداد لینک ها افزایش می یابد.

اما این روش در مجموع روش مناسبی نیست زیرا باعث می شود بسته های مربوط به یک Session به صورت نامرتب در مقصد دریافت شوند که این خود باعث کاهش کارایی ترافیک های TCP و همچنین گم شدن ترافیک های UDP می شود.

همانطور که قبلا گفته شد، روش پیش فرض CEF در تقسیم بار، Per-session است. اگر بخواهیم روش را به per-packet تغییر دهیم باید روی اینترفیس همه مسیرهای خروجی دستور ip load-sharing per-packet را وارد نماییم

R1(config)#interface fastEthernet 0/0

R1(config-if)#ip load-sharing ?

  per-destination  Deterministic distribution

  per-packet       Random distribution

تعیین الگوریتم Load Sharing

Per-port (L4-based) Load Sharing

روش بعدی Load Sharing که در روترهای مبتنی بر CEF وجود دارد، Per-port نامیده می شوند. این روش زمانی مناسب است که تنوع ترافیک ها از نظر آدرس مبدا و مقصد پایین است. مثلا وقتی که همه ترافیک ها به یک آدرس مشخص NAT شده و با همین آدرس از روتر خارج می شوند. در چنین شرایط تقسیم بار به درستی بین مسیرها صورت نمی گیرد و باید علاوه بر آدرس مبدا و مقصد، پورت مبدا و مقصد مربوط در هدر لایه 4 را نیز وارد پروسه تصمیم گیری تقسیم بار نماییم تا به شیوه بهینه تری ترافیک روی مسیرها تقسیم گردد. برای فعال سازی روش فوق الگوریتم Load Sharing را per-destination انتخاب کنید و دستور زیر را در محیط Global روی روترهای سیسکو وارد نمایید

R1(config)# ip cef load-sharing algorithm include-ports  ?

  destination  Use destination port in hash function

  source       Use source port in hash function

بکارگیری شماره پورت در لایه 4 در الگوریتم Load Sharing

مقایسه بین روش های Load Sharing به صورت خلاصه در جدول زیر آمده است.

ممکن است باعث نامرتب شدن بسته های ارسالی گردد استفاده بهینه از پهنای باند الگوریتم های Load Sharing
خیر متوسط  پیش فرض Per-destination
بله عالی Per-packet
خیر خوب Per-port

مقایسه انواع روش های Load Sharing روی روترهای مبتنی بر CEF

CEF Polarization

مکانیزم Load Sharing در CEF با واقعه ای به نام CEF Polarization مواجه است که می تواند باعث ناکارامد شدن تقسیم ترافیک روی مسیرهای مساوی شود. برای درک بهتر این واقعه به مثال و شکل زیر توجه کنید که در آن 64 جریان ترافیکی به مقصد 10.0.0.0/24 وارد روتر R1 می شوند که روتر R1 آنها را به نسبت مساوی بین دو مسیر موجود تقسیم می کند. فراموش نشود که انتخاب مسیر بر اساس خروجی hash آدرس مبدا و آدرس مقصد جریان ترافیکی شکل می گیرد. در گام بعدی 32 جریان ترافیکی وارد روتر R2 می شوند که همه آنها hash یکسان و مشابهی دارند و در روتر R2 مسیر خروجی همه آنها یکسان خواهد بود. این در حالی است که روتر R2 مسیر دیگری نیز برای ارسال ترافیک به سمت مقصد دارد. خروجی مشابه hash همه این 32 جریان ترافیکی باعث می شود که همه ترافیک ها روی یک مسیر قرار بگیرند. برای رفع مشکل در مکانیزم CEF، هر روتر، ID منحصربفردی به نام Universal ID دارد که این ID به همراه آدرس مبدا و مقصد در محاسبه Hash بکار گرفته می شود و لذا ترافیک های یکسان در روترهای مختلف Hash های مختلفی ایجاد می کنند. بدین ترتیب علی رغم اینکه هر 32 جریان ترافیکی در روتر R1 مقدار Hash یکسانی تولید کرده اند اما در روتر R2 مقادیر Hash متفاوتی ایجاد می کنند که در نتیجه از واقعه CEF Polarization جلوگیری می کند.

CEF Polarization

CEF Polarization

نوشتن دیدگاه


تصویر امنیتی
تصویر امنیتی جدید