پیشتر توضیحات کلی نحوه محاسبه درخت spanning-tree را ارائه کردیم. در این قسمت میخواهیم نحوه دقیق محاسبه درخت را بررسی کنیم.
سناریوی زیر را در نظر بگیرید
برای بدست آوردن درخت spanning-tree، سه انتخاب باید انجام شود: 1- root bridge. 2- root port. 3- designated-port.
تعریف درخت
گراف همبند بدون دور را درخت میگوییم.پیش از هر کاری، سوئیچها به انتخاب root bridge میپردازند. انتخاب سوئیچ root bridge براساس bridge-ID است. Bridge-ID یک فیلد داخل BPDU است که از 8 بایت تشکیل میشود. 2 بایت (priority) و 6 بایت (MAC ایی که در سوئیچ برای CPU تخصیص داده شده است که معمولا اولین MAC در CAM Table است) تشکیل شده است. Priority به صورت پیش فرض 32768 است.
انواع priority
traditional و system ID.
اگر بخواهیم system id را غیر فعال کنیم سوئیچ پیغامی میدهد مبنی بر اینکه به دلیل نیاز این platform برای کار کردن به system id، نمیتوانید آنرا غیر فعال کنید به همین خاطر نمیتوان نوع traditional را دید.
در حالت انتخاب traditional، میتوان priority را از 0 تا 65535 تنظیم نمود. در extended system-id به دلیل اینکه نمیتوان 13 بیت سمت راست که مربوط به VLAN-ID است را تغییر داد و فقط 3 بیت سمت چپ قابل تغییر است، به همین علت برای تغییر priority در حالت extended system-id فقط میتوان از ضرایب 2^12 یا همان 4096 استفاده نمود. اگر عددی غیر از این ضرایب انتخاب شود سوئیچ پیغام خطایی مانند تصویر زیر خواهد داد.
برای انتخاب root bridge برای سوئیچها priority تعیین میکنیم.
پس از انتخاب سوئیچ root بایستی root port را انتخاب کنیم. معمولا سوئیچهای رده distribution به عنوان root bridge انتخاب می شوند.
Root port
در هر سوئیچ غیر root bridge فقط یک پورت به عنوان root port مشخص می گردد و آن پورتی است که کمترین cost دریافتی از BPDU ها را دارا باشد.
Designated port
در هر collision domain فقط یک پورت به عنوان DP انتخاب میشود و آن پورتی است که کمترین cost ارسالی به آن collision domain را دارد باشد.
تعریف درخت پوشا: در گراف وزن دار انتخاب مسیرها با بیشترین وزن جهت تشکیل درخت است.
پس از انتخاب ریشه، از ریشه شروع به درست کردن درخت پوشا در گراف میکنیم.
انتخاب درخت STP
در ابتدا و پیش از انتخاب root bridge همه سوئیچها شروع به ارسال BPDU میکنند، اما پس از انتخاب RB فقط سوئیچی BPDU ارسال میکند که root bridge شده باشد.. root bridge پکت های BPDU را که در آن cost خروجی 0 مقدار دهی شده است، ارسال می کند.
با توجه به جدول زیر، برای مشخص شدن root port و designated port در سناریو، باتوجه به تعاریف بالا، وزنهای خروجی را با رنگ آبی و وزنهای ورودی را با رنگ قرمز مشخص میکنیم.
Root bridge مقادیر خود (cost) را با مقدار صفر ارسال خواهد نمود. پس از مشخص شدن مقادیر خروجی root bridge مقادیر خروجی سوئیچهای همسایه root bridge را مشخص میکنیم.
برای محاسبه مقدار ورودی، میزان خروجی سوئیچهای همسایه با link cost در پورتی که ورودی به سوئیچ همسایه متصل است جمع میشود. در تصویر زیر RB به همسایه اش که لینک با Cost 4 دارد و مقدار خروجی اش 0 است ارتباط دارد. در این حالت بهترین ورودی برای سوئیچ مجاور 4 محاسبه میشود.
وزن پورتی که کمترین مقدار ورودی به سوئیچ را دارد، به عنوان مقدار خروجی تمام پورتهای دیگر (جز خودش) قرار داده میشود. وزن خروجی این پورت از روی کمترین مقدار وزنهای ورودی دیگر بدست میآید.
در این سناریو یک دستگاه hub قرار داده شد تا با وجود این دستگاه محاسبه STP را انجام دهیم. برای محاسبات، Hub را مانند یک سیم در نظر بگیرید. برای Hub ورودی و خروجی محاسبه نمیشود.
در قسمتی از سناریو، که Hub دستگاه ارتباطی بین سوئیچهاست، و طبق تعریف Hub را سیم در نظر میگیریم. در این وضعیت امکان دارد یک سوئیچ چند مقدار ورودی داشته باشد. در صورت وجود این حالت، کمترین مقدار به عنوان ورودی تعیین میشود.
حال میخواهیم با توجه به تعریفی که از RP و DP داشتیم “کمترین cost ورودی – فقط یک پورت در هر سوئیچ” و “کمترین cost خروجی – فقط یک پورت در هر collision domain” به مشخص نمودن RP و DP می پردازیم.
دو سوئیچ پایین به همدیگر (در broadcast domain مشترکشان) با cost 104 خروجی ارسال میکنند. در این حالت سوئیچی که bridge-ID کمتری داشته باشد به عنوان designated port انتخاب میشود. در صورت برابر بودن priority، sender port (سوئیچ ارسال کننده BPDU از پورت کوچکتر) مورد بررسی قرار می گیرد. سپسlocal brdig ID و نهایتا local port ID مد نظر قرار می گیرد.
سرانجام هر پورتی که باقی مانده به حالت BLK میرود و در نهایت درخت بدست میآید.
سوال: چرا لینک ها یک طرفه بلاک می شوند؟ یعنی لینک ها از یک طرف باز و از یک طرف بلاک هستند؟
پاسخ: امکان دارد پورتی که روبروی پورت بلاک است اما بلاک نشده به یک hub متصل باشد که به این hub چندین سوئیچ متصل هستند.
اگر RB عوض شود تمام محاسبات بالا بایستی از ابتدا انجام شود.