پروتکل STP قسمت دوم
تو اسلاید بالا دوباره داره میگه که Root Port و Designated Port چطوری دارن بر اساسِ Cost ِ کمتر انتخاب میشن.
توی این شکل بالا داره میگه که چطوری الان از SW1 با Cost ِ صفر BPDU ارسال میشه و هر سوئیچ Cost ها رو با خودش جمع میکنه و مقایسه میکنه که مثلا در SW3 (Cost ِ دوتا اینترفیسهاش رو مقایسه میکنه که الان هر کدومش Cost تِش چنده) و کدومش بشه RP و کدوم بشه DP . قبلا راجع به اینا توضیح دادم.
خیلی زمانها هستش که وقتی دارید این Cost ها رو محاسبه میکنید اینا باهمدیگه مساوی میشه. مثلا فرض کنید که من روی 4 تا اینترفیس دارم Cost ِ یکسان میگیرم (یعنی BPDU یی که دریافت میکنم Cost ِ همشون یکسانه). حالا کدومش میشه RP ؟ یا من Cost یی که به سوئیچِ مقابلم میفرستم با Cost یی که سوئیچِ مقابل بمن میده یکی میشه. توی این سگمنت کی میشه DB ؟ برای اینکار میان (Tie Breakers) میزارن. یعنی حتما باید من بتونم انتخاب کنم. مساوی نداریم. اولین Tie Breakers یی که شما استفاده میکنید رو بهش میگن (Sender BridgeID) (یعنی BridgeID یِ کسی که داره ارسال میکنه). دومین Tie Breakers میشه Port ID . بریم مثالی ببینیم که اینا چطوری میتونن بعنوان مساوی شِکن استفاده بشن.
به این شکل بالا دقت کنید. توی این سگمنت (بین SW2 و SW3) SW3 داره با Cost ِ 19 به SW2 ارسال میکنه و SW2 هم داره با Cost ِ 19 به Sw3 ارسال میکنه. الان اینا جفتشون Cost هاشون یکیه و کدومشون میتونه DP باشه؟ میگیم اولین Tie Breakers ، Sender BridgeID هستش. اینجا میگه SW2 BridgeID=1000 (سوئیچ 2 بریج آیدیش 1000 هستش) (اینجا عدد قرار دادم برای اینکه متوجه قضیه بشید وگرنه چنین چیزی نداریم ). پس اگه SW2 بریج آیدیش 1000 باشه و BridgeID یِ SW3 خورده باشه 2000 پس بین SW2 و SW3 کدوم BridgeID یش کمتره ؟ مشخصه SW2 . پس SW2 میشه DB و پورتش میشه DP .
بعضی وقتا Sender BridgeID هامونم یکسان میشه. (SW1 و SW2 رو با دوتا لینک بهم وصل کردم). هر دوتا BPDU داره از SW1 بعنوان RB میاد و Cost تِش صفر هستش. کدوم رو بزارم RP ؟ جفتش که Cost تِش صفره؟ میگه برو Sender BridgeID رو نگاه کن و میبینم که هر دوتاشون (هر دو BPDU) Sender BridgeID شونم یکسانه و واسه هردو SW1 هستش. دومین Tie Breakers مون چی بود؟ PortID . اینجا میگه Fa0/5 از Fa0/6 کمتره پس این باید بشه RP .
خب بریم سراغ بحثهای Configuration . یکی از دستورات اصلی که بهش میپردازیم Show spanning-tree هستش. این دستور وضعیت STP رو برامون چک میکنه و نشون میده. در ادامه میخوایم تو بحث انتخاب Root Bridge ورود کنیم. برای انتخاب RB شما دوتا آپشِن دارید و کانفیگِ هر دو آپشن با دستکاریِ Priority انجام میشه. آپشنِ اول به اینصورته که شما خودتون Priority رو بصورت دستی سِت میکنید و بهش عدد میدید.
Switch(config)#Spanning-tree vlan vlan-id Priority Priority
دقت کنید که Priority تون باید زیر عددِ دیفالت باشه (زیر 32768 و مضربی از 4096 باشه). پس من ازین طریق میتونم Priority رو دستکاری کنم یا میتونم ازین Micro Script ها استفاده کنم :
Switch(config)#Spanning-tree vlan vlan-id root primary
Switch(config)#Spanning-tree vlan vlan-id root Secondary
مثلا بیام روی یه سوئیچ بزنم root Primary . وقتی روی یه سوئیچ میزنی root primary نگاه میکنه به Priority یِ RB درحال حاضر. میگه اگه 24 هزار و خورده ای < Priority RB باشه میاد Priority یِ RB رو به همون 24 هزار و خورده ای سِت میکنه. اما اگه Priority یِ RB در حال حاضر (24 هزار و خورده ای <= Priority RB) باشه میاد 4096 تا از Priority یِ root کم میکنه. یعنی چی؟ به این مثال دقت کنید.
من سه تا سوئیچ دارم. Priority یِ دیفالتشون 32 هزار و خورده ای هستش (حالا من زدم 32000). میام چیکار میکنم؟ میام روی SW2 میزنم root primary . الان براساس مک آدرسش مثلا (SW2) RB هستش. اگه بیام روی SW3 بزنم root primary میگه الان RB ، Priority یش چنده؟ 32 هزار و خورده ای. بزرگتر از 24 هزار و خورده ای هستش؟ آره. پس SW3 میاد Priority یِ خودش رو تغییر میده به 24 هزار و خورده ای. حالا SW3 میشه RB . حالا اگه بیام روی SW1 بزنم root primary میاد نگاه میکنه و میگه الان Prioruty یِ RB چنده؟ 24 هزارر و خورده ای. پس کوچکتر مساوی 24 هزار و خورده ای هستش. میاد در SW1 4096 تا از Priority یش کم میکنه و Priority یِ SW1 میشه 20 هزار و خورده ای. ولی اگه شما روی یک سوئیچی بزنید root secondary اصلا کاری با Priority یِ RB نداره و میاد Priority یِ اون سوئیچ رو میزاره 28 هزار و خورده ای.
حالا میریم روی سناریو تا اینموارد رو ببینیم.
در شکل 2 بنظرتون RB کدوم هستش؟ SW5 ، RB هستش چون هر دو پورتش وقتی Up هستش یعنی DP هستن و در SW4 اون پورتش که Up هستش RP هستش و اون یکی اینترفیسش بلاک هستش. حالا میریم چک میکنیم و داخل SW5 میزنیم Show spanning-tree
تو اینجا توی دوتا پارت بهتون گزارش میده. از Vlan0001 تا Hello Time میشه پارت اول و از Bridge ID تا آخر میشه پارت دوم. توی پارت اول داره اطلاعات مربوط به Root Bridge رو میده. اینکه RB ، Priority یش چنده ، مک آدرسش چیه و چه پارامترهای زمانبندی داره که جلوتر راجع بش صحبت میکنیم.
حالا چرا Priority یش 32769 هستش؟ مگه نگفتیم 32768 دیفالتش هستش؟ Priority یِ دیفالت با Vlan number جمع میشه. تو پارت 2 جلوی Priority نوشته که Priority 32768 با 1 شده 32769 . این 1 هم از Vlan Number اومده. یعنی اگه Vlan2 بود میشد 32770 . توی پارت دوم داره درباره اطلاعات خودش صحبت میکنه. قطعا مک آدرس پارت 1 و مک آدرس پارت 2 باهم یکی هستن. چرا؟ چون This bridge is the root (یعنی این سوئیچ RB هستش). پس اطلاعات دوپارت باید باهم یکی باشه. دوتا اینترفیس fa0/2 و fa0/3 در SW5 رولِش (Desg) و state تِش FWD هستش و Cost تِش 19 هستش پس اینترفیس ما 100Mb (بر اساس Cost متوجه شدیم) هستش.
حالا میریم روی SW4 و Show spanning-tree میگیریم :
الان اینجا هم در پارت 1 داره اطلاعات Root Bridge رو مشخص میکنه و در پارت 2 داره اطلاعات همین سوئیچِ SW4 رو مشخص میکنه. در پارت 2 نگاه کنید که داره میگه یه پورتش در نقشِ Alternate هستش و وضعیتش Block هستش و یه پورت دیگش RP هستش.
از طرف دیگه مک آدرسها در پارت 1 و پارت 2 یکی نیست و این طبیعیه چون پارت 1 اطلاعات RB رو میده و پارت 2 اطلاعات همین سوئیچ (SW4) رو میده و ضمنا وقتی دوتا مک آدرسها یکسان نیستن و این سوئیچ RB نیست یعنی مک آدرس RB از مک آدرس این سوئیچِ SW4 متفاوته. مک آدرس RB (000) هستش و ولی برای SW4 (006) هستش و مک آدرس RB کوچیکتره و برای همینه که اون RB شده و همچنین داره میگه که Cost ِ این سوئیچِ SW4 برای اینکه RB رو ببینه 19 هستش. این مجموع اون Cost یی هستش که با اینترفیستونم جمع میشه.
اولین کاری که میخوام روی این سناریو انجام بدم اینه که میخوام تاثیرگذار باشم روی انتخابِ RB از طریق کانفیگ و دستکاری Priority . الان این SW4 (RB) نیست و میخوام کاری کنم که RB بشه. در SW4 این کانفیگ رو انجام میدم :
اینجا اومدم براش Priority رو تعریف کردم و دیفالتش 32768 هستش و من میام همینجوری یه عددی کمتر از دیفالت رو میزارم مثلا 31000 . اما ازمون ایراد میگیره و میگه Value یی که شما انتخاب کردید باید مضربی از 4096 باشه. یعنی فقط از قسمت (Allowed values are) میتونید انتخاب داشته باشید. چراش رو در دوره CCNP دربارش صحبت میکنیم.
حالا دوباره با Priority مناسب کانفیگ میکنیم :
وقتی اینتر رو بزنید و به شکل سوئیچها دقت کنید میرن تو فاز همگرایی و اول دوتا پورت نارنجی میشن و در پایان همگرایی الان دوتا اینترفیس SW4 سبز شد و اینترفیس fa0/3 از SW5 نارنجی شد و الان SW4 بعنوان RB انتخاب شده و میتونیم چکش کنیم و توی SW4 میزنیم Show spanning-tree
در اینجا میبینید که الان Priority یِ RB (16385) هستش و در همون پارت 1 زده (This bridge is the root) . یعنی اگه بیام سراغ SW5 و یه Show spanning-tree بگیرم میبینم که fa0/2 شده RP و fa0/3 شده Alternate و Block شده و پارت 1 هم داره مشخصات RB رو نشون میده با Priority یِ 16385 ولی در پارت 2 داره مشخصات خودش (SW5) رو اعلام میکنه با Priority یِ 32769 . مک آدرس RB در پارت 1 با مک آدرس SW5 در پارت 2 متفاوته و این (SW5) داره میگه که من RB نیستم.
حالا میریم سراغ سناریو با ساختار سه سوئیچ (شکل 1) :
در بین SW1 و SW2 و SW3 قطعا SW3 نمیتونه RB باشه چون یک پورتش Block هستش. اما بین SW1 و SW2 چی؟ کدومش RB هستش؟ میتونید حدس بزنید برای اینکه الان اینترفیسهام همش 100Mb هستش و Cost تِش 19 هستش. قطعا SW1 RB هستش. چرا؟ بیایم یه بررسی بکنیم. اگه SW2 RB باشه اونوقت SW3 برای اینکه بتونه SW2 رو ببینه باید از دوتا Cost ِ 19 رد بشه. یعنی ترجیح داده که fa0/1 از SW3 RP باشه و این منطقی نیست (براساس انتخاب RP) چون اینترفیسهای من همشون Cost شون 19 هستش. SW1 RB هستش که جفتِ اینا (SW2 و SW3) تونستن با کمترین Cost ِ 19 RP شون رو انتخاب کنن. پس از نظر من SW1 RB هستش با دو پورت DP . SW2 هم non RB هستش که یه RP داره (fa0/1) و یه DP (fa0/2) . SW3 هم یه non RB هستش و یه پورت Block داره که fa0/2 هستش و یه RP که fa0/1 هستش.
حالا میریم توی SW1 و یه Show spanning-tree میگیریم.
همونطور که گفتم این سوئیچ SW1 RB هستش و هر دوتا اینترفیسهاش DP هستن. حالا میریم روی سوئیچ SW2 و یه Show spanning-tree میگیریم.
در پارت 1 داره اطلاعات RB رو نشون میده و مک آدرسها در دو پارت باهم متفاوته و همچنین SW2 دارای RP در fa0/1 و DP در fa0/2 هستش.
حالا میریم سراغ SW3 و یه Show spanning-tree میگیریم :
این سوئیچ هم یه RP داره که fa0/1 هستش و یه پورت Alternate داره که Block هستش (fa0/2) . پس SW2 هم گزینه مناسبی برای RB شدن نیست.
حالا ما میخوایم تو انتخاب RB دخالت کنیم. یعنی میخوایم بیایم مثلا همین سوئیچی که RB نیست رو تبدیل به RB کنیم ولی ایندفعه نه با Priority بلکه با root primary . دقت کنید وقتی این مباحث رو یاد گرفتید و چندین دفعه تمرین کردید باید بتونید پیش بینی کنید. دقت کنید الان این SW3 ، Priority یش 32769 هستش. پس بالای 24 هزار و خورده ای هستش. پس اگه روی این سوئیچِ SW3 بزنم Spanning-tree vlan 1 root primary انتظار دارم که RB همین SW3 بشه و Priority یش بشه 24 هزار و خورده ای.
وقتی این دستور رو میزنیم سوئیچها میرن تو فاز همگرایی. حالا یه Show spanning-tree میگیرم و میبینم که تو قسمت پارت 1 خورده Priority 24577 و نوشته (This bridge is the root) و الان این سوئیچ تبدیل شده به RB .
حالا میریم سراغ SW1 و یه بار دیگه اونجا Show spanning-tree میزنیم :
در پارت 2 داره مشخصات خود SW1 رو نشون میده. مثلا میگه من Priority یم 32769 هستش و در پارت 1 داره میگه Priority یِ RB 24577 هستش. تا اینجارو داشته باشید. حالا من میرم روی همین SW1 میزنم Spanning-tree vlan 1 root primary . ببینیم چه اتفاقی میفته. اول میرن تو فاز همگرایی و اینوسط میگه من چک میکنم که الان Priority یِ RB چنده و میبینه که 24577 هستش پس باید 4096 تا ازین کم کنم و اینو تبدیل کنم به 20 هزار و خورده ای (20481).
حالا تو همین SW1 یه Show spanning-tree میگیریم و میبینیم که Priority یِ RB در قسمت پارت 1 شده 20481 (همون 20 هزار و خورده ای که میگفتیم) . Priority یِ پارت 1 و پارت 2 یکی هستش چون الان RB شده SW1 .
نکته آخری که میخوام بهش اشاره کنم بحث root secondary هستش. جدای اینکه الان RB ِ من چه Priority داره ، اگه روی SW3 بزنم این دستور رو : Spanning-tree vlan 1 root secondary اونموقع Proiorty یِ این سوئیچ SW3 رو اگه با Show spanning-tree ببینید (یعنی Priority یِ پارت 2 که مربوط به خودِ سوئیچ هستش) Priority یِ SW3 شده 28673 (یا 28 هزار و خورده ای) .
پس دقت کنید لزوما بخاطر اینکه شما میزنید root primary یا root secondary باعث نمیشه که همون اتفاقی که شما میخواید بیفته. باید Concept ها رو بدونید که چطوری با این اعداد داره بازی میکنه که اگه یجایی لازم شد شما اینارو Troubleshoot کنید ، بدونید که توی Background ِش چه اتفاقاتی داره میفته.
حالا میخوام مراحی رو نشونتون بدم که طول میکشه تا زمانیکه یه کامپیوتری رو وصل میکنید یا یک سوئیچی رو وصل میکنید. اگه دقت کرده باشید وقتی دیوایستون رو وصل میکنید یه زمانی طول میکشه تا up بشه . حالا مثلا یه pc رو وصل میکنم به SW3 (به پورت fa0/10) و سریع در SW3 (بمحض اینکه pc رو وصل کردیم) یه Show spanning-tree میگیریم.
اگه دقت کنید fa0/10 ، State تِش تو حالت Listening قرار داره . 15 ثانیه طول میکشه که حالت Listening تبدیل بشه به حالت Learning و اگه بعداز 15 ثانیه دوباره Show spanning-tree بگیرید میبینید که به حالت Learning تبدیل شده (ولی پورت fa0/10 هنوز نارنجی هستش). حالا 15 ثانیه هم مراحل Learning طول میکشه تا لینک fa0/10 سبز بشه و fa0/10 از State ِ Learning تبدیل بشه به Forwarding .
پس الان دیدیم که از زمانیکه STP استارت میزنه به همگرایی تا زمانیکه همگرا میشه این وسط مستقیما Forward نمیشه. یکسری فازهای میانیِ Listening و Learning رو طی میکنه که الان میخوایم باهم بریم ببینیم که این فازها چی هستن.
خب به شکل بالا دقت کنید. اول از همه Disabled رو بگم. Disabled میگه روی یه پورت بزنم Shutdown و با اینکار عملا نه حق داره که جدولِ Mac ش رو بروز کنه ، نه حق داره فریم ارسال کنه ، نه میتونه فریم رو پردازش کنه ، و نه BPDU ارسال میکنه و نه BPDU دریافت شده رو پردازش میکنه.
تو حالت Blocking زمانیکه یک اینترفیس توسط STP تصمیم گرفته میشه که بلاک بشه ، توی اینحالت هم جدولِ Mac بروز نمیشه ، فریمی ارسال نمیکنه و فریم دریافتی روهم پردازش نمیکنه ، خودش هم BPDU ارسال نمیکنه ولی BPDU ی دریافتیش رو پردازش میکنه. چرا؟ چون ممکنه این اینترفیس قرار باشه که دوباره Forward باشه. قبلا دیدیم دیگه اگه یه همگرایی رخ بده و اتفاقی بیفته که لازم باشه که یه اینترفیس بلاکی از بلاک دربیاد ، باید این Blocking گوش بزنگ باشه پس توی پورتهای Blocking عملا BPDU ی دریافتی پردازش میشن. حالا فرض کنید یه تغییری توی نتورک رخ داد یا یه اینترفیس میخواد همگرا بشه. برای همگرا شدن دیدیم علاوه بر اینکه BPDU دریافت میکنه ، الان تو حالت Listening BPDU ارسال هم میکنه. یعنی چی؟ یعنی اون فازِ Listening که دیدید عملا اینترفیس بصورت Active میاد توی پیدا کردن نقشهای خودش و نقشهای نتورکش Role بازی میکنه. مثلا اینترفیس بلاک بوده و توی Listening هستش که مشخص میشه که تهش چه اتفاقی میفته ، چون هم BPDU دریافت میکنه و هم ارسال میکنه. پس میتونم بگم که پایان فاز Listening معوم میشه که آیا اینترفیس باید بلاک بمونه یا بره بسمت Forward شدن. تو حالت Listening همچنان مستقیما Forward نمیشه. اگه بفهمه که باید Forward بشه مستقیم Forward نمیشه و میره تا فازِ Learning . میگه من این اینترفیس رو تا دیروز استفاده نمیکردم و بلاک بوده و حالا میخوام بیارمش و ازش استفاده کنم. اگه همین الان من اون یادگیری لازم رو روی جدول Mac داشته باشم همه فریم ها برام Unnonunicast هستش و Flag میشه. برای اینکه Performance نتورکش رو ببره بالاتر ، میگه من یکاری میکنم. من قبلا داشتم BPDU میفرستادم و دریافت هم میکنم و الان میام یه کار دیگه هم میکنم (تو حالت Learning رو دارم توضیح میدم). اون کار چیه؟ میام فریم های دریافتی رو پردازش میکنم و Forward شون نمیکنم (چون اینجا هنوز لینکتون نارنجی هستش) ولی فریم های دریافتی رو پردازش میکنم و جدول Mac رو بروز میکنم که وقتی بعد از تایمِ 15 ثانیه Learning اومدم توی مجموعه و شروع کردم به به کارکردن ، عملا این Mac Table ِ من مقدار داشته باشه و در نهایت اینترفیسی که میره تو حالت Forwarding تمام کارها رو میتونه انجام بده.
در شکل بالا دقت کنید که ما یکسری تایمر داریم. یه تایمرمون Hello هستش که 2 ثانیه هستش. این مدت زمانیکه RB میاد BPDU رو generate میکنه و ارسال میکنه (این مدت زمان رو میگن Hello Time که هر 2 ثانیه یکبار داره این اتفاق میفته)
یه تایمِ Forward Delay داشتیم (در واقع دوتا Forward Delay داشتیم). یه Forward Delay(FD) برای Listening هستش که هر کدومش 15 ثانیه طول میکشه (توی CCNP دربارش صحبت میشه که این مقادیر چرا 15 ثانیه هستش و به چه چیزایی بستگی داره و چطوری میشه اینارو کانفیگ کرد). در مورد Max Age جلوتر توی بحثِ تغییرات شبکه صحبت میکنیم.
نتورک تغییراتش چه چیزهایی میتونه باشه؟ میتونه حذف یه لینک باشه . میتونه حذف RB یی باشه که الان داره کار میکنه. میتونه اضافه کردن یه لینک جدید باشه یا اضافه کردن یه RB با BPDU یِ بهتر باشه.
در صورتی که تغییر از نوع Direct باشه یعنی وقتیکه یه لینک down میشه مثل شکل بالا (بین SW1 و SW3) عملا دوتا log اینجا گرفته میشه. این دوتا کانلا متوجه میشن لینکشون down شده (یعنی SW1 و SW3). پس تغییر رو سریعا از نوع Direct متوجه میشن. ولی آیا تغییری توی اینترفیسهای SW2 انجام میشه؟ نه. پس این تغییرِ Direct روی (SW1 و SW3) برای این سوئیچِ SW2 یه تغییرِ Indirect و غیر مستقیم هستش. میخوایم ببینیم این تغییرات با همگرایی ِ STP چه نسبتی داره؟ میگم زمانیکه سوئیچ یه تغییری رو از نوع Direct حس میکنه (مثل SW1 و SW3) اونوقت اول 15 ثانیه میره تو فاز Listening و بعد 15 ثانیه میره تو فاز Learning . یعنی 30 ثانیه همگرایی من زمانیکه تغییر من از نوع Direct باشه طول میکشه. اما زمانیکه تغییر Indirect باشه (مثلا الان این SW2 از کجا باید بفهمه که یه تغییر توی نتورک رخ داده؟). اینترفیسی up و down نمیشه که Indirect بخواد متوجه بشه که تغییری رخ داده ولی توی نتورکش تغییر رو توی جریان BPDU احساس میکنه. یعنی چی؟ یعنی مثلا فرض کنید اگه SW1 RB باشه ، قبل از اینکه لینک بین SW1 و SW3 قطع بشه ، SW3 داشته به SW2 میگفته که RB سوئیچِ SW1 هستش. الان که لینک بین SW3 و SW1 قطع شده و ارتباط SW3 با RB قطع هستش اونوقت خودِ SW3 ادعا میکنه که RB هستش پس به SW2 اعلام میکنه که RB منم (یعنی SW3). حالا SW2 میگه که RB تغییر پیدا کرد. BPDU یی که داشتم میگرفتم تغییر پیدا کرد. من داشتم BPDU ی بهتر میگرفتم با BridgeID یِ کمتر ، اما الان دارم BPDU بدتر میگیرم. پس قطعا توی نتورک تغییری رخ داده. منتها این تغییر رو SW2 (تو لحظه) قبول نمیکنه. صبر کنید 10 تا BPDU بیاد. 10 تا 2 ثانیه یعنی 20 ثانیه. اگه یادتون باشه توی چندتا اسلاید قبلتر راجع به Max Age گفتم که جلوتر راجع بش توضیح میدم. اگه به Max Age در اسلاید خودش نگاه کنید میبینید که 10 برابر Hello Time هستش (یعنی 20 ثانیه). پس میگیم که اگه تغییر ما از نوع Indirect باشه اول روی Max Age 20 ثانیه صبر میکنه و بعد میره تو فازِ Listening (15 ثانیه) و بعد میره سراغ فاز Learning (15 ثانیه). یعنی در واقع این مجموعش میشه 50 ثانیه. برای همینه که میگیم تغییرات نتورک برای زمان همگرایی رو میتونه 30 ثانیه تا 50 ثانیه رقم بزنه. 30 ثانیه اگه تغییر از نوع Direct باشه و 50 ثانیه اگه تغییر از نوع Indirect باشه.
یه بحث دیگه ای داریم به اسم Insignificant که بجز Direct و Indirect یک تغییر نامحسوس داریم. یعنی چی ؟ ببینید به یه سوئیچ میام یه کامپیوتر وصل میکنم. چقدر طول میکشه تا لینک کامپیوتر که وصله به سوئیچ up بشه؟ 30 ثانیه. سوالم اینه زمانی که یه کامپیوتر رو وصل میکنید اون لینک اول Block هستش و STP میره تو حالت Listening و میخواد تصمیم بگیره که اینو up کنه. آیا ممکنه که تصمیم بگیره که اینو down کنه؟ نه . اگه وقتی یه لینکی به کامپیوتر وصله یعنی باعث ایجاد Loop توی نتورک من نمیشه. رو همین حساب میتونم بهش بگم که بیخیال اینا شو (یعنی به سوئیچ بگم که بیخیال این پورتت شو که کامپیوتر بهش وصله) چون دردسر ایجاد میکنه. حالا هر بار که یه کامپیوتر بخواد up و down بشه (یعنی پورتی که کامپیوتر بهش وصله) و STP بخواد همگرا بشه ، TCN هم بخواد روی RP تِش بفرسته (جلوتر راجع به TCN صحبت میکنم) اونوقت کل نتورک من مختل میشه. حالا جدای اینکه اون طول کشیدن 30 ثانیه ای برای up شدن اون پورتی که کامپیوتر بهش وصله اعصاب خورد کنه ، دردسرای خودشم داره. پس ما چیکار میکنیم؟ توی همچین سناریوهایی که اینترفیسهای سوئیچ به کامپیوترهای انتهایی وصل هستن روی اون اینترفیسها فیچِری به اسم Portfast رو فعال میکنیم. این یجورایی داره توی بحثِ STP اخلال ایجاد میکنه و باعث میشه که وقتی اینترفیس رو وصل میکنم دیگه فاز Listening و Learning رو طی نکنه و مستقیما Forward شه. خب این مشکل ایجاد میکنه. خودشم میگه که اگه شما portfast رو فعال کنید و فردا مثلا این لینک رو قطع کردی و اومدی وصلش کردی به یه سوئیچِ دیگه چی؟ اونوقت توی همچین نتورکی میتونه Loop ایجاد بشه و اینکه روی اینترفیسی که portfast رو فعال کردیم ممکنه باعث بشه این Loop تو نتورکت رخ بده. برای اینکه این مشکل رخ نده معمولا فیچر port-fast رو با فیچر bpdu-guard همراه میکنیم که بهش بگیم که این اینترفیس رو اگه روش bpdu شنیدی باید این اینترفیس رو down کنی.
حالا بریم بصورت عملی اینارو ببینیم :
خب من اول میام pc1 رو به اینترفیس fa0/1 سوئیچ وصل میکنم و این اینترفیس 30 ثانیه طول میکشه تا up بشه و توی سوئیچ بلافاصله بعداز وصل کردن کامپیوتر به اینترفیسش برید Show spanning-tree بگیرید (البته چندین دفعه بگیرید) تا مراحل Listening و Learning و Forwarding رو ببینید که داره طی میکنه. حالا من میتونم بهش بگم که مثلا اینترفیس fa0/10 رو میخوام با دستور
Spanning-tree portfast بگم بهش که وقتی یه کامپیوتری رو بهش وصل میکنم دیگه این فازهای Listening و Learning و Forwarding رو طی نکن و مستقیما اینو up کن.
بعد توی اینترفیس fa0/10 میریم اینو میزنیم :
وقتی این دستور رو میزنیم بهمون Warning میده و میگه portfast باید فقط روی پورتهایی Enable بشه که به یه کامپیوتر وصلن. وقتی portfast (Enable) میشه و اگه بیاید روشون Hub و سوئیچ وصل کنید ممکنه باعث ایجاد Loop بشه. پس گفتیم وقتی ما اینکارو میکنیم و برای اینکه مشکل امنیتی برامون رخ نده این فیچر رو با spanning-tree bpdugaurd enable هم همراهش میکنیم. پس توی اینترفیس fa0/10 این دستور روهم میزنیم :
بریم تست بگیریم و ببینیم که نتیجه چی میشه. الان وقتی یه کامپیوتر رو وصل میکنم به پورت fa0/10 انتظار دارم که این پورت بدون اینکه اون 30 ثانیه رو طی کنه سریعا up بشه و همین اتفاق هم افتاد. حالا میام یه کار دیگه میکنم. اون لینک کامپیوتر که به اینترفیسِ fa0/10 سوئیچ وصل بود رو قطع میکنم و یه سوئیچ میزارم و سوئیچ جدید رو وصل میکنم به اینترفیس fa0/10 سوئیچ اول. انتطار دارم بخاطر دستور دوم یعنی bpdugaurd وقتی سوئیچ جدید رو وصل کنم به اینترفیس fa0/10 سوئیچ اول ، این لینک قرمز بشه و میبینم که همین اتفاق هم میفته و با اینکار باعث میشه که توی نتورمتون Loop ایجاد نشه.
اگه یادتون باشه اون ابتدا که داشتم درباره bpdu صحبت میکردم گفتم دو مدل bpdu داریم (Hello BPDU و TCN). اونچیزیکه تا الان باهم تو بحث انتخابها دیدیم درباره Hello BPDU بودش. اما TCN چیه؟ به شکل بالا دقت کنید. زمانیکه یه سوئیچی توی نتورک شما یه تغییر رو از نوع Direct حس میکنه (یعنی SW7 و SW8) ، خودش رو موظف میکنه که یه BPDU از نوع TCN ایجاد کنه و روی RP تش TCN ارسال کنه. الان توی شکل SW8 نمیتونه چون RP تش قطع شده ولی SW7 میتونه. پس SW7 روی RP تش TCN ارسال میکنه. هر سوئیچی که یه TCN رو روی DP دریافت میکنه موظفه اون TCN رو روی RP خودش Forward کنه تا در نهایت TCN میرسه به RB . حالا RB زمانیکه TCN رو دریافت میکنه (هر 2 ثانیه یکبار داشته Hello BPDU ارسال میکرده)
توی 2 ثانیه بعدی میاد توی Hello BPDU یِ خودش یه (TCN Flag) رو سِت میکنه و ازین طریق به همه سوئیچها میفهمونه که یجایی از نتورک یه تغییری رخ داد. حالا فرض کنید روی سوئیچی که قطع شده یکسری کلاینت دارن کار میکنن (یعنی SW8) و یکسری کلاینت هم دارن روی SW6 کار میکنن. این تغییر تو روند کلاینتهای SW6 تاثیر نمیزاره ولی توی کلاینتهای SW8 تاثیر میزاره. هر سوئیچی برای خودش یه Mac table Age Time یی داره. یعنی زمانیکه یه مک آدرس رو لرن میکنه تا مدت دیفالت 300 ثانیه اگه این مک کار نکنه و Idle باشه رو نگه میداره. وقتی یه سوئیچ یه Hello BPDU میگیره با TCN Flage ِ سِت شده ، 300 ثانیش رو به 15 ثانیه کاهش میده. برای چی ؟ میگه اونایی که الان دارن با من کار میکنن که اوکیه و اینا اصلا به Age Time ربطی ندارن. اونایی که الان تو حالتِ Idle هستن ممکنه کلاینتهای SW8 باشن. حالا چرا 15 ثانیه؟ چون اونور Listening 15 ثانیه طول میکشه و نقشهای جدید پیدا میشه و بعد توی فاز Learning این مجدد داره دوباره این بسته ها مک آدرسهاش لرن میشه. پس دقت کنید تنها کاری که TCN انجام میده اینه که RB با دریافت TCN میفهمه تغییر رخ داده و با ارسال Hello BPDU و TCN Flag ِ سِت شده به سوئیچها این تغییر رو میفهمونه و بهشون میگه که بیاید (Mac Table Age Time) تون رو از 300 ثانیه کاهش بدید به 15 ثانیه.
حالا یه نگاهی بندازیم به انواع مدلهای STP :
در واقع اونچیزیکه راجع به STP صحبت کردیم بهش IEEE 802.1D هم میگن یا CST . CST یکی از مشکلاتش زمان همگراییِ بالاش هستش و دیدیم که 30 تا 50 ثانیه زمان همگرایی downtime توی نتورک خیلی زیاده. غیر از زمان همگرایی یه مشکل دیگه استفاده نکردن همزمان از همه لینکهاست. فرض کنید من سه تا ساختمون دارم و اومدم کلی هزینه کردم و با Fiber Optic این سه تا ساختمون رو بهم وصل کردم و اونوقت STP یکی ازین لینکهارو down میکنه و تا یکی از لینکهای اصلیم قطع بشه. پس من نمیتونم همزمان از همه لینکهام استفاده کنم. سیسکو برای حلِ مشکلِ استفاده همزمان از همه لینکها اومد PVST رو ارائه کرد (per vlan STP).
گفتش اگه توی نتورکی مثلا دوتا Vlan دارم ( vlan2 و vlan3) . برادکستِ vlan2 هیچوقت باعثِ ایجاد Loop توی Vlan3 نمیشه و برعکس. یعنی گفت بیا اینکارو بکنیم. من SW2 رو میزارم RB برای vlan2 . مثلا اینترفیس fa0/1 (SW3) رو قطع میکنم برای vlan2 و SW3 رو میزارم RB برای vlan3 و اینترفیس fa0/2 (SW2) رو قطع میکنم برای vlan3 ولی ترافیک vlan2 رو روی fa0/2 (SW2) میفرستم و ترافیک vlan3 روهم روی fa0/1 (SW3) میفرستم. پس عملا تونست کاری بکنه که استفاده همزمان از همه لینکها رو درست کنه. منتها دوتا مشکل داشت. مشکل اول این بود که این PVST با CST سازگار نبود (یعنی اگه یکی رو میذاشتیم PVST و اون یکی رو CST باهم کار نمیکردن) و دوم اینکه PVST فقط با ISL کار میکرد. برای حل مشکلات PVST سیسکو اومد PVST+ رو ارائه کرد. این همون چیزیه که by default سوئیچهای سیسکو باهاش کار میکنن.
پس عملا توی همچین شکلی (شکل بالا) من میتونم بگم که (در شکل سمت چپ) اگه من دوتا vlan دارم و بگم SW2 تو RB باش برای vlan2 و در شکل سمت راست بگم SW3 تو RB باش برای vlan3 و در همین شکل سمت راست به SW2 (به اون پورتی که میره سمت SW1) بگم که تو برای vlan3 بلاک باش و در شکل سمت چپ در SW3 (اون پورتی که میره سمت SW1) بگم که تو برای vlan2 بلاک باش. حالا همین پورتی که در شکل سمت راست روی SW2 (پورتی که میره سمت SW1) برای vlan3 بلاک هستش برای vlan2 در شکل سمت چپ در SW2 (روی پورتی که میره بسمت SW1) حکم DP رو داره و همون پورتی که روی SW3 بسمت SW1 (در شکل سمت راست) DP هستش در vlan3 در شکل سمت چپ روی SW3 در پورتی که میره سمت SW1 یلاک هستش. پس عملا میتونیم استفاده همزمان رو از همه لینکهامون داشته باشیم.
حالا بریم بصورت عملی به این قضیه نگاه کنیم :
تو اولین قدم اومدم توی هر سه تا سوئیچ دوتا vlan2 و vlan3 رو ساختم و همه لینکهای هر سه سوئیچ روهم Trunk کردم و اگه Show vlan brief بگیرید میتونید vlan هایی که ساختید رو ببینید و اگه Show int trunk بگیرید میتونید اینترفیسهای ترانکتون رو ببیند.
حالا میخوام بگم که SW1 بشه RB برای vlan1 و SW2 بشه RB برای vlan2 و SW3 بشه RB برای vlan3 .
میرم روی SW1 و این کانفیگ رو انجام میدم :
SW1(config)#spanning-tree vlan1 root primary
میرم روی SW2 و این کانفیگ رو انجام میدم :
SW1(config)#spanning-tree vlan2 root primary
میرم روی SW3 و این کانفیگ رو انجام میدم :
SW1(config)#spanning-tree vlan3 root primary
بعد از فاز همگرایی همه لینکها سبز میشن.
حالا بریم یه نگاهی کنیم ببینیم چه اتفاقی افتاده بعد از همگرایی. مثلا میریم توی SW2 و یه Show spanning-tree میگیریم.
داره میگه SW2 برای vlan1 الان RB Priority یش 24577 هستش ، منه SW2 Priority یم 32769 هستش. پس منه SW2 برای vlan1 ، RB نیستم. اینترفیس fa0/2 بلاک هستش و اینترفیس fa0/1 RP هستش.
اما تو اسلاید 46 داره میگه منه SW2 برای vlan2 ، RB هستم (This bridge is the root) و دوتا اینترفیسم DP هستش.
اما تو اسلاید 47 داره میگه Priority یِ RB برای vlan3 24579 هستش و Priority ی من (SW2) برای vlan3 32771 هستش و وضعیت دوتا اینترفیسهام fa0/1 (DP) هستش و fa0/2 (RP) هستش.
حالا میریم سراغ SW1 و یه show spannin-tree میگیریم :
در اسلاید 48 داره میگه SW1 برای vlan1 ، RB هستش و Priority یش 24577 هستش و دوتا اینترفیسهاش DP هستن.
در اسلاید 49 داره میگه Prioriry یِ RB برای vlan2 24578 هستش و priority یِ SW1 برای vlan2 32770 هستش و وضعیت پورت fa0/2 RP هستش و fa0/1 وضعیتش بلاک هستش (این وضعیت نسبت به vlan2 هستش)
اما در اسلاید 50 داره میگه که Priority یِ RB برای Vlan3 24579 هستش و Priority یِ SW1 برای vlan3 32771 هستش و fa0/2 بلاک هستش و fa0/1 هم RP هستش. پس متوجه شدیم که Role ها توی vlan های مختلف فرق میکنه. یعنی یه پورت تو هر vlan میتونه نقشش متفاوت باشه و همین باعث میشه که استفاده همزمان از همه لینکها رو به ما بده.
خب تا اینجا اومدیم راجع به PVST و +PVST صحبت کردیم و این دوتا اومدن مشکل استفاده همزمان از لینکها رو برطرف کردن ولی همچنان زمان همگرایی بعنوان یه مسئله باقی موند. بعدش IEEE اومد استاندارد IEEE 802.1W(RSTP) رو داد بیرون. RSTP اومد با تغییر رُل پورتهای (Role) هر اینترفیسی توی STP و نحوه کاری که داشت انجام میداد (نحوه همگرایی) ، زمان همگرایی رو تا حد قابل قبولی پایین آورد. ازونطرف سیسکو هم منتظر نموند و اومد Cisco RPVST+ رو داد بیرون و استفاده همزمان از همه لینکها رو با زمان همگرایی خیلی پایین ممکن ساخت. بنظر میاد RPVST+ بهترین گزینه ای هستش که داریم و عملا احتیاج به مدل دیگه ای نیست ولی IEEE اومد استاندارد IEEE 802.1S(MST) رو هم بیرون داد. چرا؟ اینجارو نگاه کنید :
فرض کنید که بین این سه تا سوئیچ میخوام PVST ران کنم و دوتا Vlan دارم و مثلا میگم برای vlan2 ، fa0/1(SW3) بلاک باشه و برای vlan3 ، fa0/1(SW2) بلاک باشه. اینجا من دوتا توپولوژی فعال دارم (1 و 2). (از SW3 به SW2 به SW1) و (از SW2 به SW3 به SW1)
حالا چه دوتا vlan داشته باشم و چه چهارصدتا vlan اونوقت برای 200 تاش توپولوژی فعال سمت 1 هستش و 200 تاش سمت 2 (یعنی برای هر مسیر 200 تا). اما STP به ازای هر vlan یه Instant ِ مختلفِ (STP) up میکنه. یعنی اگه من 400 تا vlan دارم در واقع دوتا Instant ِ (STP) لازم دارم ولی 400 تا Instant ِ مختلف ران میشه و باعث میشه Performance من بیاد پایین. پس اگه بخوام مقایسه کنم MST رو میگم تعداد Instant های STP وابسته به تعداد Vlan ها نیست بلکه وابسته هستش به تعداد توپولوژیهای فعال. پس اینجوری Performance بالاتری بمن میده و یه پروتکل استاندارد هستش پس میتونم بین دیوایسهای غیر سیسکویی ازش استفاده کنم و اینکه میتونم بگم که داره از RSTP استفاده میکنه تو بحثهای همگرایی و زمان همگرایی خوبی داره و از طرف دیگه با ورژنهای قبلی CST هم سازگاری داره.
نویسنده
مهندس جواد هدایتی
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.