شبکه / سوییچینگ

STP، RSTP و MSTP: جلوگیری از loop در شبکه

Spanning Tree چطور جلوی loop و طوفان broadcast را می‌گیرد، انتخاب root bridge، نقش پورت‌ها، تفاوت STP و RSTP و MSTP، و تنظیم درست آن روی سوییچ‌های Cisco و میکروتیک.

نوشته‌ی تیم پیکوگاید آخرین بازبینی فنی: ۴ دقیقه مطالعه
در این صفحه
  1. Spanning Tree چطور کار می‌کند
  2. STP، RSTP و MSTP
  3. تنظیم روی Cisco
  4. تنظیم روی میکروتیک
  5. عیب یابی

فریم اترنت، برخلاف بسته‌ی IP، هیچ شمارنده‌ای ندارد که بعد از چند گام از بین برود. اگر بین سوییچ‌ها مسیر حلقوی (loop) وجود داشته باشد، یک broadcast تا ابد دور می‌زند، تکثیر می‌شود و در چند ثانیه کل شبکه را از کار می‌اندازد. Spanning Tree با بستن خودکار پورت‌های اضافه، از شبکه‌ی حلقوی یک درخت بدون loop می‌سازد و وقتی یک لینک قطع شود، پورت بسته را باز می‌کند.

Spanning Tree چطور کار می‌کند

سوییچ‌ها با فرستادن پیام‌های BPDU سه تصمیم می‌گیرند:

  1. انتخاب root bridge: سوییچی که کمترین Bridge ID را دارد root می‌شود. Bridge ID از اولویت (پیش فرض 32768) و آدرس MAC ساخته می‌شود؛ اگر اولویت‌ها برابر باشند، MAC کوچک‌تر برنده است.
  2. انتخاب root port: هر سوییچ دیگر، پورتی را که کمترین هزینه تا root دارد به عنوان root port انتخاب می‌کند.
  3. انتخاب 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 enable

bpduguard پورت را به محض دریافت 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 برگردانید.

منابع

  1. Spanning Tree Protocol (Wikipedia) en.wikipedia.org
  2. MikroTik Documentation — Spanning Tree Protocol help.mikrotik.com