STP چیست ؟

هنگامی‌که در شبکه چندین سوییچ را به هم وصل کنید، ممکن است شبکه کند و سپس مختل شود. علت این اختلال به وجود آمدن حلقه (Loop) در شبکه است. به‌صورت ساده‌تر هر سوییچ به سوییچ‌های متصل به خود، اطلاعات دریافتی خود را ارسال می‌کند و سوییچ‌های دیگر نیز اطلاعات دریافتی را برای همه سوییچ‌های متصل دیگر ارسال می‌کنند و این داستان تا بینهایت ادامه دارد. در حقیقت اطلاعات دریافتی سوییچ‌ها مانند طوفانی با سرعت زیاد بین یکدیگر مبادله می‌شود تا شبکه درنهایت مختل شده و از کار میافتد.

پروتکل STP به منظور جلوگیری از ایجاد Loop های لایه 2 ای به دنیای شبکه معرفی شد (طوفان Broadcast). پروتکل STP از مکانیزم های هوشمندانه برای جلوگیری از ایجاد Loop از طریق مسدود کردن لینک‌های پشتیبان استفاده می‌کند.

اگر STP وجود نداشت، طوفان Broadcast رخ می‌دهد، مخصوصاً در توپولوژی زیر:

فرض می‌کنیم که سوییچ‌ها هنوز Mac Table های خود را به‌روز نکرده‌اند و PC-A با IP 192.168.1.10 می‌خواهد برای PC-B با IP 192.168.1.11 یک frame ارسال کند.

در ابتدا، PC-A باید مک آدرس PC-B را پیدا کند. به کمک یک ARP request که به مقصد مک آدرس ffff.ffff.ffff (آدرس broadcast لایه 2) ارسال می‌شود این نیاز برطرف می‌شود. در اینجا SW1 بسته را دریافت کرده و روی هر دو پورت خود برای SW2 و SW3 ارسال می‌کند. SW2 برای SW3 می‌فرستند، حالا SW3 این frame را دو بار برای PC-B ارسال می‌کند و برای SW1 و SW2 هم ارسال می‌کند. در نتیجه این اتفاق یک Loop تشکیل‌شده و ازآنجایی‌که frame هیچ TTL ای( مدت زمان زنده بودن داده) ندارد این Loop هیچ‌وقت تمام نمی‌شود.

چگونه STP مانع از ایجاد Loop می‌شود؟

این پروتکل سعی می‌کند تا از ارسال ترافیک روی لینک‌های پشتیبان جلوگیری کند. مثلاً لینک بین SW2 و SW3 می‌تواند به‌عنوان یک لینک جایگزین در نظر گرفته شود، چراکه اگر این لینک وجود نداشته باشد بازهم این دو سوییچ با یکدیگر در ارتباط هستند. بااین‌حال، وجود تجهیزات جایگزین برای مسئولین شبکه یکی از دوست داشتنی ترین امکانات است، چراکه درصورتی‌که یکی از لینک‌ها قطع شود به‌عنوان یک‌راه جایگزین فوق‌العاده عمل خواهد کرد؛ بنابراین ایده آل است که لینک‌های جایگزین وجود داشته باشند.

انتخاب Root Bridge

قبل از اینکه STP تصمیم بگیرد کدام لینک باید قطع شود، چندین مرحله را پشت سر می‌گذارد. اولین مرحله انتخاب Root Bridge است. از میان سوییچ‌ها یکی به‌عنوان Root Bridge انتخاب می‌شود. هیچ‌کدام از پورت‌های Root Bridge مسدود نمی‌شوند بنابراین هیچ لینکی را از دست نخواهد داد. برای این‌که این فرآیند اتفاق بیفتد همه سوییچ‌ها به‌صورت زیر عمل می‌کنند: همه آن‌ها به‌گونه‌ای عمل می‌کنند که انگار آنها Root Bridge هستند و بسته‌های اطلاعاتی Root Bridge یا همان Bridge Protocol Data Unit) BPDU) را هر دو ثانیه یک‌بار ارسال می‌کنند و خود را به‌عنوان Root Bridge معرفی می‌کنند. پس چگونه برنده و بازنده مشخص می‌شود؟
عامل تعیین‌کننده Bridge ID یا همان BID است که شامل 2 بایت تعیین اولویت و 6 بایت مک آدرس هر سوییچ است.

در بالا یک تصویر برای توضیح بهتر این مفهوم وجود دارد. فیلد اولویت دارای مقدار پیش‌فرض 32768 است. (تا زمانی که عمداً به مقدار کمتری تغییر داده نشود، ثابت خواهد بود). بعدازآن فیلد مک آدرس سوییچ وجود دارد. سوییچ با کمترین BID برنده خواهد بود. این بدان معنی است که در صورتکی که مقادیر پیش‌فرض تغییر داده نشود سوییچی که مک آدرس کوچک‌تری داشته باشد برنده خواهد شد.

در مثال ما، همه سوییچ‌ها با فرض اینکه Root Brdige هستند شروع به ارسال BPDU می‌کنند. زمانی که SW3 یک فریم از SW1 دریافت می‌کند و می‌بیند که سوییچ اول دارای BID کمتری است، درنتیجه تسلیم‌شده و از تلاش کردن برای برنده شدن در این رقابت دست برمی‌دارد. همین اتفاق برای SW2 هم تکرار می‌شود؛ بنابراین SW1 برنده‌شده و به‌عنوان Root Bridge شبکه کوچک ما انتخاب می‌شود.

برای تعیین اینکه کدام پورت مسدود می‌شود باید برای سوییچ‌های Port Type تعریف کنیم.

محاسبه Port Role

سه Port Role وجود دارد که در این مقاله به توضیح آن‌ها خواهیم پرداخت:

  • Root Port: این پورت بهترین مسیر برای رسیدن به Root Brdige است، نیازی به توضیح نیست که Root Brdige بهترین مسیر برای رسیدن به خودش را دارد بنابراین هیچ Root Port ای ندارد. مابقی سوییچ‌ها هرکدام یک Root Port دارند.
  • Designated Ports: ازآنجایی‌که هیچ‌کدام از پورت‌های Root Bridge، Root Port نیستند، تمام پورت‌ها به‌عنوان designated شناسایی می‌شوند. این نوع پورت منحصر به Root Switch نیست، در مابقی سوییچ‌ها، همه پورت‌ها به‌غیراز Root Port درواقع designated port هستند.
  • Blocking Port: در تئوری درواقع این‌یک state نیست بلکه فقدان یک state است. در حالتی که یک پورت نه Root و نه Designated باشد آن پورت در حالت blocking قرار می‌گیرد.

برای فهم بهتر اینکه چگونه نقش یک پورت تعیین می‌شود باید میزان RPC هر پورت روی سوییچ‌های غیر Root را بدانیم. هر پورت سوییچ که کمترین میزان RPC را داشته باشد به‌عنوان Root Port تعیین‌شده و بقیه پورت‌های Designated Port خواهند بود. نحوه محاسبه RPC چگونه است؟ کابل‌ها در انواع مختلف و سرعت‌ها متنوع وجود دارند؛ اما ما روی 4 نوع کابل که بیشتر در شبکه استفاده می‌شود تمرکز می‌کنیم.

در جدول بالا میزان هزینه پورت با توجه به‌سرعت کابل‌ها مشخص‌شده است. این نکته حائز اهمیت است که اگر شما در حال استفاده از یک کابل شبکه گیگا بیتی هستند، STP هزینه را بر اساس سرعت واقعی در حال استفاده محاسبه می‌کند. اگر یک پورت گیگا بیتی بعد از negotiate با سرعت 100 مگابیت در ثانیه کار کند، هزینه آن 19 شناسایی خواهد شد نه 4.

در اینجا نموداری برای معرفی مقادیر PRC داریم. می‌بینیم که در SW3 برای پورت F0/2 مقدار PRC برابر با 19 است. چراکه لینک بین SW1 و SW2 فست اترنت است و فرض می‌کنیم که با حداکثر سرعت خود در حال کار کردن است. هزینه پورت f0/1 بیشتر است چراکه از دو پورت فست اترنت تشکیل‌شده است یعنی 19+19=38. سوییچ پورتی که مقدار PRC کمتری دارد را انتخاب می‌کند درنتیجه در سوییچ SW3 پورت f0/2 به‌عنوان Root Port انتخاب می‌شود.

با طریقه انتخاب Root Port آشنا شدیم حالا باید ببینیم Designated و Blocking پورت‌ها چگونه تعیین می‌شوند.

در سوییچ SW1 همه پورت‌ها به‌عنوان Designated شناخته می‌شوند و Blocking پورتی وجود ندارد. تنها چیزی که باقی می‌ماند تعیین تکلیف پورت بین SW2 و SW3 است. یکی از پورت‌ها به‌عنوان Designated تعیین‌شده و دیگری در حالت Blocking قرار می‌گیرد. چراکه در یک collision domain تنها یک Designated Port میتوانیم داشته باشیم و Root Port  هر دو سوییچ هم انتخاب شده است.

برای تعیین اینکه کدام پورت برنده می‌شود چندین Tie Breaker(گره گشا) وجود دارند:

  • سوییچی که کمترین میزان PRC را دارد برنده می‌شود.
  • سوییچی که کمترین BID را دارد برنده می‌شود.
  • پورتی که کمترین مقدار اولویت را دارد برنده می‌شود (به‌صورت پیش‌فرض ارزش هر پورت 128 است)
  • پورتی که کمترین شماره را دارد انتخاب می‌شود. (مثلاً f0/1 پورت f0/2 را شکست خواهد داد)

با این اطلاعات می‌توانیم سریع متوجه شویم که کدام پورت تبدیل به Designated شده و کدام پورت Block می شود.

اول، کدام‌یک کمترین PRC را دارد؟ هیچ‌کدام، همه سوییچ‌ها کمترین PRC شان 19 است، پس یک گره وجود دارد. دوم کدام‌یک کمترین BID را دارد؟ اینجا گره باز می‌شود، سوییچ 2 برنده است. پورت f0/2 سوییچ 2، Designated خواهد شد. پورت f0/1 سوییچ 3 بلاک خواهد شد. در اینجا فعالیت STP به پایان می‌رسد هرچند هنوز یک مرحله برای نهایی شدن STP باقی است.

انواع وضعیت پورت

5 وضعیت وجود دارد که STP می‌تواند در آن موقعیت قرار بگیرد که در جدول زیر توضیح داده‌شده است:

اسم وضعیت تعریف
Disable (غیرفعال) در این حالت پورت ازلحاظ منطقی و فیزیکی خاموش است
Blocking (مسدود) وقتی پورتی نه Root و نه Designated باشد در وضعیت مسدود قرار می‌گیرد، درنتیجه هیچ داده‌ای را دریافت و یا ارسال نمی‌کند (به‌جز بسته‌های BPDU برای اینکه اطلاعات مربوط به STP را به‌روز کند)
Listening(گوش دادن) در این حالت هم هیچ داده‌ای را ارسال یا دریافت نخواهد کرد. همچنین هیچ مک آدرسی را به MAC Table خود اضافه نمی‌کند. ولی قادر به ارسال و دریافت بسته‌های BPDU خواهد بود. در این مرحله می‌تواند خود را به‌عنوان Root Port یا Designated Port معرفی کند، اگر نتواند Root Port یا Designated Port شود به حالت قبل یعنی Blocking بازخواهد گشت.
Learning (یادگیری) بازهم در این حالت هم هیچ فریمی را ارسال یا دریافت نمی‌کند ولی مک آدرس‌ها را به MAC Table خود اضافه می‌کند و قادر به ارسال و دریافت BPDU است.
Forwarding(فورواردینگ) در این حالت پورت قادر به ارسال و دریافت فریم است و MAC Table خود را با مک آدرس‌ها بروز می‌کند و قادر به ارسال و دریافت BPDU است.

وقتی در وضعیت پورت تغییری ایجاد می‌شود به‌عنوان‌مثال قطع/وصل می‌شود یا خاموش/ روشن می‌شود، STP مجدداً الگوریتم خود را اجرا می‌کند تا مطمئن شود که در شبکه Loop ای وجود ندارد. ابتدا پورتی که تغییر وضعیت داشته است را سریعاً در حالت مسدود قرار می‌دهد که سریعاً به وضعیت Listening تغییر می‌یابد. قبل از پایان 15 ثانیه و تغییر وضعیت به Learning جدول مک آدرس خود و همسایه‌های خود را به‌روز می‌کند. در این مرحله شروع به یادگیری مک آدرس‌ها می‌کند اما بازهم هیچ اطلاعی را دریافت/ارسال نمی‌کند. بعد از 15 ثانیه و در حالت forwarding این امر میسر می‌شود.

حداقل زمان برای قرار گرفتن در موقعیت forwarding 30 ثانیه است و حداکثر 50 ثانیه. دلیل این امر وجود MaxAge timer 20 ثانیه‌ای است. وقتی یک سوییچ روی پورت مسدود خود به مدت 20 ثانیه فریم BPDU دریافت نکند فرض می‌کند که دیگر روی آن پورت سوییچی وجود ندارد و پورت را در وضعیت forwarding قرار می‌دهد و فرض می‌کند که یک کامپیوتر در انتهای این پورت وجود دارد. درنتیجه 15+15+20=50.

دو ویژگی دیگر به نام Port Fast و BPDU Guard نیز وجود دارد که ترفندهایی مفیدی هستند. Port Fast قابلیتی است که فقط روی پورت‌هایی که در مود اکسس هستند و به کلاینت‌ها وصل شده‌اند فعال می‌شود و موجب می‌شود که پورت مستقیماً از حالت Blocking به حالت Forwarding تغییر وضعیت می‌دهد. این ویژگی برای کاربران بسیار مفید است چرا که سریعاً پورت فعال می‌شود. BPDU Guard در صورت دریافت فریم از یک سوییچ مهاجم که ممکن است شبکه را تهدید کند آن پورت را مسدود می‌کند. این پورت در حالت err-disabled قرار می‌گیرد و برای برگرداندن به حالت عادی نیاز به یک بار خاموش/ روشن کردن دارد.

به عنوان نمونه می توان به سوییچ های هوشمند مدیریتی گیگابیتی سری DGS-1210 دی-لینک مانند DGS-1210-28MP و DGS-1210-48 و سوییچ های مدل DGS-1510-52XMP و DGS-1510-28XS از سری سوییچ های هوشمند مدیریتی 1510 اشاره کرد.