در مقاله قبلی فهمیدیم Layer 2 Loop چیست و چه زمانی رخ میدهد.
پروتکل STP یا Spanning-Tree یک پروتکل لایه دویی برای شکستن Loop در شبکه LAN می باشد که IEEE آن را استاندارد کرده است .که به دلیل اینکه سوییچ های شرکت سیسکو از Vlaning پشتیبانی میکنند ، سیسکو STP را به صورت Per Vlan یعنی به ازای هر Vlan یک STP جدا گانه اجرا میکند که به آن Per Vlan STP یا PVST گویند.
البته این را هم اضافه کنیم امروزه به دلیل ضعف پروتکل STP که وابستگی کامل به زمان دارد از پروتکل پیشرفته تر آن یعنی Rapid STP استفاده میشود که Timer Base نمی باشد که استاندارد IEEE است و البته سیسکو از پروتکل Rapid PVST استفاده میکند.
در این مقاله قصد تدریس پروتکل STP با استاندارد ۸۰۲٫۱d را داریم.
STP در تمام مدت سعی دارد که یک ارتباط لایه دویی پایدار را در کمترین زمان ممکن بدون Loop ایجاد کند.
STP چگونه کار میکند؟
در ابتدا وقتی سوییچ روشن می شود ادعای Root Bridge شدن می کند و Bridge-ID خود در غالب بسته BPDU به بقیه اعلام می کند و زمانی که یک BPDU Superior دریافت کند یعنی سوییچی باشد که Bridge-ID آن کمتر باشد یا بهتر بگوییم BPDU با شرایط بهتر دریافت کند آن سوییچ را به عنوان Root Bridge قبول میکند و دیگر ادعای Root Bridge ای نمیکند.
Bridge-ID از دو قسمت Priority و Base MAC Address تشکیل شده است و هر چه مقدارش کمتر باشد بهتر است.
Priority یک عدد دو بایتی است که میتواند از صفر تا ۶۵۵۳۵ باشد که مقدار پیشفرض آن در سوییچ ها ۳۲۷۶۸ است.
Base Mac Address نیز در سوییچ های مختلف متفاوت است یعنی ممکن یک سوییچ مقدار آن را از آدرس فیزیکی یا MAC address اینترفیس مجازی Vlan 1 بردارد که به صورت پیشفرض در سوییچ ها ساخته شده است و یا ممکن است Minimum مقدار Mac-Address اینترفیس های فیزیکی خود و یا حتی Maximum آنها.
دستور تغییر Priority برای یک Vlan خاص:
Switch(config)#Spanning-tree vlan 10 priority 0
منظور از Extended System ID همان شماره Vlan ID است.
می دانیم سوییچ های سیسکو از قابلیت Vlaning پشتیبانی میکنند و می دانیم که STP به ازای هر Vlan جداگانه انجام میشود.
Per Vlan STP یعنی یک سوییچی که سه Vlan دارد سه Process STP جدا از هم کار میکند و ممکن است سه Root Bridge مختلف به ازای هر Vlan داشته باشیم.
حالا سیسکو مقدار Extended System ID را قرار داده تا مقدار Bridge-ID های Vlan های مختلف مقدار یکسان نشود یعنی مقدار Priority که پیشفرض ۳۲۷۶۸ است را با Vlan ID جمع میکند مثلا در Vlan 101 مقدار Bridge-ID برای Vlan 101 میشود ۳۲۷۶۸+۱۰۱
در خروجی دستور Show spanning-tree دو سطر اصلی دارد.
Root ID
که اطلاعات سوییچ ریشه را می نویسد.
Bridge-ID
اطلاعات خودش را می نویسد.
مثلا در شکل بالا چون مقدار MAC در دو سطر یکی است یعنی خود آن سوییچ Root Bridge است.
پس سوییچی که کمترین مقدار Bridge-ID را دارد به عنوان سوییچ ریشه یا Root Bridge انتخاب می شود.
بعد از انتخاب Root Bridge سوییچ ریشه هر دو ثانیه (Default Hello Time 2 s ) از اینترفیس های خود BPDU ارسال میکند تا دیگر سوییچ ها بر اساس آن بتوانند Role یا نقش پورت های خود را در بازی STP مشخص کنند و پایداری شبکه کاملا بستگی دارد به BPDU ای که Root Bridge ارسال میکند.
انواع Role ها در STP سنتی شامل
Designated Port
این پورت وظیفه ارسال BPDU در سوییچ ها را دارد و هر Segment حتما یک Designated Port دارد.
مثلا در مثال بالا که یک Segment داریم یکی از اینترفیس ها باید DP شود حالا کدام می شود؟! بستگی به موارد زیادی دارد.
نکته : تمامی پورت های سوییچ ریشه یا Root Bridge در حالت DP هستند و سوییچ ریشه هیچ پورت Block ای ندارد.
Root Port
پورتی است که کمترین هزینه دارد که سوییچ را به Root Bridge می رساند.
همیشه اولین کاری که سوییچ ها بعد از انتخاب Root Bridge می کنند با توجه به مقدار Cost Root Path داخل BPDU که از پورت های مختلف خود دریافت میکنند Root Port را انتخاب میکنند یعنی اینترفیسی را RP می کنند که کمترین Cost برای رسیدن به Root Bridge را داشته باشد.
مقدار Cost وقتی زیاد می شود که BPDU وارد اینترفیس می شود و کاملا با تکنولوژی اینترفیس رابطه مستقیم دارد.
مثلا اینترفیس ۱۰۰Mbps مقدار Cost آن ۱۹ و یا اینترفیس Gig مقدار Cost آن ۴ است.
نکته :
با تغییر Speed در اینترفیس روی مقدار Cost تاثیر می گذارید ولی تاثیری روی کارایی یا Rate اینترفیس ندارد یعنی اگر اینترفیس ۱۰۰Mbps یا همان Fastethernet دارید مقدر Cost آن ۱۹ است و اگر با دستور Speed در مد اینترفیس مقدار Speed را ۱۰ قرار دهید مقدار Cost آن ۱۰۰ می شود ولی اینترفیس همچنان با Rate صد مگابیت بر ثانیه ترافیک ها را ارسال و دریافت میکند.
نکته :
می توان به طور مستقیم Cost را روی اینترفیس با کامند زیر عوض کرد.
Switch(config)#Interfcace fastethernet 0/1
Switch(config-if)#Spanning-tree cost 15
نکته :
اگر گروهی از اینترفیس ها را با هم Etherchannel کنیم روی STP تاثیر دارد یعنی STP آن ها را به عنوان یک اینترفیس در نظر میگیرد و البته مقدار Cost آن کمتر میشود.
Non-DP یا Block Port
پورتی که Block است BPDU دریافت میکند ولی BPDU ارسال نمیکند.
نکته :
اگر BPDU سوییچ ریشه به دست من نرسد به علت قطعی یک لینک یا اختلال آن سوییچ ادعای Root Bridge ای می کند بعد از ۲۰ ثانیه (Default Max-Age 20 s ) چون احساس می کند برای Root Bridge اتفاقی افتاده.
نکته مهم
منظور از BPDU سوییچ ریشه چیست؟!
بسته BPDU را سوییچ ریشه ارسال میکند از روی اینترفیس های خود که نقش DP را دارند این بسته به سوییچ همسایه میرسد سوییچNon Root Bridge بسته BPDU را دریافت و Role اینترفیس های خود را بر اساس Cost مشخص میکند و حالا باید این بسته را به دیگر Non Root Bridge ها ارسال کند یعنی در مثال زیر Switch 3 و Switch 2 باید در ابتدا از هر دو اینترفیس خود BPDU دریافت کنند تا بتوانند Role اینترفیس های خود را مشخص کنند (زیرا اساس کار مقایسه است) برای این کار هر دو سوییچ ۲و۳ باید به یکدیگر BPDU ارسال کنند که اطلاعات Root Bridge و اطلاعات خود را در آن قرار دهند.( منظور از در ابتدا یعنی هنوز Role اینترفیس ها مشخص نشده زیرا بعد از مشخص شدن Role ها پورتی که بلاک شود BPDU ارسال نمیکند)
در این سناریو Switch1 به عنوان Root Bridge انتخاب شده است به دلیل Priority بهتر و تمامی اینترفیس های خود را DP میکند .Switch2 و Switch 3 اینترفیس Gig0/0 خود را Root Port میکنند زیرا وضعیت بهتری نسبت به Gig0/1 دارد و این نتیجه را بر اساس BPDU ای که از یکدیگر گرفته اند و اطلاعات Root Bridge در آن قرار داشت فهمیدند.و چون Switch 2 از Switch 1 مقدار Priority بهتری دارد Switch 3 اینترفیس Gig0/1 خود را Block می کند.و چون باید در هر Segment یک DP داشته باشیم Switch 2 اینترفیس Gig0/1 خود را DP میکند.
حالا بریم سر اون نکته ای که براش سناریو ترتیب دادیم.
الان در مثال بالا Switch1 از gig0/0 و gig 0/1 خود BPDU می فرستد که به شکل زیر است.
BPDU خروجی Switch 1 از اینترفیس Gig0/0
BPDU خروجیSwitch 1 از اینترفیس Gig0/1
همان طور که مشخص است فقط در قسمت هدر لایه دو یعنی Ethernet تفاوت دارند زیرا آدرس Source را از اینترفیسی که BPDU ارسال میشود برداشته میشود و آدرس مقصد برای تمامی بسته BPDU ثابت یعنی Multicast است.
نکته: سوییچ ها بسته های Multicast را Flood میکنند ولی یک سری از آدرس های مالتی کست را سوییچ ها باز میکنند ،مانند بسته های برادکست یعنی در جدول Mac-Table سوییچ مثلا جلوی آدرس مک مالتی کست نوشته CPU یعنی این بسته توسط CPU تحلیل شود مانند بسته های BPDU که باید سوییچ ها در لایه بالایی بسته را تحلیل کنند و نباید آن را Flood کند حتی اگر دقت کنید سوویچ ها بسته های CDP یا Cisco Discovery Protocol را دریافت و ارسال می کنند که سوییچ ها باید این بسه ها را بعد از باز کردن هدر Ethernet آن را در لایه بالایی که هدر CDP هست تحلیل کنند پس باید آدرس مک مقصد در هدر Ethernet را توسط CPU خود در Mac-Address Table یاد بگیرد تا Flood نکند.
بریم سر مطلب خودمون.
Switch2 و Switch 3 این بسته BPDU را تحویل می گیرند و بعد از باز کردن هدر Ethernet متوجه میشوند که باید بسته در لایه بالایی تحلیل شود.
می دانیم سوییچ ها از اینترفیس های DP خود BPDU ارسال می کنند پس Switch2 باید از اینترفیس gig0/1 خود به سمت Switch 3 بسته BPDU بفرستد ولی اینترفیس Gig0/1 از Switch 3 هیچ BPDU به سمت Switch 2 ارسال نمی کند زیرا اینترفیس های بلاک BPDU ارسال نمی کنند.
بریم BPDU ای که Switch 2 به Switch 3 از اینترفیس Gig0/1 خود ارسال می کند را باز کنیم.
اگر دقت کنید این BPDU با BPDU ای که Root Bridge ارسال میکرد روی اینترفیس Gig0/0 و Gig0/1 به غیر از هدر Ethernet در هدر STP نیز تفاوت دارد.
خب در هدر Ethernet همیشه آدرس مک Source همان آدرس مک اینترفیسی است که BPDU از آن ارسال میشود و آدرس مک گیرنده همیشه ثابت است خب طبیعی است که آدرس مک ارسال کننده Switch 1 و Switch 2 یکی نیست.
نکته اینجاست که در هدر STP دو قسمت مهم داریم Root Identifier و Bridge Identifier که در فیلد Root Identifier اطلاعات Root نوشته شده است و این قسمت در هر ۳ هدر بسته BPDU ای که ما Capture کردیم و نمایش دادیم یکسان است و اطلاعات Switch1 که Root Bridge است در آن قرار دارد و البته مقدار Root Path Cost تغییر میکند وابسته به تکنولوژی اینترفیسی که BPDU را دریافت می کند و چون دو بسته اول را Root Bridge ارسال کرده بود مقدارش صفر ولی BPDU ای که Switch 2 به Switch 3 ارسال کرد بر اساس Cost Gig0/0 که BPDU دریافت کرد از Root Bridge مقدار ۴ را اضافه کرد ۰+۴ و به Switch 3 اعلام کرد و چون Switch 3 از هر دو اینترفیس خود BPDU میگیرد مقدار Cost هر دو را مقایسه می کند و تصمیم میگیرد Gig0/0 خود را Root Port کند زیرا Cost کمتری روی آن دریافت کرده.
ولی فیلد بعدی Bridge Identifier اطلاعات سوییچی که BPDU را ارسال می کند نمایش داده میشود و به سوییچ همسایه اعلام می شود که صد در صد وابسته به سوییچی است که BPDU را ارسال می کند که سوییچ مقابل از اطلاعات این فیلد استفاده هایی میکند در انتخاب Root Port یا پورت Block.
پس حالا بهتر متوجه میشوید وقتی میگوییم Root Bridge بسته BPDU ارسال میکند یعنی چی.
به این منظور نیست دیگر سوییچ ها به یک دیگر BPDU نفرستند. چون در BPDU ای که Non Root Bridge ها به هم ارسال می کنند اطلاعات Root Bridge در هدر STP قرار دارد و سوییچ های Non Root Bridge بر اساس Cost ای که مبدا و معیار آن Root Bridge هست وضعیت خود را مشخص می کنند.
سناریو زیر را در نظر بگیرید ما در این سناریو SW-1 را مقدار Priority را صفر قرار دادیم تا Root Bridge شود.
سوییچ ۱و۲ بر اساس BPDU های که روی اینترفیس های خود دریافت کردند به این نتیجه رسیدند که پورت Fa0/1 خود را Root Port کنند با Cost 19 زیرا وقتی BPDU از ریشه تولید میشود و از هر دو دست خود ارسال میکند Cost اولیه را صفر قرار می دهد ومثلا در SW-2 از دو اینترفیس خود BPDU را میگیرد وقتی BPDU از Fa0/1 وارد میشود مقدار Cost میشود ۰+۱۹ و روی اینترفیس Fa0/2 ۰+۱۹+۱۹ پس Fa 0/1 وضع بهتری دارد بنابرین Root Port میشود.
نکته :
وقتی SW-3 می خواهد BPDU را به SW-2 ارسال کند از روی پورت Fa0/2 هدر لایه دو را عوض میکند و با SRC mac آدرس فیزیکی Fa0/2 و Dst Mac را آدرس مالتی کست Spanning-tree می گذارد و در هدر STP مقدار Cost را مقدار هزینه خود تا ریشه را می گذارد یعنی ۱۹ و وقتی SW-3 بسته را دریافت میکند بر اساس Fa0/2 نوزده واحد واحد به Cost اضافه میکند و با BPDU که روی دست Fa0/1 دریافت کرده مقایسه میکند.
خب حالا SW-2 و SW-3 پورت Root خود را به دست آوردند و تصمیم گرفتند که پورت Fa0/2 از SW-2 را Block کنند و Loop را از بین ببرند.
سوال
چرا در Segment X سوییچ ۲ پورت خود را Block کرد چرا سوییچ ۳ پورت Fa0/2 خود را Block نکرد؟!
اینجا دعوا میشود بین دو سوییچ که پورت خود را Block نکنند.
کی برنده این دعواست؟!
- اونی که Cost to Root Bridge کمتری دارد.که در این سناریو مقدار هزینه برای رسیدن به ریشه در هر دو سوییچ ۱۹ است.
- اونی که Bridge-ID کمتری دارد.در این سناریو مقدار Priority هر دو سوییچ ۳۲۷۶۸ است ولی آدرس Mac سوییچ SW-3 کمتر از SW-2 است ۰۰۰۴<0007 پس سوییچ SW-2 پورت خود را Block و چون هز Segment نیاز به DP دارد پورت Fa0/2 در SW-3 نقش DP میگیرد.
مثلا در سناریو زیر با اینکه Bridge-ID سوییچ SW-3 بهتر از SW-2 است ولی پورت Fa0/1 خود را Block کرده زیرا هزینه SW-3 برای رسیدن به Root Bridge برابر با ۱۹ است ولی SW-2 با توجه به این که Uplink از نوع Gigaethernet دارد هزینه ۴ دارد برای رسیده به Root Bridge به همین دلیل SW-3 باید اینترفیس خود را Block کند.
سوال
آیا SW-2 و SW-3 هر در دو BPDU میگیرند؟!
در آخرین سناریو ما چون پورت Fa0/1 از SW-3 بلاک است و پورت Block هیچ BPDU ارسال نمی کند پس SW-2 فقط از اینترفیس Gig0/1 خود BPDU دریافت میکند ولی SW-3 از هر دو اینترفیس خود BPDU میگیرد.
سناریو زیر را در نظر بگیرید:
چرا SW-4 پورت Fa0/2 خود را Root Port کرده است ؟!!
چرا SW-5 پورت Fa0/1 خود را Root Port کرده است؟!!
چرا در Segment X سوییچ SW-4 پورت خود را Block کرده؟!
چرا در Segment Y سوییچ SW-5 پورت خود را Block کرده؟!
نکته :
همیشه در سناریو های بزرگ ابتدا در هر سوییج دنبال Root Port بگردید زیرا در STP اگر سوییچ حتی یک پورت داشته باشد آن پورت Root Port است.
چرا SW-4 پورت Fa0/2 خود را Root Port کرده است ؟!!
جواب :
این سوییچ مقدار Cost ای که از دست های Fa0/1 و Fa0/2 دریافت میکند برای رسیدن به Root Bridge برابر با ۳۸ است .
دوباره دعوا شده ولی اینبار بین دو سوییچ نه ! بین دو پورت از یک سوییچ برای Root Port شدن
برنده دعوا کیست؟!
۱-Cost . خب مقدار Cost در هر دو پورت ۳۸ است اصلا چون برابر بود دعوا شده است 😀
۲-Sender Bridge-ID
BPDU ای که روی دست Fa0/1 و Fa0/2 دریافت میکند سوییچ SW-4 یکی نیست، روی دست Fa0/1 سوییچ SW-2 و روی دست Fa0/2 سوییچ SW-3 بسته BPDU دریافت میکند.
یعنی Sender BPDU روی Fa0/1 سوییچ SW-2 است ولی Sender BPDU روی Fa0/2 سوییچ SW-3 است.
حالا SW-4 نگاه میکند به Sender Bridge-ID ها که مشخص است Priority سوییچ SW-2 بهتر از SW-3 است پس SW-4 پورت Fa0/1 خود را Root Port میکند.
چرا SW-5 پورت Fa0/1 خود را Root Port کرده است؟!!
جواب
در این سوییچ هم دعوا شده بین دو پورت Fa0/1 و Fa0/2
برنده دعوا کیست؟!
۱-Cost . خب مقدار Cost در هر دو پورت ۵۷ است ، پس این مورد کمکی به ما نکرد.
۲-Sender Bridge-ID
روی هر دو پورت Sender BPDU سوییچ SW-4 است پس این مورد هم کمکی به ما نمیکند تا مقایسه کنیم.
۳-Sender Port-Priority
هر پورت در STP دارای یک Priority است که یک عددی بین ۰ تا ۲۲۴ است که می تواند ضریب ۱۶ یا ۳۲ باشد و هر چه کمتر باشد بهتر است.
مقدار پیش فرض آن ۱۲۸ است.
و هر سوییچ در هدر STP خود به سوییچ دیگر ارسال میکند.دقت داشته باشید که Port-Priority در یک Segment معنی دارد.
یعنی اگر ما روی Fa0/4 از SW-4 مقدار Port-Priority را به ۶۴ تغییر دهیم با دستور زیر، در SW-5 اینترفیس Fa0/2 وضعیت بهتری نسبت به Fa0/1 دارد و Root Port می شود.
Switch(config-if)#spanning-tree vlan 1 port-priority 64
در سناریو ما مقدار Port-Priority را در SW-4 تغییر نداده ایم پس این مورد نیز کمکی به ما نمی کند.
۴-Interface Num
صد در صد تو مورد چهارم سوییچ می تواند Root Port را مشخص کند.
بین اینترفیس Fa0/1 و Fa0/2 شماره یا ID کدام اینترفیس کمتر است؟ بله اینترفیس Fa0/1
و چون در STP مقدار کمتر بهتر است مانند Priority پس اینترفیس Fa0/1 را Root Port میکند.
بریم سر سوال بعدی.
چرا در Segment X سوییچ SW-4 پورت خود را Block کرده؟!
زیرا Cost to Root Bridge در SW-3 مقدارش کمتر است.
چرا در Segment Y سوییچ SW-5 پورت خود را Block کرده؟!
زیرا Cost to Root Bridge در SW-4 مقدارش کمتر است.
خب به پایان قسمت دوم از مقاله STP رسیدیم، سعی دارم در قسمت بعدی کمی در مورد Time ها در STP سنتی و همچنین در مورد TCN یا Topology Change Notification صحبت کنم.
با ITNovin همراه باشید.