Posts

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

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

Explicit NULL Label :


استفاده از implicit NULL label باعث افزایش بهره وری در ارسال بسته ها می شود. در این حالت بسته توسط LSR یکی مانده به اخر در یک LSP با یک label کمتر ارسال می شود. در کنار این label ، اطلاعات فیلد EXP نیز نگه داری می شود. زمانی که label حذف شود. فیلد EXP نیز به همراه آن حذف می شود. فیلد EXP برای مباحث (quality of service (QoS مورد استفاده قرار می گیرد و با حذف label این ویژگی همراه آن حذف می شود. در بعضی مواقع ما می خواهیم اطلاعات مربوط به QoS را داشته باشیم و همراه این اطلاعات بسته را تحویل egress LSR دهیم. در این حالت نمی توان از implicit NULL label استفاده کرد.
راه حل برای این مشکل استفاده explicit NULL label می باشد. در این روش egress LSR به همسایه های خود explicit NULL label را که دارای مقدار 0 است را اعلام می کند. سپس egress LSR بسته هایی با label 0 دریافت خواهد کرد. LSR با نگاه کردن به مقدار 0 و مقایسه آن با LFIB نمی تواند آنرا ارسال کند چون این مقدار می تواند به چند FEC اختصاص داده شده باشد. درنتیجه اینجا LSR فقط explicit NULL label را حذف می کند. بعد از اینکه explicit NULL label توسط LSR حذف شد یک lookup دیگر انجام می دهد اما مزیت آن وجود اطلاعات QoS در بسته دریافتی برای روتر می باشد. از اطلاعات EXP می توان برای QoS استفاده کرد یا در صورت داشتن چند label اطلاعات EXP را به label جدید که در بالای label stack قرار گرفته اضافه کرد.
نکته : مقدار explicit NULL label برای IPv6 مقدار 2 است.

Router Alert Label :


Router Alert label دارای مقدار 1 است. این label می تواند در هر جایی از label stack ، غیر پایین آن قرار بگیرد. در صورتی که این عدد در بالای lable stack باشد به LSR هشدار می دهد که این بسته نیاز به نگاه دقیق تر دارد. بنابراین این بسته مانند سایر بسته ها ارسال نمی شود و روی آن پردازش هایی انجام می گیرد. زمانی که این بسته بخواهد ارسال شود label 1 آن حذف می شود. سپس label بعدی آن در lable stack با جدول LFIB مقایسه می شود تا نحوی ارسال مشخص گردد سپس عملیات مورد نظر مانند (pop , swap , push) روی آن انجام می گیرد و مجدد label 1 را در بالای label stack قرار می دهد.
در تصویر زیر خروجی دستور debug mpls packet نمایش داده شده است که بسته دارای Router Alert label است :

Image

در تصویر بالا دو فرمت خروجی وجود دارد که label ها در هر دو نمونه از سمت چپ به راست یا همان بالا به پایین مرتب شده اند. نمونه اول که label ها با علامت اسلش از یکدیگر جدا شده اند فرمت قدیمی می باشد و فرمت دوم فرمت جدید می باشد.

OAM Alert Label :


Label با مقدار 14 به عنوان Operation and Maintenance (OAM) Alert label شناخته می شود. OAM برای تشخیص خطا و کنترل عملکرد مورد استفاده قرار می گیرد. بسته های OAM با بسته های نرمال کاربران تفاوت دارد. IOS سیسکو عملیات MPLS OAM را انجام می دهد اما از label 14 استفاده نمی کند.

Unreserved Labels :


غیر از label های 0 الی 15 از تمام label برای ارسال بسته ها می توانید استفاده کنید. با توجه به 20 بیتی بودن فیلد شماره label مقداری که می توان به عنوان label برای ارسال بسته ها استفاده کرد از 16 تا 1,048,575 می باشد. به صورت پیش فرض در IOS سیسکو از 16 تا 100000 به عنوان label استفاده می شود و این مقدار نیاز شما را برای شبکه های IGP تامین خواهد کرد. اما برای شبکه های BGP این مقدار قابل توجهی نیست و می توانید با دستور mpls label range min max این مقدار را تغییر دهید.
در تصویر زیر این تغییرات توسط دستور mpls label range نمایش داده شده است:

Image

 

TTL در بسته های Label خورده :


در هدر IP فیلد 8 بیتی با نام (Time To Live (TTL وجود دارد و با استفاده از آن طول عمر مجاز بسته در شبکه مشخص می شود. زمانی که یک بسته ارسال می شود به طور معمول مقدار این فیلد 255 می باشد و به ازای عبور از هر hop در شبکه این یک واحد از این مقدار کم می شود و اگر مقدار به صفر برسد بسته drop می شود. در این صورت روتری که بسته با TTL 0 را drop کند یک پیام (Internet Control Message Protocol (ICMP با کد 0 و type 11 به مبدا بسته ارسال می کند. با معرفی MPLS ، به هدر بسته ها label اضافه شد. در اینجا مقدار TTL هدر IP در label stack کپی می شود تا مطمئن شویم که بسته برای همیشه در شبکه MPLS قرار نگیرد و طول عمر برای آن وجود داشته باشد.
نکته : در هنگامی که بسته بدون label می شود و یا از شبکه MPLS خارج می شود. مقدار TTL از label stack به هدر IP کپی می شود.

رفتار TTL در بسته های label خورده :


در MPLS ، استفاده از فیلد TTL مشابه فیلد TTL در هدر IP است. زمانی که یک بسته IP وارد شبکه MPLS می شود مانند ingress LSR که به عنوان ورودی به شبکه MPLS محسوب می شود مقدار TTLدر هدر IP بعد از کسر یک واحد به عنوان MPLS TTL برای آن بسته در نظر گرفته می شود. Label در egress LSR حذف می شود و هدر IP مجدد مورد استفاده قرار می گیرد در اینجا نیز مقدار MPLS TTL بسته بعد از کسر یک واحد در فیلد TTL در هدر IP کپی می شود. در IOS سیسکو ، برای حفاظت از routing loop احتمالی مقدار TTL هدر IP را با MPLS TTL مقایسه می کند و اگر مقدار MPLS TTL از TTL هدر IP بزرگتر بود آنرا کپی نمی کند.
در تصویر زیر نحوی تغییرات TTL در شبکه MPLS نمایش داده شده است :

Image

 

رفتار TTL در Label-to-Label :


اگر عمل swap برای یک بسته label خورده در LSR در نظر گرفته شود مقدار TTL یک واحد کم شده و مقدار آن در label جدید قرار می گیرد. اگر یک یا چند label به یک بسته push شود از مقدار TTL یک واحد کم شده و مقدار آن برای label که جایگزین شده و label های جدید در نظر گرفته می شود. اگر یک label را pop کنیم از TTL آن یک واحد کم شده و مقدار آن در label که بالای label stack قرار می گردید کپی می شود مگر اینکه مقدار TTL از TTL این label بزرگتر باشد که در این حالت کپی انجام نمی شود.
در تصویر زیر تغییر TTL را در عملیات های pop ، push و swap نشان داده شده است :

Image

نکته : intermediate LSR یا همان LSR های میانی تنها مقدار TTL را در label بالای label stack تغییر می دهند و نمی توانند TTL هدر IP یا TTL مربوط به label های پایین label stack را تغییر دهند.
نکته : رفتار و عملکرد TTL را که در اینجا توضیح داده شد در IOS سیسکو TTL operation نامیده می شود.

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

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

Load Balancing Labeled Packets :


اگر برای یک شبکه IPv4 چند مسیر با هزینه یکسان وجود داشته باشد در IOS سیسکو این امکان وجود دارد که بسته های label خورده را بین این مسیرها تقسیم کنید یا به عبارتی Load Balancing را انجام دهید. در تصویر زیر خروجی LFIB یک روتر LSR را می بینید. همانطور که در تصویر می بینید برای بسته های ورودی با label 17 , 18 دو پورت خروجی وجود دارد. اگر بسته های label خورده load-balance شوند می توانند label خروجی یکسانی داشته باشند اما با یکدیگر متفاوت هستند. اگر دو لینک بین یک جفت روتر و هر دو لینک به یک platform label space تعلق داشته باشند Label خروجی یکسان خواهد بود. اگر چندین next-hop LSR داشته باشیم معمولا label خروجی برای هر مسیر متفاوت خواهد بود چون هر next-hop LSR به صورت مستقل برای هر شبکه label در نظر می گیرد.

Image

اگر یک شبکه از طریق مجموعه ای از مسیرهای با مکانیزم label زنی و مسیر های بدون مکانیزم label زنی (IP) قابل دسترسی باشد در IOS سیسکو برای load-balancing مسیرهای بدون مکانیزم label زنی را در نظر نمی گیرد. چون ترافیک از طریق مسیر بدون مکانیزم label زنی به مقصد نخواهد رسید.
در شبکه های IPv4-over-MPLS اگر بسته در مقطعی از شبکه بدون label ارسال شود بسته به مقصد می رسد. در زمانی که بسته در لینکی که MPLS روی آن فعال نیست بدون label شود با توجه به اینکه در این شبکه IPv4 فعال است باید بتواند به مقصد برسد. ولی در شبکه های MPLS VPN و AToM در صورتی که در شبکه MPLS ، بسته بدون label ارسال شود به مقصد نخواهد رسید.MPLS Payload در شبکه MPLS VPN یک بسته IPv4 است. اما P Router به صورت معمول روتینگ VPN را ندارند در نتیجه نمی توانند بسته را به مقصد برسانند.MPLS Payload در حالت AToM یک فریم لایه دو است. بنابراین اگر بسته ، label stack خود را در P Router از دست دهد ، P Router اطلاعات لازم برای ارسال این فریم لایه دو را ندارد.
این مواردی که عنوان شد دلایلی هستند که load-balancing در هر دو حالت label و بودن (label (IP استفاده نمی شود. به طور کلی نحوی ارسال و تصمیم گیری در روتر های Edge LSR یا همان PE Router انجام می گیرد درنتیجه در اکثر موارد P Router نمی توانند بسته های بدون label را ارسال کنند.
در تصویر زیر load balancing را توسط دو مسیر نمایش می دهد. سپس روی یکی از لینک های خروجی (Label Distribution Protocol (LDP غیرفعال می گردد و به عنوان next-hop از LFIB حذف می شود. از دستور no mpls ip برای غیرفعال کردن LDP در یک اینترفیس استفاده می شود.

Image

 

Unknown Label :


در حالت نرمال LSR باید بسته های label خورده دریافت کند و label بالای label stack را بشناسد و چون قبلا توسط خود LSR این label ها به همسایه های خود اعلام شده است. به هر حال این امکان وجود دارد که در شبکه MPLS مشکلی بوجود آید و LSR بسته هایی را دریافت کند که label بالای label stack آنرا در LIFB پیدا نکند. از نظر تئوری LSR در این مواقع می تواند دو کار انجام دهد: label بسته را حذف کرده و برای ارسال بسته تلاش کند یا اینکه بسته را drop کند. در سیسکو LSR ها بسته را drop می کنند این یک تصمیم درست است چون label بالای label stack توسط این LSR مشخص نشده است و این LSR نمی داند که پشت label چه نوع بسته ای قرار دارد. این بسته می تواند یک بسته IPv4 ، IPv6 ، فریم لایه دو یا سایر موارد باشد. LSR می تواند با بررسی MPLS Payload تلاش کند که بفهمد بسته از چه نوعی است اما امکان به وجود آمدن مشکلات دیگر که در بخش قبلی آنها را شرح دادیم به وجود آید : LSR اگر label بسته را حذف کند به احتمال زیاد قادر به ارسال بسته براساس مقصد آن نخواهد بود. حتی اگر LSR بسته را ارسال کند تضمینی وجود ندارد که این بسته توسط سایر روترها drop نشود. بهترین کار برای بسته های که دارای label ناشناخته هستند drop کردن آنهاست.

Reserved Labels :


Label شماره 0 الی 15 به عنوان label های رزور شده شناخته می شوند و LSR نمی تواند از این label ها برای عملیات معمول خود استفاده کند. LSR برای هر یک از این label ها یک عملکرد خاص در نظر گرفته است. label 0 به عنوان explicit NULL label می باشد. Label 1 به عنوان router alert label استفاده می شود. Label 3 به عنوان implicit NULL label می باشد. Label 14 به عنوان OAM alert label استفاده می شود. سایر label های بین 0 تا 15 هنوز وظیفه ای برای آنها مشخص نشده است.

Implicit NULL Label :


implicit NULL label با مقدار 3 مورد استفاده قرار می گیرد.یک egress LSR اگر نخواهد به یک FEC یک label اختصاص دهد از implicit NULL label برای آن FEC استفاده می کند در نتیجه از LSR های مجاور خود درخواست می کند که label بسته ها را pop کرده و به سمت او ارسال کنند. در شبکه IPv4-over-MPLS ، در حالتی که LDP وظیفه پخش label ها را برعهده دارد egress LSR که IOS سیسکو را اجرا می کند implicit NULL label را برای شبکه های connected و summarized در نظر می گیرد. اگر egress LSR برای این FEC ها یک label در نظر بگیرد باعث می شود که بسته هایی دریافت کند که دارای یک label می باشند و برای این بسته ها باید دو lookup انجام دهد. اولین lookup مربوط به label می شود که باید آنرا با LFIB مقایسه کند و متوجه شود که باید label حذف شود. دومین lookup مربوط به IP lookup می باشد. اگر دقت کنیم lookup اول لازم نیست انجام شود چون نتیجه حذف label است.
راه حل : egree LSR اخرین LSR یک LSP می باشد در اینجا egress LSR باید به LSR یکی مانده به آخر در LSP (همسایه egress LSR) اعلام کند که بسته ها را بدون label برای او ارسال کند. برای اینکار از implicit NULL label استفاده می کند تا LSR همسایه را متوجه این موضوع کند و این باعث می شود که egress LSR بسته های IP دریافت کرده و تنها نیاز به IP lookup برای ارسال بسته ها داشته باشد. این عمل باعث بهبود عملکرد در egress LSR می شود.
استفاده از implicit NULL label در انتهای یک LSP را (penultimate hop popping (PHP می نامند. عمل pop در LFIB در روتر PHP در نظر گرفته می شود. نمونه آنرا در تصویر زیر می بینید.

Image

نکته : در IOS سیسکو PHP به صورت پیش فرض فعال است و در شبکه IPv4-over-MPLS شبکه های Connected و summarized را با implicit NULL label به سایر همسایه ها اعلام می کند.
استفاده از implicit NULL label بسیار گسترده است و تنها محدود به مثال بالا نمی باشد. اینکار برای یک بسته که دارای چند label است نیز استفاده می شود به این صورت که label بالای label stack حذف شده و بسته به صورت label خورده و با یک label کمتر ارسال می شود در نتیجه egress LSR نیاز به انجام دوبار label lookup ندارد. استفاده از implicit NULL label به این معنی نیست که تمام label ها در label stack باید حذف شوند بلکه فقط یک label حذف می شود. در هر حالتی استفاده از implicit NULL label باعث می شود که egress LSR نیاز نداشته باشد که دوبار lookup انجام دهد. هر چند که مقدار 3 به عنوان label برای implicit NULL label مورد استفاده قرار می گیرد اما هرگز این مقدار به عنوان label در label stack مشاهده نمی شود و به این دلیل است که به آن implicit NULL label گفته می شود.