طراحی های استاندارد
در طراحی های استاندارد برای بالا بردن میزان اتصال شبکه داشتن لینک Redundant یا جایگزین، یک امر انکار ناپذیر به حساب می آید. منظور از لینک redundant یا جایگزین وجود دو یا چند مسیر برای رسیدن به یک مقصد می باشد. در این طراحی، در صورت از کار افتادن لینک اصلی، لینک جایگزین از قطعی کل یا قسمتی از شبکه جلوگیری می کند. در صورتیکه بخواهیم مدت زمان پایداری شبکه خود را بالا ببریم از لینک های redundant استفاده میکنیم. اما بکارگیری لینک جایگزین باعث بوجود آمدن loop در شبکه می شود و در صورتیکه loop از بین نرود شبکه عملکرد صحیح نخواهد داشت. Spanning Tree Protocol راهکار خروج از بحران loop در شبکه است.
بررسی چگونگی بوجود آمدن loop
سوئیچ برای انتقال فریمهایی که به آن میرسد با توجه به MAC-address هایی که در CAM table خود دارد مبادرت به عمل انتقال بر روی پورت مناسب میکند. حال در ساختارهایی که از چندین سوئیچ استفاده میشود احتمال اینکه MAC-address در CAM table سوئیچ جاری وجود نداشته باشد بسیار زیاد است. به همین علت سوئیچ برای بدست آوردن MAC-address روی لینک ترانک خود از سوئیچ های مجاور سوال می پرسد.
در سادهترین حالت طراحی loop در شبکه، تصویر بالا را در نظر بگیرید. زمانی که آدرس مورد نظر بروی سوئیچ دیگر باشد، در هر حالتی دو مسیر برای رسیدن به مقصد وجود دارد. در شبکه های WAN هم امکان وجود چند مسیر به مقصد وجود دارد و روتینگ مسیر را بنا بر پروتکل های مسیریابی براساس اولویت انتخاب میکند. اما مکانیزم مسیریابی سوئیچ ها در لایه2 (سوئیچینگ) مانند روتینگ نیست که مسیر با اولویت تر انتخاب شود و بایستی فقط یک مسیر به مقصد درخواستی وجود داشته باشد.
در شبکه داخلی زمانی که بیشتر از یک مسیر برای رسیدن به مقصد وجود داشته باشد خطای MAC flapping اتفاق میافتد.
STP – Spanning Tree Protocol
IEEE پروتکل استانداری به نام 802.1d که به آن Spanning Tree Protocol میگوید را جهت جلوگیری از بوجود آمدن loop در ساختارهایی که از link redundancy استفاده میکنند تولید کرده است.
در شروع کار شبکه و پس از اتصال تمام سوئیچ ها و روشن کردن دستگاه ها، STP برای از بین بردن loop و رسیدن به بهینه ترین درخت شبکه کار خود را شروع میکند. در تعاریف ریاضی، درخت گرافی است که هیچگاه دو مسیر از هر نقطه به نقطه دیگر وجود ندارد.
شروع مکالمات سوئیچ های با همدیگر
در شروع کار، همه سوئیچ ها یک پیغام به نام BPDU یا Bridge Protocol Data Unit برای همدیگر ارسال میکنند. در BPDU Message اطلاعاتی مانند Bridge Priority (یک آدرس 16 بیت است با مقدار پیش فرض 32768) و MAC-address سوئیچ (که 48 بیت است) وجود دارد. ترکیب این دو مولفه مشخصه ایی به نام BID یا Bridge ID را ایجاد کرده که سوئیچ ها آنرا داخل بسته BPDU قرار داده و برای همدیگر ارسال میکنند.
انتخاب ROOT
رقابت بین سوئیچ ها پس از ارسال BPDU شروع میشود. اولین پیغامی که سوئیچ ها به همدیگر forward میکنند را پیغام hello BPDU میگویند. پس از ارسال hello BPDU جدول رقابتی در کسب اولویت بالاتر شروع به ثبت میشود. در مقایسه ها و چالشهای بین سوئیچ ها برای شناخت سوئیچ برتر و برنده، ملاک اول سنجش Priority است. در صورتیکه priority سوئیچ ها یکسان باشد از MAC-address برای انتخاب root استفاده میشود. اگر در تقابل سوئیچ ها سوئیچ با کمترین BID برنده میباشد. نهایتا برنده نهایی تبدیل به root switch میشود و کنترل STP و سوئیچ های دیگر و ایجاد و حفظ درخت را بدست میگیرد.
اولویت پورت های root switch در تمامی مسیرهای ترانکی از همه بالاتر است و نهایتاً وضعیت پورت هایش را به وضعیت forward تعریف میکند. بقیه سوئیچ ها نیز با توجه به جایگاهشان در درخت STP وضعیت و نقش پورت هایشان را تغییر میدهند.
وضعیت و نقش پورتها
designated-port: در هر collision domain فقط یک پورت به عنوان Desg انتخاب می شود و آن پورتی است که کمترین cost ارسالی به آن collision domain را دارد باشد.
root-port: در هر سوئیچ غیر root-bridge فقط یک پورت به عنوان root-port مشخص می گردد و آن پورتی است که کمترین cost دریافتی از bpdu ها را دارا باشد.
Altn-port: پورتی که به حالت Block می رود نقش جایگزین یا Altn را می گیرید.
نکته: cost یا وزن براساس جنس لینک ها داده میشود.
Cost: برای بدست آوردن درخت در بهترین شرایط، پس از انتخاب سوئیچ root به عنوان نقطه شروعی درخت از طریق priority و یا MAC آدرس، بایستی خطوط ارتباطی را براساس حداکثر سرعت کابل ها ارزش گزاری کرد. لینک 100Mbps ارزش 19، لینک Gig ارزش 4 و 10G ارزش 2 را دارا هستند. تمام پورت های سوئیچ root ارزش عددی 0 خواهند گرفت. پورت متصل به سوئیچ root مقدار عددی 0 را با مقدار عددی لینک ارتباطی جمع می کند. این ارزش زمانی که بین چند سوئیچ یک loop به وجود آمده باشد انتخاب کنند پورت forward (پورتی که کمترین ارزش عددی را داشته باشد) و block در آن loop است. موارد ذکر شده به صورت اتوماتیک محاسبه میشود.
محاسبه درخت STP و تعاریف دقیق وضعیت ها و وزن ها (cost) در آینده به تفصیل شرح داده خواهد شد.