برای نگهداری از درخت بدست آمده باید از آن محافظت کنیم. روشهای مختلفی برای محافظت از spanning-tree بایستی انجام شود که هر کدام در شرایط مختلفی نمایان میشود. در پورتهایی که مشخص کردهایم در محاسبه درخت نیستند از ایجاد loop جلوگیری کنیم. اجازهی انتخاب root (در صورت ایجاد مشکل برای سوئیچ root) در لایههایی مانند access را ندهیم. و نهایتا در مشکلات خاصی مانند یکطرفه شدن ارتباطات که باعث بروز مشکل در انتخاب درست درخت میشود، بایستی به انتخاب درست درخت کمک کنیم.
BPDU portguard
زمانیکه برای سرعت بخشیدن در محاسبات spanning tree، پورتهایی که به END-USER یا END-DEVICE متصلاند، را با دستور portfast خارج میکنیم، بایستی اجازه ارسال BPDU را از این پورتها بگیریم. بستههای BPDU توسط سوئیچها برای همدیگر ارسال میشوند و بنابر طراحیمان این پورتها نباید به سوئیچ دیگری متصل شود.
برای محافظت در این قسمت، از دستور bpdugaurd استفاده میکنیم. پس استفاد از این دستور، اگر BDPU به یکی از پورتهای محافظت شده برسد، سوئیچ آن پورت را غیرفعال میکند.
برای فعال کردن bpduguard نیز میتوان در محیط global و یا interface استفاده نمود. با استفاده از دستور زیر تمام پورتهایی که portfast باشند Bpduguard شان نیز فعال میشد.
این ویژگی فقط بروی پورتی اعمال میشود که portfast برویش اعمال شده باشد.
Rootguard
به طور معمول، در طراحیهای استاندارد، اجازه نمیدهیم سوئیچهای لایه اکسس root bridge شوند. در اینصورت، بروی پورتهایی که به سوئیچهای لایه اکسس متصلند، تنظیمی انجام میدهیم که آن سوئیچها هیچ وقت root bridge نشود. زمانی سوئیچ میتواند root bridge شود که superior BPDU یا BPDU با priority پایین تر نسبت به root bridge فعلی ارسال کند. به همین علت، توسط دستور rootguard میتوان محدودهایی که میتواند root bridge تنظیم شود را مشخص کنیم.
در این روش، دستور بروی پورتهایی که نباید root شوند اعمال میشود. توسط این دستور، مشخص میشود، اگر از این پورت superior BPDU ارسال شد آن پورت را قطع میکند و به حالت inconsistence میبرد تا تاثیری بروی شبکه فعلی قرار ندهد.
دستور rootguard بروی interface اعمال میشود: spanning-tree guard root
برای دیدن وضعیت این پورتها از دستور show spanning-tree inconsistentports استفاده میشود. در این وضعیت BPDU از روی این پورت listen میشود اما داده ارسال و دریافت نمیشود. این وضعیت تا زمانی که superior BPDU ارسال شود باقی خواهد ماند.
UDLD و Loopguard
برخی اوقات امکان دارد ارتباط بین دو سوئیچ یک طرفه (unidirectional) شود. منظور از شبکههای یکطرفه، شبکهایی است که ارسال دارد اما دریافت ندارد.
در شبکههای با مدیای مس این مشکل میتواند به دلیل قطع شدن زوج سیم های ارسال کننده باشد. در شبکه با مدیا فیبر، کافی است یکی از دو core که تشکیل یک لینک فیبر را میدهد قطع شود.
وقتی یک پورت block شده است، ارسال ندارد اما بسته های BPDU را دریافت میکند.
حال اگر پورتی در ارتباط دو سوئیچ block شده باشد یک طرفه شود، پس از مدتی سوئیچ که پورتش block بوده BPDU دریافت نخواهد کرد. سوئیچ برای پورتی که BPDU نمی گیرد، پورت را غیر فعال نمیکند. چون آن پورت را متصل به end user یا دستگاهی که BPDU ارسال نمیکند میداند، که هیچکدام loop ایجاد نمیکند. در اینصورت، سوئیچ پورت خود را از حالت block در میآورد.
در چنین حالتهایی، همانند تصویر بالا، احتمال بوجود آمدن loop زیاد است.
در شبکههای با زیرساخت مسی، زمانی که یک ارتباط به حالت یکطرفه تبدیل شده میتوان با به راهاندازی Loopguard از بوجود آمدن loop جلوگیری نمود.
حالتهایی که امکان ایجاد ارتباط یکطرفه را زیاد میکند: ایراد سخت افزاری – شبکههای وایرلس که BPDU را پشتیبانی میکنند و حالت repeater ایی کار میکنند تنظیمات BPDU را میتوان در آنها دست کار کرد که BPDU عبور کند یا خیر – تجهیزات امنیتی هستند که امکان دارد از عبور BPDU جلوگیری کنند.
دستور loop guard در دو محیط اعمال میشود. اولین محیط global است که بروی تمام پورتها و در محیط interface بروی محیط interface خاصی که وارد محیطش شده ایم اعمال میشود.
در لینک یکطرفه فیبر هم مشکل لینک مسی ایجاد میشود. برای فیبر از متد UDLD (Unidirectional Link Detection) استفاده میشود.
در UDLD هر 15 ثانیه یک پکت hello ارسال میشود.
سوئیچی که 45 ثانیه hello ی طرف مقابل را نگیرد متوجه میشود که لینک یکطرفه شده است. علت اینکه 45 ثانیه صبر میکند چون ماکزیمم زمان 50 ثانیه در spanning-tree تنظیم میشود و به حالت stable در می آید به همین خاطر قبل از 50 ثانیه باید بتواند تصمیم بگیرد. اگرچه، تا زمانی که اولین پکت hello از طرف مقابل دریافت نشده باشد لینک در متد UDLD قطع نمیشود.
انواع پیادهسازی UDLD
Normal mode
در این حالت سوئیچ شروع به تولید log میکند. این حالت برای جاهایی استفاده میشود که اگر ارتباط یک طرفه شود loop ای ایجاد نمیشود.
Aggressive mode
در این حالت، پورت قطع شده و به حالت error disable میرود.
دستور بروی Interface و به صورت spanning-tree guard loop
یا در محیط global و با دستور spanning-tree loopguard default ثبت میشود.
برای فیبر از دستور udld در دو محیط global و interface استفاده میشود.
نکته: message interval در بعضی از سری های 7 و در بعضی سری ها 15 ثانیه است.
پس از یک طرفه شدن لینک مجددا BPDU دریافت شود loopguard لینک را از حالت inconsistences در می آید.
BPDU Filtering Feature
کنترل کردن ارسال BPDU با دستور bdpu filter است.
اگر BPDU filter را فعال کنیم root guard دیگر کار نمیکند. این دستور برای پورتهای access مناسب است.
دستور bdpu filter در حالتهای global و interface به شکل زیر است