در مقاله قبلی فهمیدیم 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  همراه باشید.

 

 

Leave a Comment