STP، RSTP و MSTP: جلوگیری از loop در شبکه
Spanning Tree چطور جلوی loop و طوفان broadcast را میگیرد، انتخاب root bridge، نقش پورتها، تفاوت STP و RSTP و MSTP، و تنظیم درست آن روی سوییچهای Cisco و میکروتیک.
در این صفحه
فریم اترنت، برخلاف بستهی IP، هیچ شمارندهای ندارد که بعد از چند گام از بین برود. اگر بین سوییچها مسیر حلقوی (loop) وجود داشته باشد، یک broadcast تا ابد دور میزند، تکثیر میشود و در چند ثانیه کل شبکه را از کار میاندازد. Spanning Tree با بستن خودکار پورتهای اضافه، از شبکهی حلقوی یک درخت بدون loop میسازد و وقتی یک لینک قطع شود، پورت بسته را باز میکند.
Spanning Tree چطور کار میکند
سوییچها با فرستادن پیامهای BPDU سه تصمیم میگیرند:
- انتخاب root bridge: سوییچی که کمترین Bridge ID را دارد root میشود. Bridge ID از اولویت (پیش فرض 32768) و آدرس MAC ساخته میشود؛ اگر اولویتها برابر باشند، MAC کوچکتر برنده است.
- انتخاب root port: هر سوییچ دیگر، پورتی را که کمترین هزینه تا root دارد به عنوان root port انتخاب میکند.
- انتخاب designated port: روی هر لینک، یکی از دو طرف designated میشود و ترافیک را عبور میدهد. هر پورتی که نه root است و نه designated، بسته میشود.
هزینهی هر لینک به سرعتش بستگی دارد:
| سرعت | هزینه (روش کوتاه، 802.1D) | هزینه (روش بلند، 802.1t) |
|---|---|---|
| 100 Mbps | 19 | 200,000 |
| 1 Gbps | 4 | 20,000 |
| 10 Gbps | 2 | 2,000 |
STP، RSTP و MSTP
| STP (802.1D) | RSTP (802.1w) | MSTP (802.1s) | |
|---|---|---|---|
| زمان همگرایی | ۳۰ تا ۵۰ ثانیه | معمولاً کمتر از چند ثانیه | مثل RSTP |
| وضعیت پورتها | blocking، listening، learning، forwarding | discarding، learning، forwarding | مثل RSTP |
| درخت | یکی برای همهی VLANها | یکی برای همهی VLANها | چند instance، هر کدام برای گروهی از VLANها |
STP قدیمی برای هر تغییر، پورت را از listening و learning عبور میدهد و هر کدام ۱۵ ثانیه طول میکشد. RSTP با دست دهی مستقیم بین سوییچها (proposal و agreement) همین کار را تقریباً فوری انجام میدهد. امروز دلیلی برای استفاده از STP قدیمی نیست.
MSTP وقتی مفید است که بخواهید VLANهای مختلف از مسیرهای مختلف عبور کنند تا همهی لینکها استفاده شوند. Cisco به جای آن نسخهی اختصاصی Rapid PVST+ را هم دارد که برای هر VLAN یک درخت RSTP جدا میسازد. برای استفاده همزمان از چند لینک موازی بین دو سوییچ، LACP و EtherChannel را ببینید.
تنظیم روی Cisco
spanning-tree mode rapid-pvst
spanning-tree vlan 1-4094 priority 4096روی سوییچ core دوم، اولویت را 8192 بگذارید تا در صورت خرابی core اول، root شود.
پورتهایی که به کامپیوتر، پرینتر یا سرور وصلاند، edge هستند و نباید منتظر spanning tree بمانند:
interface range GigabitEthernet1/0/1 - 46
switchport mode access
spanning-tree portfast
spanning-tree bpduguard enablebpduguard پورت را به محض دریافت BPDU خاموش میکند (وضعیت err-disabled). یعنی اگر کسی زیر میزش یک سوییچ کوچک وصل کند و loop بسازد، فقط پورت خودش قطع میشود، نه کل شبکه.
روی لینکهایی از core که به سوییچهای لبه میروند، root guard را روشن کنید تا هیچ سوییچی از سمت لبه نتواند خودش را root کند:
interface TenGigabitEthernet1/1/1
spanning-tree guard rootبررسی:
show spanning-tree root
show spanning-tree vlan 10
show spanning-tree summaryتنظیم روی میکروتیک
bridge در RouterOS به صورت پیش فرض RSTP دارد. اولویت را پایین بیاورید تا سوییچ اصلی root شود، و پورتهای کاربر را edge کنید:
/interface bridge set [find name=bridge1] protocol-mode=rstp priority=0x1000
/interface bridge port set [find interface=ether5] edge=yes bpdu-guard=yesاولویت در میکروتیک به صورت hex وارد میشود و مقدار پیش فرض آن 0x8000 (همان 32768) است. ساخت bridge و VLAN در RouterOS را در VLAN در میکروتیک با bridge VLAN filtering ببینید.
عیب یابی
شبکه چند ثانیه یک بار قطع و وصل میشود. احتمالاً تغییر توپولوژی مکرر دارید؛ یک پورت edge که تنظیم نشده، با هر روشن و خاموش شدن کامپیوتر یک topology change میفرستد و جدول MAC سوییچها پاک میشود. در Cisco با show spanning-tree detail | include ieee|occurr|from ببینید تغییر از کدام پورت میآید.
root سوییچ اشتباهی است. show spanning-tree root را روی چند سوییچ بگیرید. اگر root همان سوییچی نیست که انتظار دارید، اولویت آن تنظیم نشده یا سوییچی با اولویت پایینتر به شبکه اضافه شده است.
پورتی err-disabled شده. اگر علت bpduguard است، یعنی به آن پورت سوییچ وصل شده. دستگاه را پیدا کنید، بعد پورت را با shutdown و no shutdown برگردانید.
منابع
- Spanning Tree Protocol (Wikipedia) en.wikipedia.org
- MikroTik Documentation — Spanning Tree Protocol help.mikrotik.com