Posts

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

در ادامه سری مقالات MPLS درخدمت شما عزیزان هستیم با ما همراه باشید.

Label Withdrawing :


زمانی یک جفت LDP برای یکدیگر label binding را ارسال می کنند این label binding را تا زمانی نگه داری می کنند که ارتباط LDP وجود داشته باشد یا درخواست پس گرفتن برای آن دریافت نکنند. اگر local label تغییر کند احتمال پس گرفتن آن وجود دارد. احتمال تغییر local label وجود دارد به طور مثال ، یک اینترفیس با یک شبکه مشخص down شود اما یک LSR دیگر هنوز در حال اعلام آن شبکه است. بنابراین local label برای آن شبکه باید از implicit NULL به یک non-reserved label تغییر کند. اگر این اتفاق بیافتد implicit NULL label بلافاصله با ارسال پیام Label Withdraw به جفت LDP پس گرفته می شود و label جدید توسط label mapping اعلام می شود. در مثال زیر اینترفیس Ethernet با آدرس شبکه 10.200.210.0/24در LSR لندن down می شود . به همین دلیل روتر لندن این شبکه را با label implicit NULL پس می گیرد. LSR نیویورک همچنان این شبکه را اعلام می کند با فرض وجود یک سوئیچ لایه دو بین لندن و نیویورک ، این نتیجه حاصل می شود که نیویورک سمت دیگر لینک Ethernet است و همچنان up است. LSR لندن یک label جدید به این شبکه اختصاص می دهد (در اینجا label 27 در نظر گرفته شده است) و این label را با استفاده از پیام label mapping به LSR مادرید اعلام می کند.

Image

در IOS های قدیمی تر سیسکو (نسخه های قبل از 12.0(21)ST) به صورت پیش فرض قبل از ارسال label جدید برای FEC پیام Label Withdraw برای پس گرفتن label ارسال نمی شود. Label جدید که اعلام می شود یک implicit label withdraw می باشد. اگر بخواهید رفتار قدیمی را حفظ کنید باید از دستور mpls ldp neighbor neighbor implicit-withdraw استفاده شود. در تصویر زیر نشان می دهد که چه اتفاقی در زمان ارسال label جدید برای شبکه 10.200.210.0/24 با تنظیمات implicitwithdraw در جفت LDP لندن می افتد. پیام label withdraw از خروجی debug حذف می شود. مزیت استفاده از این دستور این است که از ارسال پیام Label Withdraw اجتناب می کند که باعث می شود سربار کمتری ایجاد شود.

Image

 

Housekeeping by Means of Notification :


پیام های Notification برای نگه داری از ارتباط های LDP مورد نیاز است. پیام های notification رویدادهای قابل توجهی برای جفت LDP می باشند. این رویدادها می توانند خطاهای رخ داده یا اطلاعات ساده مشاوره ای باشد. اگر یک خطا رخ دهد بلافاصله LSR ارسال کننده و دریافت کننده این رویداد ارتباط LDP را قطع می کنند. Notifications مشاوره ای برای ارسال اطلاعات در مورد ارتباط LDP یا دریافت پیام از جفت استفاده می شود. رویدادهای زیر را با استفاده از پیام های notification می توان اعلام کرد :

  • Malformed protocol data unit (PDU) or message
  • (Unknown or malformed type-length-value (TLV
  • Session keepalive timer expiration
  • Unilateral session shutdown
  • Initialization message events
  • Events resulting from other messages
  • Internal errors
  • Loop detection
  • Miscellaneous events

 

ارتباط هدف دار LDP :


به طور معمول ، ارتباط LDP بین LSR هایی که به صورت مستقیم به یکدیگر متصل هستند تنظیم می شود. در شبکه هایی که مسیرهای IGP نیاز به label خوردن دارد این عمل برای آنها کافی است چون label switching برای بسته هاپ به هاپ انجام می شود. بنابراین اگر label bindings به صورت هاپ به هاپ برای مسیرهای IGP اعلام شود LSP تشکیل می شود. اما در بعضی شرایط نیاز به ارتباط LDP هدف دار یا remote است. این ارتباط LDP بین LSR هایی برقرار می شود که به صورت مستقیم به یکدیگر متصل نیستند. نمونه این ارتباط هدف دار LDP در شبکه های AToM و TE tunnel در یک شبکه MPLS VPN می باشد. در حالت AToM یک ارتباط LDP باید بین هر جفت روتر PE وجود داشته باشد. این ارتباط LDP به صورت remote زمانی تشکیل می شود که از دستور xconnect در روترهای PE شبکه AToM استفاده شود. در حالت TE tunnel در یک شبکه MPLS VPN ، در روترهای P که نقطه پایانی TE tunnel می باشند نقطه ابتدایی و پایانی TE tunnel نیاز به یک ارتباط هدف دار LDP دارد تا بتواند ترافیک MPLS VPN را با label درست از طریق شبکه MPLS VPN دریافت کند. برای همسایه هایی که به صورت مستقیم به یکدیگر متصل هستند تنها کاری که شما باید برای آنها انجام دهید این است که ip mpls را در اینترفیس مورد نظر فعال کنید سپس این همسایه ها یکدیگر را پیدا می کنند و ارتباط LDP از نوع TCP بین آنها ایجاد می گردد. همسایگی LDP در حالتی که آنها به صورت مستقیم به یکدیگر متصل نیستند باید به صورت دستی در هر دو روتر با استفاده از دستور mpls ldp neighbor targeted انجام شود.
Syntax دستور به صورت زیر است :

mpls ldp neighbor [vrf vpn-name] ip-addr targeted [ldp | tdp]

در اینجا VRF به (Carrier’s Carrier (CsC اشاره دارد که کدام ارتباط LDP از طریق اینترفیس VRF برقرار است.

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

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

LDP Operation :


در این بخش به بررسی چهار بخش اصلی LDP که در بخش قبلی مقاله عنوان شد می پردازیم.

پیدا کردن LSR هایی که LDP را اجرا کرده اند :


LSR هایی که LDP را اجرا کرده اند روی همه لینک هایی که LDP روی آنها فعال شده است بسته های LDP Hello ارسال می کنند و این لینک هایی است که روی آنها MPLS با استفاده از دستور mpls ip در آن اینترفیس تنظیم شده است. اما در ابتدا باید CEF با استفاده از دستور ip cef در global mode فعال شده باشد سپس LDP به صورت globally با استفاده از دستور mpls ip فعال شود. در تصویر زیر دستورات فعال کردن LDP نمایش داده شده است :

Image

LDP Hello بسته های UDP می باشند که روی لینک ها برای همه روترهای آن subnet به صورت Multicast ارسال می شوند و از آدرس 224.0.0.2 به عنوان آدرس multicast استفاده می کند و همچنین از پورت UDP 646 استفاده می کند. LSR که بسته LDP Hello را روی یک پورت خود دریافت کند متوجه می شود که از طریق این پورت به یک روتر که LDP را اجرا کرده است می رسد. بسته های Hello حاوی Hold time هستند و اگر قبل از انقضای زمان Hold time ، بسته hello از آن LSR دریافت نکند LSR را از جدول همسایه های LDP خود حذف می کند. برای اینکه مشاهده کنید که LSR بسته های LDP Hello ارسال یا دریافت کرده اند و همچنین مشاهده Hello interval و Hold time می توانید از دستور show mpls ldp discovery [detail] استفاده کنید. اگر روی یک اینترفیس ارسال و دریافت بسته های LDP Hello رخ دهد نشان دهنده ایجاد همسایگی بین دو LSR که LDP را اجرا کرده اند می باشد. در تصویر زیر خروجی دستور فوق نمایش داده شده است :

Image

با استفاده از دستور show mpls interfaces می توانید خیلی سریع اینترفیس هایی که روی آنها LDP اجرا شده است را ببینید. خروجی این دستور به صورت زیر است :

Image

برای تغییر زمان بین ارسال بسته های Hello و یا تغییر زمان Hold time از دستور mpls ldp discovery {hello {holdtime | interval} می توانید استفاده کنید.
مقدار پیش فرض برای hold time برابر 15 ثانیه می باشد و هر 5 ثانیه یکبار بسته hello ارسال می شود. در تصویر بالا سه همسایه LDP شناسایی شده اند که دارای IP های 10.200.254.1 ، 10.200.254.3 و 10.200.254.5 می باشند. همانطور که می بینید LSR 10.200.254.1 از طریق دو اینترفیس Ethernet 0-1-3 و Ethernet 0-1-4 شناسایی شده است و مقدار پیش فرض برای Hello interval و Hold time یعنی 5 و 15 ثانیه تعیین شده است. اگر دو همسایه LDP دارای مقدار Hold times متفاوت باشند مقدار کمتر به Hold times در نظر گرفته می شود. IOS سیسکو مقدار Hello interval را تغییر می دهد تا بتواند حداقل سه بسته LDP Hello قبل از انقضای زمان Hold time ارسال کند. اگر زمان Hold time برای یک لینک منقضی شود آن لینک از لیست LDP حذف می شود. اگر اخرین لینک مربوط به همسایه LDP حذف شود ارتباط همسایگی بین آن LSR های نیز خاتمه می یابد. در صورتی که مقدار Hello interval و Hold times را برای LDP تغییر دادید مطمئن شوید که مقدار در نظر گرفته شده خیلی بزرگ یا کوچک نباشد. اگر مقدار Hold time خیلی کوچک در نظر گرفته شود باعث می شود که در زمانی که تعداد کمی از بسته ها به دلایل مختلف (مانند حجم بالایی ترافیک) از بین برود این رابطه همسایگی نیز از بین برود. اگر مقدار Hold time خیلی نیاز در نظر گرفته شود ممکن است که رابطه همسایگی برای یک مدت طولانی برقرار باشد در صورتی که یک مشغول جدی در ارتباط وجود داشته باشد و عکس العمل نسبت به آن دیر انجام شود و نتیجه آن از دست رفتن حجم زیادی از بسته می باشد.
توجه داشته باشید که هر LSR که LDP را اجرا کرده است دارای یک شناسه یا LDP ID می باشد. این LDP ID یک فیلد 6 بایتی است که 4 بایت آن مشخص کننده شناسه منحصر به فرد LSR می باشد و 2 بایت آن مشخص کننده label space می باشد که اگر این دو بایت برابر صفر باشد نشان دهنده perplatform label space بودن آن می باشد و اگر مقدار آن چیزی غیر از صفر باشد نشان دهنده per-interface label space می باشد. در برخی از حالت ها می توان از چند LDP ID استفاده کرد. که در این LDP ID ها مقدار چهار بایت اول برابر می باشد اما مقدار دو بایت دیگر متفاوت می باشد. به طور مثال per-interface label space را در نظر بگیرد. مقدار 4 بایت اول LDP ID یک آدرس IP است که از روی یکی از اینترفیس های روتر گرفته شده است. اگر اینترفیس loopback وجود داشته باشد بزرگترین IP متعلق به اینترفیس loopback برای 4 بایت اول LDP ID در نظر گرفته می شود. اگر اینترفیس loopback وجود نداشته باشد بزرگترین IP اینترفیس ها برای این 4 بایت LDP ID در نظر گرفته می شود. در تصویر بالا مقدار LDP ID برابر 10.200.254.2:0 می باشد که 10.200.254.2 نشان دهنده بزرگترین IP و 0 نشان دهنده perplatform label space می باشد. شما می توانید مقدار LDP ID را با استفاده از دستور mpls ldp router-id interface [force] تغییر دهید. در صورت استفاده از کلید force مقدار LDP ID بلافاصله تغییر می کند در غیر این صورت مقدار LDP ID در زمانی بعد که نیاز به تعیین LDP ID باشد براساس این دستور تعیین می گردد و آن زمانی است که اینترفیسی که در حال حاضر به عنوان LDP ID استفاده می شود shutdown شود.
در IOS سیسکو ، LDP ID باید در جدول مسیریابی همسایه LDP وجود داشته باشد در غیر این صورت ارتباط LDP و همسایگی آن ایجاد نمی گردد. بنابراین آدرس IP که به عنوان LDP ID مورد استفاده قرار می گیرد باید در جدول مسیریابی وجود داشته باشد. اگر برای این آدرس IP در جدول مسیریابی هیچ مسیری وجود نداشته باشد ارتباط و همسایگی LDP برقرار نمی شود. در تصویر زیر آدرس 10.200.254.3 در جدول مسیریابی LSR لندن وجود ندارد. در نتیجه بین LSR لندن و LSR روم هیچ ارتباط و همسایگی LDP برقرار نمی شود و این به خاطر LDP ID با مقدار 10.200.254.3 می باشد.

Image

 

MPLS چگونه کار می کند؟ – بخش ششم : پیاده سازی یک سناریوی عملی

در بخش های قبلی با تکنولوژی MPLS و بخشی از ماکنیزم کاری آن آشنا شدیم. در این بخش می خواهیم جهت آشنایی و درک بهتر یک سناریو را به صورت عملی پیاده سازی کنیم تا با این مفاهیم بهتر آشنا شویم.

سناریو :


برای درک بهتر مباحث گفته شده یک سناریو را با هم حل می کنیم. به تصویر زیر دقت کنید روترهای R1 تا R5 به عنوان روترهای شبکه MPLS هستند روترهای R1 و R5 به عنوان روترهای Edge LSR نقش ایفا می کنند و سایر روترها به عنوان LSR های میانی هستند. در این شبکه می خواهیم از PC بسته ای را به سرور که در شبکه 10.0.0.0/8 است ارسال کنیم و نحوی ارسال و label زدن بسته را مورد بررسی قرار دهیم.

Image

جهت توزیع label ها از پروتکل LDP استفاده شده است و بین روترها از پروتکل مسیریابی EIGRP بهره گرفته ایم. با در نظر گرفتن شرایط یکسان لینک ها بین روتر ها ، مسیر پایین به عنوان بهترین مسیر برای ارسال بسته ها از R1 به R5 می باشد و به عنوان LSP انتخاب می شود.
در ابتدا local label توسط هر روتر برای شبکه ها موجود در جدول مسیریابی تعیین می گردد این کار توسط خود روتر انجام می شود در این مثال شماره label های انتخاب شده توسط هر روتر برای شبکه 10.0.0.0/8 به شرح زیر است :

Image

نکته : روترها می توانند برای یک شبکه label های یکسان داشته باشند.
در مرحله بعدی این local label ها توسط پروتکل LDP به همسایه ها اعلام می شود به طور مثال R1 به R2 و R3 اعلام می کند که label 19 را برای شبکه 10.0.0.0 انتخاب کرده است و R2 به R1 و R4 اعلام می کند که label 20 را برای شبکه 10.0.0.0 انتخاب کرده است. و اینکار توسط سایر روترها نیز انجام می گیرد. سپس هر روتر local label و remote label هایی را که از همسایه های خود دریافت کرده است را در جدولی تحت عنوان LIB ذخیره می کند. با هم جدول LIB روترها را ببینیم :

Image

نکته : روتر R5 به عنوان روتر egress LSR برای شبکه 10.0.0.0/8 می باشد در نتیجه اگر بسته ای برای این شبکه به آن برسد label آنرا pop کرده و بسته را بدون label ارسال می کند. با توجه به این ویژگی می توان بسته را در hop ما قبل آخر بدون زدن label ارسال کرد چون درصورتی که label هم داشته باشد روتر R5 آنرا pop می کند. در این مثال روترهای R3 و R4 می تواند بسته های شبکه 10.0.0.0 را برای R5 بدون label ارسال کنند. حالا R3 و R4 از کجا متوجه شوند که hop ما قبل آخر هستند؟ اخرین روتر که در اینجا R5 است به همسایه های خود یعنی R2 و R4 اعلام می کند که آخرین روتر است در نتیجه از این به بعد R2 و R4 بسته های مربوط به این شبکه را بدون label ارسال خواهند کرد. به این عمل (penultimate hop popping (PHP گفته می شود.
بعد از اینکه LIB تشکیل شد باید LFIB ایجاد شود. همانطور که قبلا اشاره شد برای ایجاد LFIB از LIB و جدول مسیریابی استفاده می کنیم. به این صورت که برای هر شبکه ما چند label در LIB داریم. برای انتخاب یک label از بین label های موجود ، جدول مسیریابی را بررسی می کنیم و hop بعدی برای رسیدن به این شبکه را پیدا می کنیم و از label که توسط آن برای ما ارسال شده است استفاده می کنیم. در این مثال R1 در جدول LIB خود 2 عدد remote label دارد که از روترهای R2 و R3 آنها را دریافت کرده است. برای انتخاب یکی از این دو به جدول مسیریابی خود مراجعه می کند و همانطور که قبلا گفتیم مسیر پایین که از روتر R3 می گذرد بهترین مسیر است. در نتیجه label 20 را که از R3 دریافت کرده است را برای LFIB در نظر می گیرد و اینکار توسط سایر روترها نیز انجام می شود.
جدول LFIB روترها به شرح زیر است :

Image

جدول LFIB ما تشکیل شده است و روترها می توانند براساس label بسته ها را به مقصد ارسال کنند. برای بررسی دقیق تر یک بسته از PC به Server ارسال می کنیم و عملکرد شبکه را در قبال آن بررسی می کنیم:
بسته ارسالی از PC به دست R1 می رسد. R1 بسته را تا لایه شبکه باز می کند و IP مقصد بسته را بررسی می کند. با دیدن آدرس 10.0.0.1 و مقایسه آن با جدول مسیریابی متوجه می شود که بسته را باید به روتر R3 ارسال کند. سپس با استفاده از جدول LFIB متوجه می شود که باید به بسته Label 20 زده و آنرا ارسال کند. در اینجا روتر R1 به عنوان ingress LSR شناخته می شود. در تصویر زیر خروجی R1 به R3 توسط نرم افزار وایرشارک capture شده است و همانطور که می بینید یک بسته ICMP از آدرس 192.168.1.2 به سمت 10.0.0.1 با label 20 در حال ارسال است.

Image

بسته ارسالی به دست روتر R3 می رسد بسته تا لایه دوم باز شده و با دیدن label 20 آنرا با جدول LFIB خود مقایسه می کند و متوجه می شود که بسته را باید به روتر R5 ارسال کند و چون روتر R5 خود را به عنوان اخرین hop معرفی کرده است label 20 را pop کرده و بسته را بدون label به سمت روتر R5 ارسال می کند.
حالا بسته به دست R5 بدون label می رسد و R5 آنرا تا لایه سوم باز می کند و با دیدن IP مقصد و مقایسه آن با جدول مسیریابی آنرا ارسال می کند.
یکبار دیگر این مراحل را بررسی کنیم اما اینبار مسیر بالا را به عنوان بهترین مسیر در نظر می گیریم.
با همان روش قبل جدول LFIB را پر می کنیم که به صورت زیر تغییر می کند :

Image

بسته ارسالی از PC به دست R1 می رسد. R1 بسته را تا لایه شبکه باز می کند و IP مقصد بسته را بررسی می کند. با دیدن آدرس 10.0.0.1 و مقایسه آن با جدول مسیریابی متوجه می شود که بسته را باید به روتر R2 ارسال کند. سپس با استفاده از جدول LFIB متوجه می شود که باید به بسته Label 20 زده و آنرا ارسال کند
بسته ارسالی به دست روتر R2 می رسد بسته تا لایه دوم باز شده و با دیدن label 20 آنرا با جدول LFIB خود مقایسه می کند و متوجه می شود که بسته را باید به روتر R4 ارسال کند. درنتیجه label بسته را با label 20 ، swap می کند و آنرا برای R4 ارسال می کند.
بسته ارسالی به دست روتر R4 می رسد بسته تا لایه دوم باز شده و با دیدن label 20 آنرا با جدول LFIB خود مقایسه می کند و متوجه می شود که بسته را باید به روتر R5 ارسال کند و چون روتر R5 خود را به عنوان اخرین hop معرفی کرده است label 20 را pop کرده و بسته را بدون label به سمت روتر R5 ارسال می کند.
حالا بسته به دست R5 بدون label می رسد و R5 آنرا تا لایه سوم باز می کند و با دیدن IP مقصد و مقایسه آن با جدول مسیریابی آنرا ارسال می کند.
در تصویر زیر جدول مسیریابی روتر R1 را مشاهده می کنید :

Image

در تصویر زیر LIB روتر R1 را مشاهده می کنید :

Image

در تصویر زیر جدول LFIB روتر R1 را مشاهده می کنید :

Image

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