معرفی پروتکل STP – Spanning Tree Protocol
Spanning Tree Protocol یا STP چیست؟
در آغاز این بحث باید به مسئله افزونگی بپردازیم. در بسیاری از شرایط نیاز است تا بین برخی شرایط اقداماتی انجام شود تا در دسترس بودن سرویس ها را افزایش دهیم.
اما مشکل این مسئله این است که بدون در نظر گرفتن ویژگی های خاص مشکلاتی درون شبکه ایجاد می شوند که به مجموع آنها Switching Loop گفته می شوند. در زیر موارد مشخص شده به عنوان Switching Loop آورده شده اند:
- Broadcast Storms
- MAC Table Instability
- Multiple Frame Transmission
راهکار حل مشکلات ذکر شده در بالا پروتکل Spanning Tree می باشد.
مشخصات این پروتکل:
- استاندارد IEEE 802.1D می باشد.
- یک پروتکل لایه ۲ می باشد.
- با غیرفعال ساختن لینک ها از Switching Loop جلوگیری می کند.
نحوه فعالیت Spanning Protocol :
این پروتکل به این صورت کار می کند که ابتدا از بین تمام سوییچ ها اقدام به انتخاب یک Root Bridge می نماید. قدم بعدی اقدام به ایجاد Designated Port می باشد که با تبدیل تمام پورت های Root Bridged به این نوع پورت ها آغاز می شود. در مرحله سوم بر روی سوییچ هایی غیر از Root Bridge اقدام به انتخاب تنها یک Root Port می نماید، این پورت در واقع نزدیکترین پورت به Root Bridge بر روی آن سوییچ می باشد. در مرحله چهارم اقدام به Segment بندی می نماید. در این مرحله Collision Domain ها را به عنوان Segment درنظر می گیرد و در هر Segment دو عدد سوییچ وجود دارد.
از بین این دو سوییچ در یک Segment یک سوییچ به Root Bridge نزدیکتر می باشد، این سوییچ را Designated Bridge می نامند و پورتی از این سوییچ که به سوییچ دیگر متصل شده است را Designated Port می نامند. در مرحله آخر تمام پورتهایی که به عنوان DP و RP انتخاب نشوند به حالت Block تبدیل می شوند.
معیارهای STP برای انتخاب Root Bridge :
پروتکل STP با ایجاد شرایط آگاهی سوییچ ها از یکدیگر اقدام به جلوگیری از Loop می نماید. این آگاهی با ارسال بسته های BPDU یا Bridge Protocol Data Units بین سوییچ ها انجام می شود. این بسته ها ۲ مدل می باشند:
۱- Hello BPDU Configuration BPDU
2- TCN
در Hello BPDU یک ویژگی به نام Bridge ID وجود دارد. در STP هر سوییچ برای خود دارای یک Identifier می باشد. این مقدار تشکیل شده از ۲ ویژگی STP Priority و Switch MAC Address می باشد.
STP Priority یک مقدار عددی بین ۰ تا ۶۵۵۳۵ می باشد و مقدار پیش فرض آن ۳۲۷۶۸ می باشد و در صورت عدم تغییر این مقدار، برای تمام سوییچ ها این مقدار در نظر گرفته می شود.
BPDU که مقدار Bridge ID کمتری داشته باشد، به عنوان BPDU بهتر شناخته می شود لذا در صورتیکه برای تمام سوییچ ها مقدار پیش فرض STP Priority درنظر گرفته شود، تساوی شکن بین سوییچ ها MAC Address سوئیچ ها خواهد بود و کمترین مقدار آدرس MAC یک سوئیچ باعث تعریف آن به عنوان Root Bridge می شود.
در هر بسته BPDU اطلاعات زیر ارسال می شود:
- Root Bridge
- Sender Bridge
- Cost
نکته: این بسته ها هر ۲ ثانیه یکبار ارسال می شوند و همچنین باید بدانید که انتخاب یک Root Bridge یک انتخاب رقابتی است و هر لحظه امکان تغییر آن وجود دارد.
نحوه تعیین Cost در BPDU :
نکته: در نحوه انتخاب DP و RP ها ارسال بسته های BPDU در بین سوییچ ها بعد از گذر از هر سوییچ در بخش Cost با مقدار Cost قبلی خود جمع شده و به سوییچ بعدی ارسال می شود. این کار برای این است که به طور مثال یک سوییچ بداند که برای رسیدن به Root Bridge از چه نوع اینترفیس هایی و با چه مقدار Cost باید عبور کند تا در نهایت بتواند بهترین مسیر را براساس کمترین مقدار Cost برای خود انتخاب نماید.
نکته: ممکن است در زمان هایی مقدار Cost ها باهم برابر باشند، تساوی شکن ها در این حالت دو مورد زیر می باشند:
- ۱st: Sender Bridge ID
- 2nd: Port ID
در مورد اول مقدار کمتر در Bridge ID برنده می باشد و در مورد دوم شماره پورت کوچکتر برنده می باشد.
آشنایی با Topology Change Notification یا TCN :
این بسته زمانی ارسال می شود که یک تغییر Direct در شبکه رخ می دهد. این بسته یک BPDU از نوع TCN می باشد که از طریق Root Port به Root Bridge ارسال می شود. هر سوییچی که یک TCN بر روی Designated Port خود دریافت کند موظف به ارسال آن از طریق Root Port خود می باشد تا در نهایت به Root Bridge برسد.
زمانیکه TCN به دست Root Bridge برسد، یک TCN Flag به بسته بعدی BPDU ارسالی از Root Bridge الصاق می شود تا به کل شبکه ارسال شود و همه از این تغییر آگاه شوند.
هر سوییچ دارای یک MAC Table Age Time به مدت ۳۰۰ ثانیه می باشد که در صورت فعال نبودن یک MAC address ، سوییچ آنرا به مدت ۳۰۰ ثانیه درون جدول خود نگهداری می کند. زمانیکه یک سوییچ بسته BPDU با TCN Flag دریافت می کند، این مدت زمان ۳۰۰ ثانیه را به ۱۵ ثانیه تغییر می دهد تا بتواند Idle Mac Address ها را شناسایی و حذف نماید.
انواع مختلف STP ها:
IEEE 802.1D CST (Common Spanning Tree)
Cisco PVST (Per VLAN STP)
Cisco PVST+
IEEE 802.1W (RSTP)
Cisco RPVST+
IEEE 802.1S (MST)
نکته: در CST بالاترین مقدار زمان همگرایی در پروتکل وجود دارد (۳۰ ثانیه) و همچنین استفاده همزمان از لینک ها در این مدل امکان پذیر نمی باشد.
نکته: در مدل PVST امکان استفاده همزمان لینک ها براساس ترافیک VLAN ها وجود دارد اما با CST سازگار نمی باشد و همچنین با Encapsulation dot1q کار نمی کند.
نکته: PVST+ با Encapsulation dot1q سازگاری دارد اما زمان همگرایی همچنان بالاست.
نکته: در RSTP زمان همگرایی تا حد امکان پایین آمده است.
نکته: بهترین حالت در STP می تواند RPVST Plus باشد اما در این حالت به تعداد VLAN ها Instance ایجاد می شود و در صورتیکه تعداد VLAN ها زیاد باشند، کارآیی شبکه پایین می آید.
نکته: در MST تعداد Instance ها براساس تعداد توپولوژی ها ایجاد می شوند، در نتیجه در این مورد کارآیی بهتری وجود دارد و به دلیل استاندارد بودن این حالت، با تمام حالت های دیگر سازگاری دارد.
دستورات Show در STP:
دستور | توضیحات |
---|---|
SW#show spanning-tree | این دستور اطلاعات کلی رو برای ما نمایش می دهد |
SW#show spanning-tree active | فقط اطلاعات STP های فعال را نمایش می دهد |
SW#show spanning-tree bridge | این دستور اطلاعات bridge ID ، تایمر ها و پروتکل های محلی را تمایش می دهد |
SW#show spanning-tree brief | با این دستور می توانیم خلاصه ای ازتنظیمات Spanning Tree Protocol STP را مشاهده کنیم |
SW#show spanning-tree detail | این دستور اطلاعات جزئی تری درباره Spanning Tree Protocol STP به نمایش می دهد |
SW#show spanning-tree interface | اطلاعات Spanning Tree Protocol STP بر روی یک اینترفیس را نمایش می دهد |
SW#show spanning-tree mst | این دستور اطلاعات Multiple Spanning Tree MST را به ما نمایش می دهد |
SW#show spanning-tree root | با این دستور میتواینم اطلاعات و دستورات root bridge را مشاهده کنیم |
SW#show spanning-tree summary | این دستور اطلاعات کلی درباره Spanning Tree Protocol STP به نمایش می دهد |
SW#show spanning-tree vlan | این دستور اطلاعات یک Vlan خاص رو برای ما نمایش می دهد |
SW#show spanning-tree blockedports | با این دستور میتوانیم اطلاعاتی درباره پورت های بلاک شده بدست آوریم |
دستوراتی عملیاتی که میتوان در STP استفاده کرد:
دستور | توضیحات |
---|---|
Switch(config)#spanning-tree vlan 200 priority | با این دستور میتوان مشخص کرد یک Vlan با priority بالاتر یا کمتری در یک سوئیچ مورد استفاده قرار بگیرد. عدد priority از ۰ تا ۶۱۴۴۰ می باشد و با پرش های ۴۰۹۶ بالا می رود. |
Switch(config)#spanning-tree vlan 200 root primary | با این دستور سوئیچ را به عنوان روت اصلی برای vlan مورد نظر انتخاب میکند |
Switch(config)#spanning-tree vlan 200 root secondary | با این دستور سوئیچ را به عنوان روت دوم (جای گزین) برای vlan مورد نظر انتخاب میکند |
Switch(config-if)#spanning-tree vlan 200 port-priority | با دستور port-priority را تغییر می دهیم |
Switch(config-if)#spanning-tree vlan 200 root priority | با دستور root priority را تغییر می دهیم |
Switch(config-if)#spanning-tree vlan 200 cost 250 | با دستور cost را تغییر می دهیم |
Switch(config)#spanning-tree mode rapid-pvst | با این دستور Rapid PVST+ را فعال میکنیم |
Switch(config-if)#spanning-tree bpduguard enable | یک قابلیت امنیتی است که به ما این امکان را می دهد که روی پورت هایی که انتخاب کرده ایم دیگر اجازه ارسال بسته های BPDU وجود نداشته باشد. با فعال کردن این دستور در صورتی که از آن پورت بسته BPDU ارسال شود آن پورت درحالت error-disabled قرار گرده و پورت مورد نظر غیرفعال می شود. |
دستور PortFast
این حالت فقط روی سوئیچ های لایه access شبکه کاربرد دارد که به PC ها و Workstation ها متصل هستند. انتخاب این دستور جهت بالابردن Convergence شبکه بسیار حائز اهمیت میباشد زیرا دیگر با وصل شدن یک pc به سوئیچ کل توپولوژی شبکه دستخوش تغییر نمیشود. به صورت پیش فرض PortFast روی تمامی پورتها غیر فعال میباشد. برای تبدیل کردن تمامی پورت ها به حالت portfast از دستور زیر استفاده میکنیم :
Switch(config)# spanning-tree portfast default
برای غیر فعال کردن portfast برای یک پورت خاص از دستور زیر استفاده میکنیم :
Switch(config-if)# [ no ] spanning-tree portfast
اگر پورت متصل به PC بر روی سوئیچ portfast نباشد زمان ۵۰ ثانیه طول میکشد تا pc به شبکه متصل شود ( ۳۰ ثانیه برای listening و learning ، همچنین ۲۰ ثانیه برای etherchannel ).
حتما دقت کنید که portfast روی پورت هایی که به سوئیچ و یا هاب متصل هستند غیر فعال گردد.
نمایش وضعیت روی پورت portfast :
Switch# show spanning-tree interface type member/module/number portfast
درصورتی که یک پورت شما Trunk است می توانید از spanning-tree portfast trunk استفاده کنید، فقط توجه داشته باشید که spanning-tree portfast trunk را نباید در جایی استفاده کنید که دو طرف آن سوئیچ قرار دارد زیرا ممکن است Loop ایجاد شود. spanning-tree portfast trunk را معمولا زمانی استفاده میکنیم که برای مثال یک طرف سوئیچ و طرف دیگر اکسس پوینت یا دیوایسی به غیر از سوئیچ داریم.
UplinkFast چیست؟
ویژگی که سرعت تبادل اطلاعات STP را در زمانی که ارتباط مستقیم یک سوئیچ با سوئیچ بالادست قطع می شود را افزایش می دهد. در این حالت سوئیچ پورت Backup را برای Root Port تشخیص می دهد و زمانی که Root Port قطع شود پورت Backup بدون قرار گرفتن در وضعیت Learning و Listening جایگزین Root Port می شود. برای فعال کردن این ویژگی از دستور زیر استفاده می کنیم:
Switch(config)#spanning-tree uplinkfast
نکته: uplinkfast را نباید روی Root Bridge فعال کنیم.
BackboneFast چیست؟
ویژگی که سرعت تبادل اطلاعات STP را در زمانی که ارتباط سوئیچ به سمت Root Bridge در جایی که مستقیم به سوئیچ وصل نیست قطع شود را افزایش می دهد. برای فعال کردن این ویژگی از دستور زیر استفاده می کنیم:
Switch(config)#spanning-tree backbonefast
منبع مقاله: سایت https://nextadmin.net/