Posts

MPLS چگونه کار می کند؟ – بخش دوازدهم

با یک مقاله دیگه از سری مقالات MPLS در خدمت شما دوستان عزیز هستیم:

MPLS Maximum Receive :


(Maximum receive unit (MRU پارامتری است که توسط IOS سیسکو مورد استفاده قرار می گیرد و برای LSR مشخص می کند که بسته های label خورده مربوط به یک FEC با چه سایزی می توانند توسط LSR دریافت شوند و بتوانند بدون تکه تکه شدن ارسال شوند.این مقدار برای هر FEC یا شبکه مشخص می شود و فقط براساس اینترفیس نمی باشد و دلیل آن labelهایی است که در LSR به بسته اضافه یا حذف می شوند.
به عنوان مثال یک روتر را که MTU همه اینترفیس های آن برابر 1500 است را در نظر بگیرد. که به این معناست بزرگترین بسته ای که می تواند روی یک اینترفیس ارسال و دریافت شود 1500 بایت می باشد و با فرض اینکه بسته حداکثر می تواند دو label داشته باشد در نتیجه MPLS MTU بسته 1508 می شود که در کلیه اینترفیس ها این مقدار یکسان می باشد. و بسته های label خورده با سایز 1508 بایت می توانند روی همه لینک ها ارسال شوند. اگر عمل pop برای بسته دریافتی در نظر گرفته شده باشد بسته باید 4 بایت یا یک label بزرگتر باشد(1512 بایت) چون بسته قبل از ارسال باید یک label آن حذف شود اگر عمل push برای بسته در نظر گرفته شده باشد و یک label به بسته اضافه خواهد شد بسته دریافتی باید 1504 بایت باشد تا با اضافه شدن label اندازه آن 1508 بایت شود.
همین طور که دیدید عملیات روی label ها در تعیین MRU نقش دارند. چون عملیات روی label ها براساس FEC یا شبکه مشخص می شود MRU نیز براساس FEC یا شبکه مشخص می شود. به تصویر زیر توجه کنید که در آن MRU براساس شبکه و نسبت به عملی که روی بسته می خواهد انجام شود تغییر می کند. مقدار MRU را به ازای هر شبکه در تصویر زیر می بینید.

Image

MRU برای شبکه 10.200.254.2/32 برابر 1512 می باشد. بسته دریافتی می تواند 1512 بایت باشد چون بسته قبل از ارسال pop خواهد شد. MRU برای شبکه 10.200.254.3 برابر 1508 می باشد و اندازه بسته تغییر نخواهد کرد چون عمل swap روی بسته انجام می شود. MRU برای شبکه 10.200.254.4 برابر 1504 می باشد چون بسته دریافتی 1504 بایت خواهد بود و یک label به آن push خواهد شد و اندازه بسته 4 بایت افزایش خواهد یافت.

Fragmentation of MPLS Packets :


اگر LSR یک بسته label خورده دریافت کند که اندازه آن برای ارسال در data link بزرگ باشد بسته باید تکه تکه شود. این تکه کردن مشابه بسته های IP است. اگر یک بسته label خورده دست LSR برسد و LSR متوجه شود که این بسته نسبت به MTU آن بزرگ است باید آنرا تکه تکه کند که در ابتدا label stack را از روی بسته بر می دارد بسته IP را تکه تکه می کند بعد از اینکه روی label stack عمل مورد نیاز(pop , push , swap) را انجام داد. این label stack را به تمام تکه ها اضافه می کند و این تکه ها را ارسال می کند. تنها در صورتی که فیلد (Don’t Fragment (DF در هدر IP استفاده شده باشد LSR آنرا تکه نخواهد کرد و بسته را Drop کرده و یک پیام ICMP error با محتوای اینکه بسته نیاز به تکه تکه شدن دارد و از فیلد (Don’t Fragment (DF استفاده نشود (ICMP type 3, code 4) به مبدا بسته ارسال می کند. همانند پیام (ICMP message “time exceeded” (type 11, code 0 که در زمان انقضای TTL تولید و براساس LSP ارسال میشد این پیام نیز براساس LSP ارسال می شود تا به مبدا خود برسد.
در طور معمول تکه تکه کردن یا fragmentation روی کارایی اثر منفی می گذارد و باید از آن اجتناب کرد. یک روش برای اجتناب از تکه تکه کردن استفاده از Path MTU Discover است که در ادامه آنرا شرح می دهیم.

Path MTU Discovery :


یک روش برای اجتناب از fragmentation استفاده از Path MTU Discovery می باشد. در این روش فیلد (Don’t Fragment (DF در بسته های IP مورد استفاده قرار می گیرد و بسته ها ارسال می شود. زمانی که بسته به یک روتر برسد که آن روتر بسته را بدون fragmentation نتواند ارسال کند روتر بسته را drop می کند و یک پیام (ICMP error message Fragmentation needed and do not fragment bit set (ICMP type 3, code 4 به فرستنده بسته مبنی بر عدم استفاده از فیلد DF ارسال می کند. فرستنده بسته IP اینبار بسته را با سایز کوچکتری ارسال می کند و اگر دوباره این مشکل بوجود آمد مجدد سایز بسته را کم کرده و آنرا ارسال می کند. اینکار تا زمانی که مبدا ، پیام ICMP error دریافت نکند ادامه می یابد. اندازه اخرین بسته که با موفقیت ارسال شده است به عنوان اندازه بسته در نظر گرفته می شود و از آن برای ارسال بسته ها بین این مبدا و مقصد استفاده می شود. از این رو به آن MTU مسیر گفته می شود.
نکته : تضمینی برای اینکه Path MTU Discovery در همه شرایط کار کند وجود ندارد. در بعضی مواقع پیام های ICMP error به مبدا بسته برگشت داده نمی شوند. نرسیدن پیام های ICMP error به مبدا بسته می تواند علل مختلف داشته باشد که می توان به وجود فایروال ، استفاده از Access Control List و یا مشکلات مسیریابی اشاره کرد.

MPLS چگونه کار می کند؟ – بخش هشتم

در ادامه سری مقالات MPLS در خدمت شما دوستان هستیم.

Forwarding Labeled Packets :


در بخش های قبلی به MPLS label پرداختیم و فهمیدیم label چیست و چگونه مورد استفاده قرار می گیرد و حالا در این بخش می خواهیم نحوی ارسال بسته های label خورده را مورد بررسی قرار دهیم. نحوی ارسال بسته های label خورده نسبت به ارسال بسته های IP کاملا متفاوت است و فقط به بررسی label در LIFB به جای جدول مسیریابی بر نمی گردد. در بحث ارسال بسته های label خورده ، عملیات هایی روی label stack مانند pop ، push و swap انجام می گیرد. که در این قسمت به این عملیات ها می پردازیم.

Label Operation :


امکان اجرای سه عمل pop ، swap و push روی بسته های label خورده وجود دارد. که در تصویر زیر این عمل ها نمایش داده شده است.

Image

LSR با نگاه کردن به label بالای label stack بسته دریافتی و مقایسه آن با مقادیر LFIB متوجه می شود که بسته را چگونه باید ارسال کند. در اینجا LSR مشخص می کند که چه عملیاتی (pop , push , swap) روی بسته باید انجام گیرد و next hop بعدی که بسته باید به آن ارسال شود چیست؟ اگر عمل swap تعیین شود به این معنی است که یک label جدید جایگزین label بالای label stack می شود. در عمل push یک label جدید جایگزین label بالای label stack می شود و یک یا چند label دیگر به بالای label stack اضافه می شود. عمل pop باعث حذف label بالای label stack می شود.
نکته : LSR هنگام دریافت یک بسته label خورده 20 بیت اول label بالای label stack را نگاه می کند و مقدار بدست آمده را با local labels موجود در LFIB مقایسه می کند.

IP Lookup در برابر Label Lookup :


زمانی که روتر یک بسته IP دریافت کند برای بسته IP lookup انجام می دهد. در IOS سیسکو به این معنی است که آدرس مقصد IP در جدول CEF جستجو می شود. زمانی که روتر یک بسته label خورده دریافت می کند جستجو در LFIB روتر انجام می گیرد. روتر با نگاه کردن به فیلد پروتکل در هدر لایه دو متوجه می شود که بسته ای که دریافت کرده یک بسته IP یا یک بسته label خورده است. اگر بسته با هر یک از دو روش ( Cisco Express Forwarding (CEF یا LFIB ارسال شده باشد می تواند بعد از دریافت توسط روتر با label یا بدون label از روتر خارج شود. در تصویر زیر تفاوت بین CEF و LFIB نمایش داده شده است.

Image

اگر ingress LSR یک بسته IP دریافت کند آنرا lable زده و ارسال می کند که به آن IP-to-label گفته می شود. اگر egress LSR یک بسته label خورده را دریافت کند label آنرا حذف کرده و به عنوان یک بسته IP آنرا ارسال می کند که به آن label-to-IP گفته می شود. حالت دیگر این است که LSR یک بسته label خورده را دریافت و به صورت label زده آنرا ارسال می کند که به آن label-to-label گفته می شود.
در تصویر زیر حالت IP-to-label نمایش داده شده است که ارسال براساس جدول CEF انجام می شود.

Image

بسته های IP به مقصد 10.200.254.4 که وارد LSR شوند با label 18 از پورت ethernet0 خارج می شوند. Next-hop برای این بسته ها 10.200.200.2 می باشد. در اینجا IP-to-label انجام می شود. در IOS سیسکو فقط از CEF Switching برای label بسته ها می توان استفاده کرد و از سایر روش های IP Switching مانند fast switching نمی توان استفاده کرد چون fast switching حافظه ای برای نگه داری اطلاعات مربوط به label ندارد و CEF switching تنها روش IP switching است که قابلیت پشتیبانی از MPLS را دارد به همین خاطر زمانی که از MPLS استفاده می کنیم باید CEF را در روترهای مورد نظر فعال کنیم.
تصویر زیر محتویات LFIB را با دستور show mpls forwarding-table نمایش داده است.

Image

Local label توسط LSR ایجاد و به سایر LSR ها ارسال می شود. به طور مثال این LSR انتظار دارد که بسته های دریافتی یکی از این label ها را در بالای label stack خود داشته باشند. اگر این LSR یک بسته با label 22 دریافت کند آنرا با label 17 جایگزین کرده (swap) و روی پورت Ethernet 0 ارسال می کند. که در این حالت label-to-label انجام می گیرد.
اگر LSR یک بسته با label 16 دریافت کند تمام label های آنرا حذف می کند (pop) چون untag (بودن label) به عنوان label خروجی برای این label در LFIB در نظر گرفته شده است. که label-to-IP انجام می گیرد. اگر LSR یک بسته با label 18 دریافت کند label بالای label stack را حذف می کند و آنرا ارسال می کند اگر این label تنها label موجود label stack باشد بسته به عنوان یک بسته IP ارسال می شود در غیر اینصورت به عنوان یک بسته label خورده ارسال می شود. در تصویر زیر یک عمل push نمایش داده شده است که یک در اینجا label 20 بسته جایگزین label 23 می شود و label 16 به بسته push می شود.

Image

برای مشاهده تمام تغییرات ایجاد شده در label بسته از دستور show mpls forwarding-table [network] detail می توانید استفاده کنید. در تصویر بالا تفاوت خروجی دستور در صورت استفاده از کلید detail را مشاهده می کنید. در صورت استفاده از کلید detail ، تمام تغییرات در label stack را می توانید مشاهده کنید. از سمت چپ به راست ، می توانید اولین label را ببینید label 20 جایگزین label 23 می شود و سپس label 16 به label stack اضافه می شود. اما بدون کلید detail تنها label 16 را می بینیم که به label stack اضافه می شود.
غیر از سه عملی که قبلا آنها را شرح دادیم یک عمل دیگر تحت عنوان aggregate وجود دارد. زمانی که شما یک تجمیع یا summarization در یک LSR انجام می دهید LSR برای این شبکه های تجمیع شده یک label خاص منتشر می کند اما aggregate در LFIB به عنوان label خروجی نمایش داده می شود چون LSR یک رنج از شبکه ها را تجمیع کرده است و بسته های label خورده دریافتی را نمی تواند با swap کردن label ارسال کند. Label خروجی Aggregate نمایش داده می شود که به این معنی است که LSR باید label بسته دریافتی را حذف کرده و IP lookup برای دقیق تر مشخص کردن شبکه انجام دهد تا بسته ارسال شود. در تصویر زیر محتوای LFIB را در یک روتر egress PE در شبکه MPLS VPN نمایش می دهد.
Egress LSR یک بسته با label 23 دریافت می کند و باید label آنرا حذف کرده و براساس ادرس مقصد IP بسته برای آن IP lookup انجام دهد.

Image

حالا شما متوجه شدید که چگونه یک next-hop خاص را برای یک بسته label خورده تعیین کنید. جدول CEF adjacency نحوی کپسوله کردن در لایه data link را مشخص می کند. این جدول اطلاعات لازم برای ارسال بسته ها در لایه دوم برای LSR بعدی را فراهم می کند.
در تصویر زیر این جدول در یک LSR نمایش داده می شود. این جدول اطلاعات لازم برای ارسال فریم ها را در خود نگه می دارد.

Image

خلاصه ای از عملیات هایی که روی label انجام می شود :

  • Pop : در اینجا label بالای label stack حذف می شود و بسته با label یا بدون آن به عنوان یک بسته IP ارسال می شود.
  • Swap : در اینجا label بالای label stack با یک label جدید جایگزین می شود.
  • Push : در اینجا label بالای label stack با یک label جدید جایگزین می شود و یک یا چند label به بالای label stack اضافه می شود.
  • Untagged/No Label : در اینجا label stack حذف شده و بسته بدون label ارسال می شود.
  • Aggregate : در اینجا label stack حذف شده و برای بسته IP lookup انجام می گیرد.