معین وفایی
متخصص شبکه های سیسکو و امنیت زیرساخت

پروتکل STP چیست؟ کاملترین بررسی پروتکل Spanning Tree + مفاهیم

در لایه 3 ، پروتکل های مسیر یابی به ازای هر مسیر Down شده مسیر جدیدی را برای رسیدن به مقصد انتخاب میکنند و می توانند برای رسیدن به مقصد از چندین مسیر متفاوت استفاده کنند ; اما در لایه 2 فقط و فقط باید از یک مسیر برای رسیدن به مقصد استفاده کرد .در لایه 2 برای حل مشکلات احتمالی لینک ها و استفاده از مسیر های Redundant می توانیم از پروتکل STP استفاده کنیم .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
سرفصل های این مطلب
  1. پروتکل STP چیست؟
    1. نحوه کار پروتکل STP بصورت کلی چگونه است؟
  2. پیام های BPDU چه هستند؟
  3. مفاهیم اصلی در STP چه چیزهایی هستند؟
  4. Path Cost ( ارزش مسیر ) در STP چیست؟
  5. مراحل STP یا Spaning Tree Protocol شامل چه چیزهایی است؟
  6. انتخاب Root Bridge در STP چگونه انجام می شود؟
  7. چهار معیار اصلی STP در ٍElection ( انتخابات )
  8. Inferior BPDU چیست ؟
  9. Superior BPDU چیست؟
  10. انتخاب Root Port چگونه انجام می شود؟
  11. بررسی نحوه انتخاب Designated port در STP
  12. وضعیت های مختلف یک پورت در STP
  13. تایمر ها در STP چگونه عمل می کنند؟
  14. همگرایی پس از تغییر در توپولوژی STP
  15. پیام های STP شامل چه چیزهایی می شوند؟
  16. بررسی تغییر Topology در STP
  17. معرفی انواع مختلف تغییر در Topology
    1. 1. Direct Tolpology Changes ( تغییرات توپولوژی مستقیم )
    2. 2. Indirect Topology Changes ( تغییرات توپولوژی غیر مستقیم )
    3. 3. Insignnificant Topology Changes ( تغییرات توپولوژی ناچیز )
  18. STP برای هر Vlan
  19. نحوه تنظیم Root Bridge چگونه است؟
  20. منعطف بودن STP به چه معناست؟
  21. بهبود همگرایی و Convergence در پروتکل STP
  22. قابلیت PortFast
  23. UplinkFast چیست؟
  24. قابلیت BackboneFast چیست؟
  25. امنیت در STP چگونه برقرار می شود؟
  26. Root Guard چیست؟
  27. BPDU Guard چیست؟
  28. اختلال در دریافت پیام های BPDU
  29. ویژگی Loop Guard چه کاری انجام می دهد؟
  30. ویژگی BPDU Filtering چیست؟
  31. Root Guard چیست؟
  32. BPDU Guard چیست؟

پروتکل STP چیست؟

نحوه کار پروتکل STP بصورت کلی چگونه است؟

شبکه لایه 2 نباید Loop داشته باشد یعنی برای رسیدن به مقصد تنها یک مسیر لایه 2 ای باید وجود داشته باشد و در صورت قطع مسیر ، مسیری جایگزین برایش انتخاب گردد تا ارتباط شبکه همچنان باقی بماند ، پس پروتکل STP از ایجاد هر گونه Loop در لایه 2 شبکه جلوگیری می کند و بهترین مسیر را میان مسیر های موجود انتخاب میکند و این تضمین را به ما میدهد که در مسیر ارتباطی هیچ گونه Loop بوجود نیاید .2 نسخه مهم برای پروتکل STP وجود دارد :

  1. DEC
  2. IEEE802.1d

استاندارد DEC بوسیله دو شرکت COMAPQو HP ایجاد گردید و سازمان استاندارد IEEE رو پایه گذاری کرد . این دو نسخه با یکدیگر سازگار نیست و اگر در شبکه دستگاه هایی داشته باشیم که یک سری از آن ها از DEC و سری های دیگر از 802.1d پشتیبانی میکنند قطعا با مشکلات حلقه یا Loop در شبکه مواجه خواهیم شد . دستگاه های سیسکو به صورت پیش فرض از 802.1d استفاده میکنند .
چند نکته قابل تامل در رابطه با شبکه های لایه 2 ای 

  • سوییچ با نام Bridge نام گذاری و خطاب می شود و هر وقت به اسم Bridge یا پل اشاره شد منظورم همان سوییچ است .
  • Bridge در سطح شبکه شفاف است یعنی هیچ تغییری در خود فریم یا Header آن ایجاد نمیکند .
  • فریم ها بر اساس Content Addressable Memory یا Cam Table به پورت خروجی یا مقصد خود ارسال می شوند.
  • فریم های Broadcast به همه پورت های درون Vlan ارسال می شود .
  • فریم های Unknown Unicast نیز از آن جا که مقصدشان در Cam Table مشخص نیست به همه پورت ها ارسال می شوند .
  • وقتی فریمی بین دو سوییچ به تناوب ارسال و دریافت می گردد بدین معناس که در شبکه Bridging Loop رخ داده است .


پروتکل STP از الگوریتمی به نام STA یا Spaning Tree Alogorithm جهت بررسی Loop در شبکه لایه 2 استفاده میکند که بر اساس اطلاعات دریافتی از سوییچ های همسایه ، یک نقطه Root ( ریشه ) انتخاب می کند و تمام مسیر ها را تا آن نقطه بر اساس هزینه محاسبه میکند تا شبکه ای عاری از حلقه به شکل یک درخت با شاخ و برگ هایش بسازد که در آن هیچ نقظه ای به نقظه دیگر از دو مسیر متفاوت قابل دسترس نباشد .

پیام های BPDU چه هستند؟

برای اینکه پروتکل STP توانایی اینو داشته باشه که از Loop های لایه 2 ای در شبکه جلوگیری کنه ، سوییچ های موجود باید در مورد کل توپولوژی شبکه ما اطلاعات لازمه رو داشته باشند ، سوییچ ها این کار رو با کمک پیام هایی بنام BPDU انجام می دهند که یک پیام Multicast بوده و فقط دستگاه هایی در لایه 2 رو تحت تاثیر قرار میدهد .

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

بعد از هر تغییر در شبکه مثل فعال شدن یک پورت یا از دور خارج شدن یک پورت یا اتصال دستگاه جدیدی به شبکه و یا خروج یک دستگاه از شبکه ، پروتکل STP برای جلوگیری از Loop بار دیگر الگوریتم خاص خود را اجرا میکند و تصمیم گیری های تازه را اتخاذ میکند.پیام های BPDU هر 2 ثانیه یک بار بوسیله Interface سوییچ ایجاد و فرستاده می شود و با این کار باعث بالا رفتن میزان Convergence شبکه یا همگرایی شبکه خواهد شد.

  • نکته : اصطلاح Convergence اشاره به زمانی دارد که بعد از بروز تغییرات ، شبکه بار دیگر به حالت عادی خودش بر میگردد .

پیام های BPDU حاوی اطلاعات مهمی در مورد توپولوژی شبکه می باشند . هر Bridge یا Switch دارای یک ID که به آن BridgeID و یا SwitchID گفته می شود ، هستند که این ID مشخص کننده Priority و آدرس Mac مربوط به آن دستگاه است .سوییچ ها در هنگام ایجاد BPDU شناسه های مربوط به خود را نیز در داخل BPDU قرار می دهند تا هویت خود را به سوییچ های دیگر اطلاع دهند .

  • نکته : شبکه ها باید دارای مسیر های Redundant یا موازی و جایگزین باشند تا در موقع نیاز مسیر دیگری به غیر از مسیر اصلی وجود داشته باشد اما باید توجه کنیم که در زمان واحد در لایه 2 فقط و فقط باید یک مسیر تا مقصد فعال باشد البته این قضیه یا مطلب برای لایه سه یا Routing IP صدق نمیکند و میتوانیم در لایه 3 ، بار شبکه را بین چند مسیر متفاوت تقسیم کنیم .

بیشتر بدانیم 

وجود Broadcast و Multicast در شبکه ضروری است و بدون وجود آن ها عملکرد شبکه با مشکل مواجه خواهد شد ، برخی مهندسین اینگونه تصور میکنند که وجود Broadcast در شبکه زائد و باید به نوعی جلوی آن گرفته شود در صورتیکه عملکرد DHCP و ARP و بسیاری از Application ها و همچنین Protocol های شبکه به این نوع ارسال ها بستگی دارد اما آن چه بیشتر شبکه رو آزار میده Broadcast Storm(طوفان بسته های Broadcast ) است به صورتیکه از حالت Normal و طبیعی خارج شده و مابع شبکه رو درگیر می سازد .

مفاهیم اصلی در STP چه چیزهایی هستند؟

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


ارباب حلقه ها - STP - قسمت دوم
  • محاسبات STP براساس Bridge ID و Path Cost صورت می گیرد .
  • برای اینکه Root Switch یا Root Bridge را بتوانیم انتخاب کنیم از Bridge ID استفاده می کنیم .

هر چقدر مقدار Bridge ID کمتر شود احتمال ریشه ( Root ) شدن سوییچ بیشتر می شود. Bridge ID هشت بایت است و از ترکیب 2 بایت + 6 بایت تشکیل می شود .



ارباب حلقه ها - STP - قسمت دوم

Path Cost ( ارزش مسیر ) در STP چیست؟

مشخص کننده ارزش هر لینک از یک سوییچ به سوییچ همسایه می باشد . ( این جدول در آینده احتمالا دوباره نیز تغییر می کند . )


ارباب حلقه ها - STP - قسمت دوم



مراحل STP یا Spaning Tree Protocol شامل چه چیزهایی است؟

برای اجرای پروتکل STP و جهت ایجاد شبکه ای Loop Free ( بدون حلقه ) و در هنگام هر Convergence مراحل زیر طی می شود :

1- انتخاب Root Bridge یا Root Switch
2- انتخاب Root Port ها
3- انتخاب Designated Port ها

انتخاب Root Bridge در STP چگونه انجام می شود؟

تنها یک سوییچ در Vlan میتوان به عنوان Root انتخاب شود .نقطه اصلی و ریشه ای که محاسبات STP بر اساس آن صورت میگیرد Root Bridge است .Root Bridge دارای کوچکترین Bridge ID یا به اختصار BID در سطح شبکه است و هر گاه سوییچی با BID کمتری به شبکه متصل گردد ، مبدل به Root Bridge شده و محاسبات از سر گرفته می شود .Root Bridge هر دو ثانیه خود را در شبکه Advertise میکند ( تبلیغ میکند ).


  • نکته : BPDU حاوی اطلاعات Spaning Tree است و تنها از سوی Root Bridge در شبکه هر دو ثانیه توزیع می گردد .

در ابتدا هر سوییچ از آن جا که از بقیه سوییچ ها اطلاعی ندارد ، خود را Root Bridge دیده و شروع به Advertise خود میکند ( یعنی BPDU ارسال میکند از جانب خودش ) ، این روند تبلیغ کردن تا زمانی ادامه پیدا میکند که یک BPDU از طرف یک Root Bridge با BID بهتر ( BID بهتر یعنی BID کمتر یا در حالت مساوی سوییچی که دارای Mac Address کوچکتری است ) دریافت شود .بعد از پیدا شدن Root Bridge یا سوییچی با BID کمتر و بهتر سوییچ آن را به عنوان Root Bridge به زیر شاخه های خودش معرفی میکند .



ارباب حلقه ها - STP - قسمت دوم

برای انتخاب Root Bridge هر سوییچ در ابتدا یک بسته BPDU که شامل Bridge ID خودش هست رو می سازد و به همه ارسال میکند و ادعای Root بودن دارد ، هنگامی که این سوییچ یک Superior Hello را دریافت کند ( BPDU ای که دارای BID کمتری باشد ) دست از ادعای خود برداشته وشروع به ارسال اون Superior Hello میکند .

در انتها تمام سوییچ ها جز اون سوییچی که دارای BID کمتری است دست از تولید Superior Hello بر میدارند و آن سوییچ به عنوان یک Root Switch انتخاب می شود و BPDU را تولید و ارسال می کند و بقیه سوییچ ها فقط آن را دریافت و ارسال میکنند .

Bridge ID در استاندارد 802.1d شامل دو فیلد است 

  1. فیلد Priority که 2 بایت است : به منظور تاثیر در نتیجه انتخاب Root Bridge تعبیه شده است و این مقدار بر روی سوییچ ها قابلیت تنظیم و تغییر دارد .
  2. فیلد Mac Address که 6 بایت است : هنگامی که دو یا چند سوییچ دارای Priority یکسانی باشند و همانطور که Mac هر سوییچی در جهان یکتا و Uniqe است برای شکستن این تساوی و انتخاب Root Bridge از این فیلد در BID استفاده می شود .


فرمت اصلی استاندارد 802.1d تغییر کرده و فیلد Priority آن به دو فیلد Priority و Extention ID که همان Vlan ID می باشد ، تقسیم شده است .


ارباب حلقه ها - STP - قسمت دوم

این فرمت جدید با پیدایش MST یا Multiple Spaning Tree تغییر کرد که البته توسط PVST+ و MST 802.1s پشتیبانی می شود .در شکل قدیمی Bridge ID ، اگر در System ID از یک MacAddress استفاده می شد ممکن بود یک سوییچ به ازای تمام STP Instance ها (به ازای هر Vlan یک Instance ایجاد می گردد ) Bridge ID یکسانی داشته باشند .وجود چندین STP Instance با یک Bridge ID کاملا گیج کننده است و Cisco در هنگام ساخت فرمت قدیمی Bridge ID به ازای هر Vlan از Mac Address متفاوتی استفاده می کرد که با این کار به ازای هر Vlan ، Bridge ID متفاوتی ایجاد می شود ، اما تعداد زیادی Mac Address در هر سوییچ مصرف میشد .

System ID Extension اجازه استفاده از چندین STP Instance( یک Instance به ازای هر Vlan ) را می دهد بدون اینکه نیاز داشته باشد از Mac Address های متفاوتی به ازای هر Instance استفاده کند .فیلد System ID Extension از 12 بیت Vlan ID و 4 بیت Priority تشکیل می شود .با قرار دادن Vlan ID در Bridge ID یک سوییچ هنگام ساخت Bridge ID می تواند از یک Mac Address استفاده کند و با این کار به ازای هر Vlan یک Bridge ID واحد و یکتا خواهیم داشت .با استفاده از فیلد System ID Extention یک Mac Address در هر سوییچ مصرف می شود به آن Mac Address Reduction نیز می گویند .

چهار معیار اصلی STP در ٍElection ( انتخابات )

در تصمیم گیری های STP از اولویت های زیر به ترتیب در انتخاب استفاده می شود :

1. کمترین مقدار BID (Bridge ID)
2. کمترین مقدار Path Cost تا Root Bridge
3. کمترین مقدار Sender ID
4. کمترین مقدار Port ID

Inferior BPDU چیست ؟

BPDU ای است که از سمت یک سوییچ که Root خود را گم کرده است ، ارسال شده و در این پیام خود را به عنوان Root معرفی میکند .

Superior BPDU چیست؟

سوییچی که این پیغام را ارسال می کند , خود را Root اعلام میکند .این سوییچ از Bridge ID بهتری نسبت به Root Bridge فعلی برخوردار است در نتیجه استحقاق Root شدن را دارد .اگر این BPDU از سوی سوییچ یک مشتری یا کاربر باشد قادر به خراب کاری در توپولوژی شبکه ما می باشد .جهت Block کردن یک پورت و اینکه یک پورت به حالت Forward برود ، STP سه مرحله زیر را به ترتیب دنبال میکند .


1. انتخاب Root Switch :

سوییچی که کمترین مقدار BID را دارا می باشد .

2. انتخاب Root Port :

در تمام سوییچ ها به جز Root Bridge ، پورتی که کمترین مقدار Cost را تا Root Bridge داشته باشد .

3. انتخاب یک Root Bridge به ازای هر Collision Domain :

وقتی چند سوییچ به یک Segment متصل باشند ، سوییچی که BPDU با Cost کمتر را به آن Collision Domain ارسال میکند ،پورت آن به حالت Designated می رود .

انتخاب Root Port چگونه انجام می شود؟

هنگامی که Root Bridge انتخاب شد ، بقیه سوییچ ها نیاز دارند یک پورت را به عنوان Root Port مشخص کنند ( بقیه سوییچ ها ، Root Bridge را از طزیق یکی از Port های خود ببینند.)جهت این کار مراحل زیر انجام میپذیرد :


1. Root Bridge هر 2 ثانیه BPDU با Cost صفر را می سازد و ارسال میکند .

2. هر سوییچ پس از دریافت BPDU و اعمال تغییرات در فیلد های زیر آن را ارسال میکند :
◘ Cost
◘ Forwarding Switch’s Bridge ID
◘ Forwarder’s Port Priority
◘ Forwarder’s Port Number

3.سوییچ ها بر روی پورتی که به حالت Block رفته است BPDU ارسال نمیکند .

4.از بین تمام پورت های یک سوییچ ، پورتی که BPDU با Cost کمتر را دریافت کند ، به عنوان RP انتخاب می شود .

سوییچ برای محاسبه هزینه تا رسیدن به سوییچ Root ، مقدار Cost در BPDU دریافتی را با Cost پورتی که با آن BPDU را دریافت میکند جمع میکند و مقدار Cost جدید سوییچ تا Root Bridge را بدست می آورد و آن را برای بقیه سوییچ ها ارسال میکند .

در شکل زیر توضیح میدم و کاملا متوجه خواهید شد ...


Pic




در شکل بالا SW1 به عنوان Root انتخاب شده است و SW1 ، BPDU هایی را با Cost صفر تولید و ارسال میکند .SW3 دو BPDU دریافت میکند که یکی باCost=0 ( ازFa 01) و دیگری با Cost=38 ( از Fa 04 ) ، سپس SW3 باید Cost خود را تا Root حساب کند .برای این کار Cost دریافتی را با Cost پورت جمع می زند :


Cost = 38 + 19 = 57
Cost = 0 + 100 = 100 

در اینجا حتی با وجود یک لینک مستقیم به Root توسط Fa 01 ، چون Cost محاسبه شده توسط Fa04 کمتر است ، پس این پورت به عنوان Root Port انتخاب می شود .در جدول زیر میتوانید مقدار Cost های پیش فرض در استاندارد 802.1d رو مشاهده کنید .




ارباب حلقه ها - STP - قسمت سوم

اگر در شبکه چندین مسیر موازی وجود داشته باشد ، (یعنی حداقل یک سوییچ ، Root Bridge رو از 2 مسیر دیده است و باید حتما یکی از مسیر ها Block شود ) پورتی که هر سوییچ از اون پورت Root Bridge رو میبیند Root Port نام دارد .به محض اینکه BPDU از یک پورت دریافت می شود Cost آن محاسبه میگردد که این کار از مجموع عدد Cost روی فریم BPDU به علاوه Interface Cost حاصل میگردد .

Path Cost عددی است که به Interface تعلق دارد و Root Path Cost از اضافه شدن Path Cost به Cost مندرج در BPDU بدست می آید .بهترین و کمترین عدد بدست آمده روی سوییچ ، Root Port آن سوییچ می شود . یعنی سوییچ ، Root شبکه رااز آن طریق میبیند . انتخاب Root Port باید برای همه سوییچ ها به غیر از Root Bridge صورت گیرد .تمام سوییچ ها غیر از Root Bridge ملزم به انتخاب Root Port هستند .

  • نکته : محاسبه Cost تنها در زمان دریافت BPDU از پورت صورت میگیرد نه در زمان خروج از پورت

اگر BPDU Cost دریافتی از دو یا چند پورت پس از محاسبه یکسان بود ، برای شکستن این تساوی مراحل زیر را به ترتیب دنبال میکنیم :

1- BPDU ای که کوچکترین مقدار Sender Bridge ID را داشته باشد .

2- BPDU ای که کمترین Sender Port Priority را داشته باشد . ( سوییچ های همسایه قبل از ارسال BPDU ، Port Priority خود را در آن قرار می دهد . )

3- BPDU ای که کوچکترین Sender Port Number را داشته باشد که این مقدار در BPDU دریافتی توسط سوییچ فرستنده SET می شود .


ارباب حلقه ها - STP - قسمت سوم

در شکل بالا فرض کنیم که هیچ تنظیم خاصی صورت نگرفته و همه چیز به حالت Default خود در آمده است ; SW1 دارای Mac Address کوچکتری است ، پس بهترین BPDU را ارسال میکند و به عنوان Root Bridge انتخاب می شود و تمام پورت های آن به حالت Designated می روند . در سوییچ SW2 چون از هر دو اینترفیس ، BPDU با Cost یکسان دریافت میکند , Bridge ID هر دو یکسان است ( چون هر دو زا SW1 ارسال میکند ) و چون Priority پورت های fa 01 , fa02 در SW1 به صورت پیش فرض یکسان است و پورتی که BPDU آن Sender port Number کوچکتری داشته باشد RP می شود که در اینجا پورت fa0/1 در SW2 است .

بررسی نحوه انتخاب Designated port در STP

در صورتی که به یک Segment دو یا چند سوییچ متصل باشد تنها یک سوییچ باید فریم های آن Segment را دریافت و ارسال کند ( برای جلوگیری از Loop و حفظ Bridging Table ) .به ازای هر Segment یک Designated Port داریم و به ازای هر سوییچ یک Root Port داریم ، همچنین تمام پورت های Designated Port , Root Bridge هستند .به ازای هر Segment تنها و تنها یک پورت مامور انتقال داده ها می باشد تا شبکه دچار Loop نشود و سوییچی که در Designated Port ، Segment دارد ، Designated Bridge خوانده می شود .

  • نکته : هر پورتی که Root Port یا Designated Port نباشد ، به حالت Blocking می رود .

وضعیت های مختلف یک پورت در STP

هر پورت باید یک سری مراحل را طی کند تا STP به درستی به وظیفش عمل کند بدین صورت که در ابتدا پورت ها در حالت غیر فعال هستند سپس به حالت Passive رفته و در انتها با اجازه STP به حالت Active می روند .


ارباب حلقه ها  - STP - قسمت چهارم

مجموع حالت های Listening و Learning به عنوان Forwarding Delay شناخته می شود بدین صورت که مدت زمان Listening و Learning هر کدام 15 ثانیه می باشد که مجموعا 30 ثانیه Forwarding Delay طول می کشد .یک پورت زمانی به حالت Forwarding می رود که در حالت های Designated Port یا Root Port باشد و در غیر این صورت در وضعیت Blocking باقی می ماند.

تایمر ها در STP چگونه عمل می کنند؟

STP از سه تایمر در عملیات های خود استفاده می کند و این زمان بندی توسط Root Bridge در پیام های Configuration BPDU به بقیه اعلام میگردد .

  • Hello Time : 2 ثانیه : زمان ارسال Configuration BPDU توسط Root
  • Froward Delay : 15ثانیه : مدت زمان هر کدام از حالت های Learning و Listening
  • Max Age : 20 ثانیه  : طول عمر BPDU


  • نکته : زمان Convergence در STP معمولا بین 30 تا 50 ثانیه است .

همگرایی پس از تغییر در توپولوژی STP

منطق STP در هنگام Stable بودن شبکه این است که پروسه ارسال Hello را چک کند که در حالت Normal باشد و هنگامی که پروسه ارسال Hello تغییر کرد ، نیاز است که STP عکس العمل نشان دهد و بر اساس توپولوژی جدید تصمیم گیری نماید .منطق STP در هنگامی که توپولوژی شبکه Stable می باشد :

  1. Root Bridge به صورت پریودیک براساس Hello Time دو ثانیه ای BPDU را ساخته و ارسال می کند .
  2. تمام سوییچ های Non Root Bridge به صورت منظم یک کپی برابر اصل ( :D ) از BPDU سوییچ Root را از روی Root Port دریافت میکند .
  3. تمام سوییچ ها BPDU را UPDATE و از طریق Designated Port ارسال میکنند .
  4. سوییچ ها از طریق پورت BPDU ، Block را ارسال نمی کنند .
  5. پورتی از سوییچ که به حالت Blocking رفته است به صورت متناوب از پورت Designated اون Segment ، یک کپی از BPDU را دریافت میکند .

اگر اختلالی در هر یک از رویدادهای فوق رخ می دهد ، STP متوجه می شود که توپولوژی تغییر کرده و نیاز به Convergence دارد مثلا سوییچ Root ( Root Bridge ) ممکن است خاموش شود که با این اتفاق بقیه سوییچ ها هیچ BPDU ای را دریافت نمیکنند و پس از اینکه MAX Timer منقضی شد ( به صورت پیش فرض 20 ثانیه ) دوباره سوییچ بر اساس منطق STP ، Root جدید را انتخاب می کنند .

پیام های STP شامل چه چیزهایی می شوند؟

به اطلاعات یا Message هایی که در لایه 2 بین سوییچ ها مبادله می شود ، پیام های BPDU می گوییم .2 گونه Message یا پیام در STP بین سوییچ ها رد و بدل می شود :


1. Configuration BPDU
برای محاسبات Spanning Tree استفاده می شود .

2. TCN BPDU
برای اعلان تغییرات پیش آمده در ساختار شبکه استفاده می شود .

نکات مهم :

پیام Configuration BPDU از Root Bridge به بقیه سوییچ ها ارسال می شود .

پیام TCN از سوییچ ها به سمت Root Bridge (هنگام تغییر ) ارسال می شود .

در یک شبکه سالم و Stable اکثر پیام های STP از نوع Configuratuion BPDU هستند .


ارباب حلقه ها  - STP - قسمت چهارم

نکته : TCN فقط شامل 3 فیلد ابتدایی است .

بررسی تغییر Topology در STP

به هنگام بروز هر گونه تغییر وضعیت در پورت و ایجاد اشکال یا اتصال یک Segment به Lan ، STP باید با خبر و دست به کار شود و محاسبات لازم را صورت بدهد .یک سوییچ تغییر را از سمت Root Port به سمت Root Bridge ارسال و گزارش میکند و سوییچ های دریافت کننده پیام تغییر ، به فرستنده تغییرات ، پیام Ack را ارسال میکنند ( به قولی رسید میدن که پیام رو دریافت کردن ) .


هنگامی که یک تغییر در وضعیت یک پورت سوییچ به وقوع می پیوندد ، سوییچ این تغییر را به صورت TCN از طریق Root Port به Root Bridge ارسال میکند . TCN حاوی جزییات تغییر نیست بلکه یک خبر درباره یک تغییر است که از طزیق Root Port سوییچ به سمت Root Bridge ارسال می گردد .UPStream Switch به محض دریافت TCN به فرستنده پیام Ack را ارسال میکند و سوییچ فرستنده تا زمانی که Ack را دریافت نکند دست بردار نیست و همچنان به ارسال TCN مبادرت میکند .


سوییچ دریافت کننده TCN در هنگام ارسال Configuration BPDU قسمت MSB یا Topology Change Acknowledge را علامت می زند و رسیدن TCN را اطلاع میدهد تا دیگر TCN فرستاده نشود . حالا نوبت سوییچ بالایی است که با ارسال TCN سوییچ های دیگر رو از تغییر مطلع سازد و در این حالت یک گام به Root Bridge نزدیک تر شده و مراحل رسید و ارسال ACK مطابق بالا تکرار می گردد .در نهایت پیام به Root Bridge می رسد .


Root Bridge به محض دریافت Topology Change ACK ، TCN را ارسال می کند و در هنگام ارسال Configuration BPDU بعدی Topology Change Flag رو که مشخص کننده تغییر در شبکه است رو علامت می زند .فایده ارسال این علامت این است که سوییچ ها به محض دریافت Topology Change Flag در Configuration BPDU زمان طول عمر Bridging Table رو به میزان Forward Delay کاهش می دهند یعنی 300 ثانیه به 15 ثانیه کاهش پیدا میکند و در این مدت اگر فریمی از Mac Address خاصی دریافت نشود از جدول حذف می شود که این کار باعث بهبود و سرعت در زمان همگرایی شبکه یا Convergence Time می گردد .


پس همانطور که گفتم برای اعلان تغییر در توپولوژی شبکه از TCN BPDU استفاده می شود .هنگامی که پورتی به هر دلیل فعال یا غیر فعال میشه ، سوییچ هر 2 ثانیه یک فریم TCN رو از Root Port خودش به سمت سوییچ بالا دستی ارسال می کند تا زمانیکه یک پیام ACK از اون سوییچ بالا دستی دریافت کند ( مطمئن بشه که پیام TCN بهش رسیده ) این روند همینطور ادامه پیدا میکند تا به دست سوییچ Root برسد .


سپس Root Bridge یک Configuration BPDU را که Flag آن 1 شده به همه پورت های خودش ارسال میکند .مابقی سوییچ ها با دریافت این BPDU و مشاهده flag یک شده , عمر تمام رکورد های جدول Mac خود رو به Forward Delay یعنی 15 ثانیه تغییر می دهد .هنگامی که تغییری درتوپولوژی شبکه ایجاد می گردد احتمال تغییر در Cam Table بسیار زیاد است و با این کار باعث می شود آدرس های Mac جدول زودتر Update شود و در این 15 ثانیه به سایر دستگاهها اجازه داده می شود تا Mac Address خود را Update کنند .


دلیل اینکه سوییچ سریعا و بلافاصله جدول Mac خود را پاک نمیکند این است که ممکن است بسیاری از رکورد ها صحیح باشد و با پاک کردن کل جدول توسط سوییچ ها در لحظاتی Unicast های ناشناخته ای در شبکه Flood شود و شبکه رامختل کند .

معرفی انواع مختلف تغییر در Topology

1. Direct Tolpology Changes ( تغییرات توپولوژی مستقیم )



ارباب حلقه ها  - STP - قسمت پنجم


در این حالت وقتی یکی از اینترفیس های سوییچ Down می شود ( مثلا لینک بین دو سوییچ قطع شود ) ، سوییچ بلافاصله از قطعی مطلع شده و چون توپولوژی تغییر کرده باید بقیه سوییچ ها از این تغییر توپولوژی اطلاع پیدا کنند . در شکل فوق شبکه Stable را نیز میبینیم که ترافیک در تمام پورت ها جز Fa 0/12 ( بلاک ) جریان دارد . حالا اگر لینک بین سوییچ A و سوییچ C قطع شود ، چه مشکلی پیش می آید ؟

♦ در ابتدا سوییچ C بر روی Fa 00 و سوییچ A بر روی پورت Fa 12 متوجه قطعی می شوند .
♦ سوییچ BPDU ، C ای را که از پورت Fa 1/1 دریافت کرده را حذف میکند ( چرا که این پورت Down شده و این BPDU دیگر معتبر نیست ).
♦ حال سوییچ C باید یک TCN از Root Port خودش به سمت Root Bridge ارسال کند اما همانطور که میبینیم Root Port سوییچ C همان پورتی است که Down شده و میبینیم که این کار امکان پذیر نیست و سوییچ A که پورت Fa 1/2 اون Down شده باید یک TCN به سمت Root Bridge بفرسته اما چون خودش Root Bridge است این کار نیاز نیست .
♦ سوییچ A که Root Bridge است یک Configuration BPDU که Flag اون 1 شده را روی تمام پورت هایش ( در اینجا فقط Fa 1/1 ) میفرستد و همه سوییچ ها این فریم را دریافت میکنند و ضمن آگاهی از ایجاد تغییر در توپولوژی ، این فریم را برای همسایه های خود نیز ارسال میکند .
♦ سوییچ های B,C این BPDU Configuration را میگیرند و عمر رکورد های جدول MAC خود را به 15 ثانیه کاهش میدهند . ( این سوییچ ها نمی دانند که شبکه چه تغییری کرده و فقط می دانند که یک تغییری رخ داده است .)
♦ سوییچ C چون BPDU رو روی پورت Fa 1/2 که در حالت Block است دریافت کرده ( این BPDU تنها BPDU است که سوییچ C دریافت کرده ) و این پورت به Root Port تبدیل شده و از حالت Blocking به Forwarding می رود .

2. Indirect Topology Changes ( تغییرات توپولوژی غیر مستقیم )



ارباب حلقه ها  - STP - قسمت پنجم




در شکل فوق قطعی لینک بین سوییچ A و سوییچ C بصورت غیر مستقیم اتفاق افتاده است ، مثل زمانیکه بین این ارتباط یک HUB قرار گرفته باشد و یا وسط لینک یک ISP قرار گرفته است که ترافیک بین دو سوییچ را فیلتر کرده است و در این حالت پورت هر دو سوییچ UP است و قطعی را بصورت مستقیم متوجه نمی شوند .

راه حل STP برای بازیابی این مشکل مراحل زیر را انجام می دهد :

♣ سوییچ های A و C مشکلی در پورت های خود نمی بینند ، اما Data در میانه راه فیلتر شده و به دست دیگری نمی رسد .
♣ هیچ قطعی بر روی لینک تشخیص داده نشده و بنابراین هیچکدام TCN ارسال نمیکنند .
♣ سوییچ C بهترین BPDU دریافتی از Root Bridge را بر روی پورت Fa 11 دریافت و ذخیره کرده است ، الان لینک بین این دو سوییچ مشکل پیدا کرده و BPDU دیگری از پورت Fa 11 دریافت نشده تا Max Age Timer را Refresh کند و بعد از زمان Max Age ( 20 ثانیه ) BPDU را حذف می کند . هم اکنون سوییچ C باید منتظر باشد تا BPDU را از طریق یکی از پورت ها از Root Bridge بشنوند .
♣ Configuration BPDU بعدی فقط روی پورت Fa 12 به سوییچ C می رسد ( چرا که لینک بین سوییچ A و C دچار مشکل شده است ) . این BPDU به عنوان بهترین BPDU دریافتی ذخیره می شود و پورت Fa 12 به عنوان Root Port انتخاب می شود و از حالت Blocking پس از گذراندن حالت های Listening و Learning به حالت Forwarding تغییر وضعیت می دهد.
در این حالت به علت وجود یک خطای غیر مستقیم ، تغییرات مانند حالت قبل به سرعت حس نشد و عدم دریافت BPDU در بازه زمانی مشخص ، سوییچ C را از مشکل بوجود آمده مطلع کرده و باعث عکس العمل می شود . این نوع خطا نسبت به حالت مستقیم دیرتر تشخیص داده می شود و زمان Convergence آن طولانی تر است .

3. Insignnificant Topology Changes ( تغییرات توپولوژی ناچیز )

در این حالت مانند شکل زیر یک PC به سوییچ C متصل شده است . با خاموش و روشن شدن PC پورت Fa 2/12 سوییچ C روشن و خاموش می شود در این حالت سوییچ C یک قطعی مستقیم را متوجه می شود و برای سوییچ بالادستی TCN می فرستد تا به سوییچ Root برسد . با هر بار خاموش روشن شدن PC مراحل زیر اتفاق می افتد :

♠ PC متصل به پورت Fa 212 خاموش می شود و سوییچ C تشخیص می دهد که یک قطعی مستقیم روی پورت Fa 212 رخ داده است .
♠ سوییچ C فریم های TCN را تولید میکند و آن ها را روی Root Port یا Fa 1/1 به سمت سوییچ A می فرستد .
♠ سوییچ A ، این TCN را دریافت کرده و Ack را برای C ارسال میکند . سپس سوییچ A یک Configuration BPDU که Flag آن را یک قرار داده تولید میکند و به همه سوییچ ها می فرستد که هدف این کار این است که همه سوییچ ها بدانند تغییری در ساختار شبکه روی داده است .
♠ این پیام توسط سوییج های C و B دریافت شده که باعث می شود عمر رکورد های جدول Mac آن ها به 15 ثانیه کاهش یابد .

همونطور که دیدید ، اتفاق خاصی در شبکه رخ نداده و پورتی دچار تغییر وضعیت نشده و فقط عمر جدول Mac در سوییچ ها کاهش می یابد .


ارباب حلقه ها  - STP - قسمت پنجم

شبکه ای را در نظر بگیرید که ده ها کامپیوتر به سوییچ ها متصل اند که مرتبا خاموش و روشن می شوند و با هر بار خاموش و روشن شدن تمامی سوییچ های شبکه عمر رکورد های جدول Mac خود را به 15 ثانیه کاهش می دهند که با این اتفاق ممکن است بسیاری از رکورد های جدول Mac حذف گردند و در نتیجه سوییچ ها از محل قرار گیری کامپیوتر ها مطلع نباشند که باعث می شود بسته های Unknown Unicast را روی تمام پورت ها ارسال کنند و کل شبکه از این بسته ها پر شود و شبکه را مختل نماید .

جهت رفع این مشکل سیسکو یک راهکار ارائه داده که Stp Port Fast نام دارد و با فعال کردن این ویژگی روی پورت هایی که به Pc ها متصل هستند ، دیگر به ازای روشن و خاموش شدن PC ها TCN ارسال نمی گردد و همچنین مراحل Listening و Learning در این پورت ها حذف می شوند و به محض روشن شدن PC این پورت ها به حالت Forward می رود .

STP برای هر Vlan

تا الان هر چه در رابطه با STP صحبت کردم رو تعمیم میدم به هر Vlan ، به همین راحتی ...پیاده سازی STP درون Vlan توسط Cisco و IEEE متفاوت است .CST ( Common Spaning Tree ) در استاندارد 802.1q تعریف شده و به پیاده سازی تنها یک STP به ازای هر Vlan اشاره میکند . BPDU هایش به صورت Untagged و در Native Vlan مبادله میگردند که مزیتش سادگی و استفاده کم از منابع و Resource شبکه است ، اما در کنار مزیت هایش یک سری اشکالات نیز دارد :

☺ مثلا یک مسیر ترانک ارتباطی فریم های یک Vlan خاص رو عبور ندهد که نتیجش اینه که ارتباط درون یک Vlan بدرستی برقرار نمی شود .ولی در سیسکو در هر Vlan و به صورت کاملا مجزا یک STP اجرا میکند . ( یعنی چی ؟ )یعنی یک سوییچ در Vlan2 می تواند نقش Root Bridge را ایفا کند در حالیکه در Vlan3 نقش دیگری ایفا کند به قولی یک درخت مجزا برای هر Vlan شکل می دهد که فقط مختص به همان شبکه لایه 2 است به این خاطر بهش Per Vlan Spaning Tree یا PVST می گویند .PVST با CST سازگار نیست که شرکت سیسکو نسخه پلاس رو به بازار عرضه کرد که بهش میگن PVST+ که سازگاری بین نسخه های CST و PVST و PVST+ را دارد و روی ترانک های 802.1q نیز قادر به کار است .

نحوه تنظیم Root Bridge چگونه است؟

با استفاده از تغییر Priority یا اولویت می توان در انتخاب Root Bridge دستکاری کرد .به صورت پیش فرض و با هم عرض بودن سوییچ ها و داشتن اولویت مساوی ، ممکن است یک سوییچ لایه Access روت شده باشد و به جای سوییچ لایه Core محتمل بار زیادی شود که ما برای حل این مساله 2 راه پیش رو داریم :


  1. سوییچی را به عنوان Root Bridge انتخاب و تنظیم کنیم .
  2.  سوییچ دیگری رو به عنوان Secondry Root Bridge برای موقعی که Root Bridge دچار مشکل شود تنظیم کنیم .
  • نکته : یکی از فاکتور های مهم در قرار گیری Root Bridge مرکز بودن ( مرکزیت ) در شبکه است و نزدیک بودن سوییچ به Server Farm ما هستش .

به دو صورت قابلیت تنظیم Root Bridge را داریم :

  •   پایین آوردن Priority
  • استفاده از Macro


این ماکرو ابتدا زمانبندی STP را به حالت پیش فرض بر میگرداند ، بعد با تغییر اولویت سوییچ موجب Root شدن آن می شود .( البته تضمینی برای Root شدن سوییچ در صورتیکه سوئیچی با اولویت بسیار پایین وبه صورت غیر پیش فرض تنظیم شده باشد نیست و من روش اول رو پیشنهاد میکنم .)

در زمان اجرای ماکرو سوییچ اولویت Root Bridge را می سنجد و اگر اولویت اون Root Bridge زیر 24576 بود ، Priority خودش رو 4096 تنظیم میکند اما اگر دارای اولویتی بالاتر بود ، Priority خودش رو به 24576 تغییر و تنظیم می کند و برای Secondry Root اولویت 28672 تنظیم می شود ( البته با این فرض که اولویت تمام سوییچ ها در حالت Default 32768 است .)


  • ☻ جالب است بدانید ☻

هیچ فرمولی برای تعیین اولویت Secondry Root وجود نداره و سیسکو دلش خواسته این عدد رو بزاره .مهمترین کار در تنظیم STP انتخاب Root Bridge است و بقیه کارا خودش با یاری پروردگار توسط الگورتیم STA انجام میشه اما قبلا هم که گفته بودم اگر بین مسیر های چند گانه موازی با Cost برابر بخواهیم فرق قایل بشیم چهار تا شرط داشت که در تصمیم گیری به عنوان معیار های STP مطرح است .

  • پایین ترین BID
  • پایین ترین Root Path Cost
  • پایین ترین Sender BID
  • پایین ترین Port ID

منعطف بودن STP به چه معناست؟

زمانیکه سوییچ BPDU را دریافت می کند ، ارزش پورت خود را به ارزش دریافتی بر روی BPDU اضافه کرده و Root Path Cost را محاسبه می کند که این Cost مذکور به ازای پورت و Vlan قابلیت تنظیم دارد .در صورتیکه سوییچ با دو پورت به Segment متصل باشد و پورت ها ارزش یکسان داشته باشند ، از Port ID برای انتخاب یک پورت و Block کردن پورت دیگری کمک می گیرد .Port ID تنها یک عدد اختصاص داده شده به پورت است که قابل تنظیم بوده و از 16 بیت تشکیل می شود :


8 بیت اولویت ( Port Priority ) + 8 بیت Port Number که این عدد پورت یا Port Number از 0 تا 255 بوده و غیر قابل تغییر است اما عدد Port Priority بصورت پیش فرض 128 بوده و با استفاده از دستور زیر قابل تغییر است :


Moein_vafaei_SW(config)#spanning-tree vlan 2 priority ?
  <0-61440>  bridge priority in increments of 4096



و نیز برای تغییر تایمر ها از دستورات زیر استفاده می کنیم :


Moein_vafaei_SW(config)#spanning-tree vlan 2 hello-time ?
  <1-10>  number of seconds between generation of config BPDUs.

Moein_vafaei_SW(config)#spanning-tree vlan 2 forward-time ?
  <4-30>  number of seconds for the forward delay timer

Moein_vafaei_SW(config)#spanning-tree vlan 2 max-age ?
  <6-40>  maximum number of seconds the information in a BPDU is valid



بهبود همگرایی و Convergence در پروتکل STP

همگرایی در شبکه به حالتی گفته می شود که شبکه از حالت ناپایداری به حالت پایدار می رسد ، زمان Convergence هر چقدر کمتر باشد بهتر است و از راه های مختلف می توان Convergence یا همگرایی را بالا برد .

  •   Port Fast

جهت اتصال سریع کامپیوتر ها به سوییچ های Access

  •   Uplink Fast

جهت بکار بردن لینک Redundant در سوییچ های Access به مرکز شبکه

  •   Backbone Fast

جهت بهبود یافتن همگرایی و Convergence در Backbone بعد از تغییرات

قابلیت PortFast

همونطور که قبلا هم صحبت کردیم برای بالا آمدن یک پورت و رسیدن به وضعیت Forwarding ، دو زمان Learning و Listening هر کدام 15 ثانیه که در کل 30 ثانیه وقت صرف Forward delay می شود که اگر از تکنولوژی های دیگری از جمله PAgP نیز بر روی لینک استفاده کنیم زمان بالا آمدن پورت را به حدود 50 ثانیه افزایش می دهد که برای پورت های متصل به یک کامپیوتر نسبتا زیاد و طولانی است .

ما میتوانیم با تنظیم قابلیت Port Fast روی پورت هایی که به Workstation ها متصلند و نیازی به احتیاط زیادی در مورد STP نیستش ، دیگر نیاز به مراحل Listening و Learning نیست و مستقیما به حالت Forward می رود و این باعث میشه دیگه اون زمان زیاد برای بالا آمدن پورت صرف نشود .از دیگر مزیت های Port Fast اینه که به ازای تغییر وضعیت در پورت TCN ایجاد نمی گردد .


Switch(config-if-range)#spanning-tree portfast

در مثال زیر پورت های Fastethernet 01 , 02 عضوی از Vlan 20 هستند که ویژگی Port Fast برایش فعال شده است .

Switch#show spanning-tree interface gigabitEthernet 0/1 portfast
VLAN0020            enabled
Switch#show spanning-tree interface gigabitEthernet 0/2 portfast
VLAN0020            enabled

بهتر است بدانیم اگر یک پورت رو بخواهیم به یک Pc وصل کنیم با دستور زیر می تونیم سه دستور رو مستقیما به صورت اتوماتیک انجام دهیم : اول پورت رو حالت Access ببریم ، دوم ویژگی Port Fast رو بر روش فعال کنیم و سوم اینکه ویژگی Aggregation رو بر روش غیر فعال و Disable کنیم از دستور زیر استفاده میکنیم :

Switch(config)#interface gigabitEthernet 0/3
Switch(config-if)#switchport host

UplinkFast چیست؟

در زمانی که سوییچ Access به دو عدد سوییچ Distribution متصل باشد پورت Redundant به 50 ثانیه زمان نیاز دارد تا پس از قطع شدن پورت اصلی شروع به کار کند ، ما با استفاده از قابلیت Up Link Fast این زمان رو به حداقل می رسانیم که طی چندین ثانیه این اتفاق رخ دهد و لینک Backup جایگزین لینک اصلی ( لینکی که مختل شده ) می شود .به قولی این ویژگی باعث بهبود همگرایی STP در زمان از دست رفتن لینک ها می شود .باید روی سوییچ Access این قابلیت UplinkFast رو فعال کنیم .


Moein_Vafaei_SW(config)#spanning-tree uplinkfast ?
  max-update-rate  Rate at which station address updates are sent

به محض ورود دستور ، UplinkFast در کل سوییچ و در تمامی Vlan ها اعمال میگردد و باعث می شود تمایل این سوییچ برای Root Bridge شدن کم شود و Priority آن به 49152 برسد و همچنین به Cost پورت ها 3000 واحد اضافه می گردد .

  • نکته : این دستور رو نباید بر روی Root Bridge استفاده کنیم اما برای سوییچ ها Access قابل استفاده است .

در دستور بالا مقدار max-update-rate را مشاهده می کنید ، چه فایده ای دارد ؟سوییچ در هنگام تغییر دادن لینک خود ، Bridge Table و پورت خروجی را به سادگی تغییر می دهد ، اما به سوییچ بالاتر نیز این تغییر و جا به جایی Mac Address ها باید گزارش شود تا عملیات سرعت گیرد .این عملیات با ارسال یک سری Multicast Frame به آدرس0100.0ccd.cccd از آدرس های CAM انجام می شود و سرعت ارسال این فریم ها در واحد ثانیه یا Max-update-rate قابل تنظیم است که به صورت پیش فرض 150pps است .با دستور زیر وضعیت Uplink Fast را می توانیم مشاهده کنیم .


Moein_Vafaei_SW#show spanning-tree uplinkfast

قابلیت BackboneFast چیست؟

BackboneFast جهت بهبود زمان Max Age در نظر گرفته شده و نهایتا زمان Convergece را از 50 ثانیه به 30 ثانیه کاهش می دهد . قابلیت Backbone Fast روی تمامی سوییچ ها باید فعال گردد و البته که به صورت پیش فرض غیر فعال است .Backbone Fast قطع شدن یک سوییچ را از روی لینک دیگر سوییچ ها تشخیص می دهد .

Moein_Vafaei_SW(config)#spanning-tree backbonefast

و با دستور زیر وضعیت مربوط به Backbone Fast قابل مشاهده است .

Moein_Vafaei_SW#show spanning-tree backbonefast

امنیت در STP چگونه برقرار می شود؟

همانطور که در مقالات گذشته نیز صحبت کردیم STP از پیام های BPDU استفاده می کند . در شبکه بسیار مهم است که Root Bridge را در کجای شبکه قرار می دهیم و به همین جهت است که انتخاب Root Bridge را به صورت دستی و در اختیار مدیران شبکه قرار داده اند . چرا که تصور کنید سوئیچی نا شناخته به محل از شبکه متصل می شود و بخاطر داشتن یک سری شرایط بهتر نسبت به Root Bridge اصلی اقدام به معرفی کردن و کسب کردن نقش Root Bridge برای خودش داره . سیسکو خصوصیت هایی برای جلوگیری از این کار تعبیه کرده است بنام های Root Guard و BPDU Guard .

Root Guard چیست؟

ما می توانیم از ویژگی Root Guard به منظور کنترل مکان سوییچ Root Bridge استفاده کنیم . بر طبق قانون تمامی سوییچ ها از Bridge ID مربوط به سوییچی که به عنوان Root Bridge انتخاب می شوند اگاهی کامل دارند . اگر ما ویژگی Root Guard را بر روی سوییچ ها فعال کنیم در صورتی که یک پیام BPDU بهتر دریافت کند به Root Bridge اصلی خیانت نمیکند و از انتخاب سوییچ دیگری به عنوان Root Bridge جلوگیری میکند و درکنار این قضیه پورتی را که پیام BPDU بهتر را دریافت کرده در وضعیت Root – Inconsistent قرار می دهد و انتقال هر نوع ترافیک کاربران از این پورت امکان پذیر نخواهد بود .


  • نکته : پورتی که در وضعیت Root – Inconsistent قرار بگیرد تنها می تواند پیام های BPDU را دریافت کند .
  • نکته : به صورت پیش فرض ویژگی Root Guard بر روی تمامی پورت های سوییچ غیرفعال می باشد .



Moein_Vafaei_SW(config)#spanning-tree guard root

با دستور زیر می توانیم لیست پورت هایی را که در وضعیت Root – Inconsistent قرار دارند را مشاهده کنیم .

Moein_Vafaei_SW#show spanning-tree inconsistent

BPDU Guard چیست؟

این خصوصیت برای حفاظت از پورت هایی که Port Fast بر رویشان فعال شده است ، ارائه گردیده است .مثلا پورتی را که ویژگی Port Fast بر رویش فعال شده را اشتباها به یک سوییچ در شبکه می زنیم و باعث ایجاد حلقه یا Loop در شبکه خواهیم شد یا اینکه احتمال داره سوییچی که متصل به این پورت می شود خودش را به عنوان Root Bridge انتخاب کند .

در صورتی که بر روی پورتی که ویژگی BPDU Guard بر رویش فعال شده باشد ، هر نوع BPDU ای دریافت شود وضعیت پورت به حالت errdisable تغییر خواهد کرد و تمامی ترافیک های انتقالی بر روی خودش رو بلوکه میکند و یک جورایی در وضعیت Shutdown قرار میگیرد ، برای بر طرف کردن این موضوع هم میشه پورت رو به صورت دستی دوباره فعال کرد یا از حالتی استفاده کرد که بعد از گذشت زمانی به صورت اتوماتیک پورت فعال گردد .با دستور زیر می توانیم ویژگی BPDU Guard را بر روی همه اینترفیس هایی که ویژگی Port Fast بر روی آن ها فعال شده نیز فعال کنیم :

Moein_Vafaei_SW(config)#spanning-tree portfast bpduguard default

و با دستور زیر ویژگی BPDU Guard را فعال یا غیز فعال کنیم :

Moein_Vafaei_SW(config)# spanning-tree bpduguard enable
Moein_Vafaei_SW(config)#no spanning-tree bpduguard enable


اختلال در دریافت پیام های BPDU

تمام عملکرد پروتکل STP به ارسال و دریافت پیام های BPDU توسط سوییچ ها وابسته است ، در نتیجه ارسال تناوبی و کامل پیام های BPDU توسط سوییچ Root Bridge برای زیر نظر گرفتن تغییرات پیش آمده در توپولوژی شبکه ضروری است .حالا در نظر بگیرید که یک سوییچ از دریافت پیام های BPDU عاجز باشد .


در شرایط معمولی هنگامی که چنین مشکلی پیش میاد ، سوییچ این پدیده را به عنوان بروز یک خطا در دستگاه های همسایه خودش در نظر میگیره و پروتکل STP را دوباره اجرا میکند و پورتی که به عنوان Block Port قرار گرفته رو به Root Port بر میگزیند .

اما شرایطی پیش بیاید که دریافت نکردن پیام های BPDU توسط سوییچ در نتیجه بروز ایرادی در کار دستگاه همسایه نبوده و یا هیچ تغییر خاصی در توپولوژی شبکه روی نداده باشد که باعث ممانعت از ارسال پیام های BPDU به سمت سوییچ یاد شده گردد که این تصور سوییچ و عکس العمل آن برای اجرای دوباره پروتکل STP در زمان دریافت نکردن پیام های BPDU باعث بروز چرخه یا Loop خواهد شد .برای بطرف کردن این موضوع سیسکو از دو ویژگی استفاده کرده است .

♣Loop Guard
♣ UDLD

ویژگی Loop Guard چه کاری انجام می دهد؟

پورتی از سوییچ که در وضعیت Block قرار دارد توانایی دریافت پیام های BPDU را دارد و تا زمانیکه این پیام را دریافت میکند در وضعیت Blocking خود باقی می ماند .حال فرض کنید این پورت به هر دلیلی نتواند پیام های BPDU را دریافت کند ، اطلاعات مربوط به آخرین BPDU خود را تا زمان Max Age نگه می دارد ، بعد از گذشت زمان Max Age سوییچ اطلاعات اخرین BPDU را حدف می کند و فرض میکند که این پورت دیگر نیاز نیست در حالت Blocking قرار بگیرد و پورت را در انتخابات STP وارد میکند و تا مرحلهForward شدن این کار را ادامه میدهد که این کار باعث بروز Loop می گردد .

برای جلوگیری از این ایجاد Loop میشه از ویژگی و تکنیک Loop Guard استفاده کرد . این ویژگی وضعیت دریافت BPDU توسط پورت هایی که در حالت Desiganted نیستند را زیر نظر دارد .یعنی چی ؟ یعنی اینکه این پورت های غیر Designated تا زمانیکه پیام های BPDU را دریافت کنند ، میتوانند رفتار پیش فرض و طبیعی خودشون رو داشته باشند ولی زمانیکه دیگر پیام BPDU را دریافت نکنند پورت مورد نظر به حالت Loop-Inconsistent می رود که باعث می شود از بروز Loop و حلقه جلوگیری شود .


  • نکته : بصورت پیش فرض ویژگی Loop Guard بر روی تمامی پورت های سوییچ غیر فعال است .

با دستور زیر می توانیم ویژگی Loop Gurad را بر روی همه پورت های سوییچ فعال کنیم :

Moein_vafaei_SW(config)#spanning-tree loopguard default

و با دستور زیر Loop Guard رو بر روی اینترفیس مورد نظر خود فعال یا غیر فعال می کنیم :

Moein_vafaei_SW(config-if)#spanning-tree guard loop
Moein_vafaei_SW(config-if)#no spanning-tree guard loop

ویژگی BPDU Filtering چیست؟

بصورت پیش فرض STP بر روی تمام پورت های یک سوییچ فعال است و از بروز Loop در شبکه جلوگیری میکند و پیام های BPDU از طریق پورت ها ( حتی Port Fast ) ارسال می گردند .توصیه می گردد که پروتکل STP را بر روی تمامی پورت های سوییچ در وضعیت فعال نگه داریم اما در شرایط خاص مثلا بر روی پورتی که در حالت Port Fast قرار گرفته است می توانیم با جلوگیری از ارسال پیام های BPDU را در روی همان اینترفیس غیر فعال کنیم .


  • نکته : بصورت پیش فرض ویژگی BPDU Filtering بر روی تمامی پورت های سوییچ در وضعیت غیر فعال قرار دارد .


با دستور زیر ویژگی BPDU Filtering را بر روی تمامی پورت های سوییچ که Port Fast روی آن ها فعال است ، فعال کنیم :


Moein_vafaei_SW(config)#spanning-tree portfast bpdufilter default

و با دستور زیر BPDU Filter را بر روی اینترفیس مورد نظر خود فعال یا غیر فعال میکنیم :

Moein_vafaei_SW(config-if)#spanning-tree bpdufilter ?
  disable  Disable BPDU filtering for this interface
  enable   Enable BPDU filtering for this interface

دفاع و تقابل در مقابل BPDU های مخرب

Inferior BPDU :

BPDU ای است که از سمتی یک سوییچ که Root Bridge خود را گم کرده است ارسال می شود و در این نوع پیام سوییچ خود را Root معرفی میکند .

Superior BPDU :

این BPDU توسط سوییچی ارسال می شود که از Bridge ID بهتری نسبت به Root Bridge فعلی برخوردار است و خود را Root اعلام میکند که استحقاق Root شدن را نیز دارا می باشد اما از دارای تبعات تخریبی نیز هست چرا که اگر این BPDU از سوی سوییچ یک مشتری باشد باعث ایجاد اختلال در شبکه می گردد و توپولوژی شبکه را بهم می ریزد و مسیر عبور ترافیک را بهم می زند .

جهت مقابله با این نوع BPDU های مخرب از دو راه حل می توان استفاده کرد :

Root Guard چیست؟

وقتی دستور Root Guard را بر روی سوییچ های خود تنظیم و فعال کنیم در صورتی که پیام Superior BPDU دریافت گردد پورت به حالت Root – Inconsistent می رود و بلوکه می شود و تا زمانی که پیام های Superior BPDU وجود داشته باشند پورت به حالت نرمال بر نمیگردد . ما با این تکنیک محدوده قلمرویی برای Root شدن تعریف میکنیم .


Moein_Vafaei_SW(config)#spanning-tree guard root

BPDU Guard چیست؟

اگر بر روی پورتی که BPDU Guard قعال است پیام BPDU دریافت گردد پورت فورا به حالت errdiable می رود و دیگر ترافیکی را از خود عبور نمی دهد .ویژگی فوق به صورت پیش فرض غیر فعال است و پیش نهاد میگردد بر روی پورت هایی که Port Fast بر رویشان فعال است و انتظار پیام BPDU نداریم فعال گردد .


Moein_Vafaei_SW(config)# spanning-tree bpduguard enable

جلوگیری از گم شدن BPDU

در حالتی که بر روی پورتی اصلا BPDU دریافت نشود چه راهکاری برای سوییچ موجود است ؟

BPDU Skew Detection

این ویژگی (BPDU Skew Detection ) تاخیر در دریافت BPDU ها را محاسبه میکند و گزارش می دهد که زمان تاخیر بنام Skew Time اندازه گیری و ثبت می شود و از طریق Syslog به مدیر گزارش میگردد .

Loop Guard

که در مباحث فوق به توضیح این موضوع پرداخته ایم .


معین وفایی
معین وفایی

متخصص شبکه های سیسکو و امنیت زیرساخت

متخصص شبکه های سیسکو و امنیت در شبکه های سیسکو ** متخصص ASA & Fortigate ** دارای مدارک رسمی MTCNA*MTCRE*MCTWE*MTCTCW*MTCUME علاقه مند به Virtualization & Linux توانمند در ایجاد سیستم های IDS و IPS مبتنی بر بستر Open Source

نظرات