قابلیت های پیشرفته STP (بخش دوم)

نویسنده: حسنا حسن نژاد
2 ماه پیش

قابلیت های پیشرفته STP (بخش دوم)

در مقاله قابلیت های پیشرفته STP (بخش اول)، چهار قابلیت PortFast ،BPDU Guard ،BPDU Filter و Root Guard در PVST (Per vlan spanning tree) معرفی شد. در این مقاله به بررسی دو قابلیت دیگر در PVST یعنی Loop Guard و UDLD پرداخته می شود. قابلیت های UplinkFast و BackboneFast در مقاله بعدی مطرح خواهند شد.

پیام های STP BPDU به عنوان Probe برای یادگیری توپولوژی شبکه استفاده می شوند. زمانی که سوئیچ های شرکت کننده در فرایند STP روی یک توپولوژی مشترک، ثابت و بدون Loop به نتیجه می رسند، پیام های BPDU همچنان می بایست تنها توسط Root Bridge ارسال شده و توسط سایر سوئیچ ها منتقل شوند. یکپارچگی توپولوژی STP به جریان مداوم و منظم ارسال پیام های BPDU از Root Bridge بستگی دارد.

اگر یکی از سوئیچ های غیر ریشه، پیام های BPDU را به موقع دریافت نکند، سوئیچ شرایط را این گونه در نظر می گیرد که ممکن است یک سوئیچ و یا یک لینک Upstream از دست رفته باشد و در این حالت، توپولوژی باید تغییر کرده باشد. بنابراین پورت های Block شده می توانند دوباره از حالت Block خارج شوند و تغییر وضعیت دهند.

با این حال، اگر عدم دریافت پیام های BPDU، به هر دلیلی اشتباه رخ داده باشد (برای مثال در حالتی که یک تجهیز میانی مانند فایروال در مسیر باشد) و پیام های BPDU دریافت نشوند، حتی اگر تغییری در توپولوژی وجود نداشته باشد، به راحتی می تواند منجر به ایجاد Loop شود.

spanning tree

برای حل این مشکل سیسکو از یکی از دو قابلیت زیر استفاده می کند:

  •  Loop Guard
  •  Unidirectional Link Detection (UDLD)

Loop Guard

زمانی که یک پورت سوئیچ BPDU را دریافت می کند و این پورت در وضعیت Blocking قرار دارد، پورت یک مسیر Redundant را تشکیل می دهد و تا زمانی که یک جریان پایدار از پیام های BPDU دریافت می شود، پورت در وضعیت Blocking باقی خواهد ماند.

اگر دریافت پیام های BPDU به هر دلیل متوقف شود، پورت از آخرین زمان دریافت BPDU تا پایان زمان Max Age در وضعیت Block باقی می ماند. سپس بعد از مدت Forward-Delay x 2 (Listening و Learning)، در وضعیت Forward قرار گرفته و سوئیچ فکر می کند دیگر نیازی به Block کردن پورت نیست و پورت به جای Block Port به عنوان Designated Port انتخاب می شود. در نتیجه عبور ترافیک از روی پورت، منجر به ایجاد Loop می شود.

با ویژگی Loop Guard، سوئیچ ها قبل از تغییر از حالت Block به Forward، یک بررسی اضافی را انجام می دهند. اگر بر روی پورتی که در پروسه STP به عنوان یک Block Port انتخاب شده است، Loop Guard فعال شود، در صورت عدم دریافت BPDU، پورت Block شده سوئیچ، به جای قرار گرفتن در نقش Designated Port و انتقال از وضعیت Block به وضعیت Listen، Learn و در نهایت Forward، در نقش Loop-Inconsistent و در وضعیت Broken (BKN) که منجر به مسدود شدن پورت می شود، قرار می گیرد. اگر سوئیچ بر روی پورتی که در حالت Loop-Inconsistent قرار گرفته است، BPDU دریافت کند، دوباره به وضعیت قبلی خود یعنی Block، بر می گردد. در نتیجه بازیابی پورت به صورت اتوماتیک خواهد بود.

STP-Loop Guard

فعال سازی این قابلیت به دو صورت Globally یا Per Interface انجام می شود.

اگر چه Loop Guard بر روی پورت سوئیچ فعال می شود، اما انتخاب شدن پورت به عنوان Loop-Inconsistent در زمان عدم دریافت BPDU، به صورت Per-VLAN انجام می شود. به عبارت دیگر، Loop Guard کل پورت را Block نمی کند بلکه فقط VLAN های متخلف برای آن پورت، Block می شوند. به عنوان مثال بر روی یک پورت Trunk، اگر BPDU ها فقط برای یک VLAN خاص دریافت نشده باشند، سوئیچ فقط آن VLAN را Block می کند (یعنی پورت را برای آن VLAN به حالت Loop-Inconsistent منتقل می کند).

ویژگی Loop Guard می تواند بر روی تمام پورت های سوئیچ فعال شود. سوئیچ، پورت هایی را که به صورت Block هستند شناسایی و فعالیت BPDU بر روی آن پورت ها را کنترل می کند تا آن ها را به صورت Non designated حفظ کند. Block Port ها جایگزین Root Port ها هستند که به طور معمول در حالت Block هستند. به طور دقیق تر، برای تمام حالات ممکن از درخت های فعال در STP، باید Loop Guard را در Root Port ها و Block Port ها فعال نمود.

شایان ذکر است در مورد اینترفیس Ether Channel، وضعیت Channel برای تمامی پورت هایی که عضو آن Channel Group هستند و برای یک VLAN خاص BPDU دریافت نمی کنند، به حالت Loop-Inconsistent منتقل می شود.

STP-Loop Guard

UDLD

در اتصالات فیبر در مقایسه با اتصالات مسی، برای انتقال و دریافت ترافیک، از Connector های متفاوتی استفاده می شود. کابل های فیبر شامل مسیر های مجزا برای ارسال (Transmit) و دریافت (Receive) ترافیک می باشند. در یک شبکه Campus، سوئیچ ها توسط لینک های Bidirectional، به یکدیگر متصل می شوند، به صورتی که ترافیک می تواند از دو جهت جریان یابد. در صورتی که لینک دچار مشکل فیزیکی شود، هر دو سوئیچ متصل به دو سر لینک متوجه شده و وضعیت را به صورت Non-Connected نشان می دهند. گاهی ممکن است تنها یکی از مسیر ها دچار اختلال شود، در این حالت لینک به صورت Unidirectional شده و جهت ترافیک تنها از یک طرف خواهد بود، اما هر دو سوئیچ، لینک را به صورت Bidirectional در نظر می گیرند و وضعیت آن را Up/Up تشخیص می دهند. Unidirectional شدن لینک در توپولوژی های STP خطرناک است، در این حالت، پیام های BPDU در انتهای یکی از مسیر های لینک دریافت نمی شوند. اگر انتهای این لینک طی فرایند STP، در حالت Blocking قرار داشته باشد، سوئیچ عدم دریافت BPDU را به این معنا در نظر می گیرد که می تواند با اطمینان پورت را از طریق STP از وضعیت Block به وضعیت Listen ،Learn و در نهایت Forward منتقل کند و آن را به عنوان Designated Port انتخاب می کند تا بتواند ترافیک را عبور دهد.

STP-UDLD

UDLD (Unidirectional Link Detection) یک پروتکل لایه دویی است که برای تشخیص وضعیت لینک، با لایه یک همکاری می کند. از آن جا که Unidirectional Link می تواند باعث ایجاد Loop شود، UDLD دستگاه ها را قادر می سازد تا در صورت به وجود آمدن Unidirectional Link، لینک آسیب دیده را تشخیص دهند.

UDLD بین دو سوئیچ همسایه فعال می شود. محتوای فریم های UDLD شامل اطلاعاتی درباره شناسه Device پورت فرستنده (MAC Address مربوط به پورت فرستنده)، شناسه پورت، شناسه Device پورت همسایه (MAC Address مربوط به پورت گیرنده) و شناسه پورت همسایه می باشد.

با فعال سازی UDLD بر روی Device همسایه، همان پیام Hello ارسال می شود. اگر هر دو Device در دو سر لینک، فریم های UDLD را دریافت کنند، لینک Bidirectional خواهد بود. اگر یک پورت در مدت زمان مشخص شده، در بسته های UDLD ورودی، شناسه Device و پورت خود را مشاهده نکند، لینک Unidirectional در نظر گرفته می شود و پورت غیرفعال می شود.

الگوریتم UDLD با توجه به موارد زیر امکان شناسایی Unidirectional Link را فراهم می کند:

  • زمانی که هر دو طرف لینک Up باشد، با این حال فقط یک طرف لینک بسته ها را دریافت کند.
  • زمانی که TX و RX در دو طرف لینک درست به یکدیگر متصل نشده باشند.

UDLD می تواند در یکی از دو حالت Normal یا Aggressive کار کند.

Normal Mode: در این حالت، در صورت متوقف شدن دریافت پیام های UDLD از سوئیچ همسایه، UDLD پورت را در وضعیت Undetermined قرار می دهد اما پورت مجاز به ادامه کار خود می باشد. UDLD فقط پورت را به عنوان پورتی در وضعیت Undetermined مشخص می کند (خاموش یا غیر فعال نمی کند) و یک پیام Syslog ایجاد می کند. به عبارت دیگر، در حالت Normal هیچ کاری از طرف UDLD صورت نمی گیرد و پورت با توجه به حالت درخت Spanning Tree فعلی خود مجاز به ادامه کار می باشد.

Aggressive Mode: این حالت پس از متوقف شدن دریافت پیام UDLD از سوئیچ های همسایه خود، آغاز می شود. در صورت متوقف شدن دریافت پیام های UDLD از سوئیچ همسایه، UDLD سعی می کند ارتباط با همسایه را دوباره برقرار کند. پس از هشت تلاش ناموفق، وضعیت پورت به Error-Disable تغییر می کند که منجر به غیر فعال شدن پورت می شود. Aggressive Mode UDLD در لینک های Point-to-Point پیکربندی می شود.

Aggressive Mode روش ترجیحی برای پیکربندی UDLD است. UDLD با جلوگیری از تشکیل یک ارتباط یک طرفه، می تواند در توپولوژی های STP مفید باشد. UDLD در هنگام خاموش شدن یک لینک به دلیل خرابی سخت افزاری که باعث ایجاد ارتباطات Unidirectional می شود، استفاده می شود. درEtherChannel، ویژگی UDLD فقط لینک فیزیکی را که Fail شده است، خاموش می کند. در Aggressive Mode، این ویژگی یک شناسایی اضافی را در زمانی که پورت از یک طرف انتقال یا دریافت نمی کند، اما با این حال، لینک در هر دو طرف Up می باشد، یا زمانی که از یک طرف Up و از طرف دیگر، Down می شود انجام می دهد (این وضعیت فقط در اتصالات فیبر مشاهده می شود، و به طور معمول اتصالات مسی مستعد قرار گیری در این حالت نیستند. زیرا از پالس های لینک اترنت برای نظارت بر لینک استفاده می کنند).

 فعال سازی این قابلیت به دو صورت Globally یا Per Interface انجام می شود.

فعال کردن UDLD در محیط Globally، منجر به فعال شدن UDLD در تمام اینترفیس هایی که به صورت فیبر هستند خواهد شد. اگرچه اینترفیس هایی که به صورت کابل مسی هستند به دلیل اینکه دچار Unidirectional در لینک نمی شوند، نیاز به فعال سازی UDLD ندارند اما می توان UDLD را به صورت مجزا برای اینترفیس هایی که به صورت کابل مسی هستند فعال نمود.

هنگامی که Unidirectional Link توسط UDLD تشخیص داده شود، پورت مربوطه غیرفعال می شود، فعال سازی مجدد پورت یا باید به صورت دستی صورت گیرد (با Shutdown و no Shutdown کردن پورت) و یا زمانی برای پایان Error-Disables آن (با Error-Disable Recovery) تنظیم شود. علاوه بر این نیز می توان با استفاده از دستور udld reset، تمامی پورت هایی که در وضعیت Error-Disable قرار گرفته اند را یکباره مجددا فعال سازی نمود.

STP-UDLD

مقایسه بین Aggressive Mode UDLD و Loop Guard

عملکرد Loop Guard و Aggressive Mode UDLD با یکدیگر هم پوشانی دارند تا آنجا که هر دو در برابر خرابی STP ناشی از Unidirectional Link محافظت می کنند. با این حال، این دو ویژگی، رویکرد و کارایی متفاوتی نسبت به این مسئله خواهند داشت.

Aggressive Mode UDLD Loop Guard  
Per Port Per Port Configuration
Per Port Per Vlan Action Granularity
Yes, with err-disable timeout Yes Auto-Recovery
Yes, when enabled on all links
in redundant topology
Yes, when enabled on all
root ports and alternative
port in redundant topology
Protection against STP failures
caused by unidirectional Links
No Yes Protection against STP failures
caused by software in resulting
in designated switch not sending BPDUs
Yes No Protection against miss wiring

مهم ترین تفاوت بین حالت Aggressive Mode UDLD و Loop Guard در ارتباط با STP می باشد. Aggressive Mode UDLD نمی تواند قطعی های ناشی از بروز مشکلات در نرم افزار سوئیچ های تعیین شده که BPDU ارسال نمی کند را تشخیص دهد. Aggressive Mode UDLD در تشخیص Unidirectional Link در قابلیت EtherChannel قوی تر است. با فعالسازی Loop Guard، زمانی که یک قطعی در یکی از لینک های EtherChannel رخ می دهد، اینترفیس EtherChannel (شامل تمامی پورت های فیزیکی در EtherChannel Group)، برای یک VLAN یا تمامی VLAN ها در وضعیت Loop-Inconsistent قرار می گیرد در حالی که در Aggressive Mode UDLD همان تک پورت فیزیکی در اینترفیس EtherChannel را نمایش می دهد و غیر فعال می کند.

فعال کردن هر دو قابلیت Aggressive Mode UDLD و Loop Guard بالاترین سطح محافظت در سوئیچ ها در برابر Loop های لایه دو و Black Hole ها را ایجاد خواهد نمود.

52
0
0
نظرات