پروتکل STP چیست؟ بررسی ساختار پروتکل Spanning Tree سیسکو

پروتکل STP سیسکو چیست و چگونه کار می کند؟ همانگونه که بسیاری از دوستان عزیز میدانند برای داشتن پهنای باند بیشتر در شبکه میتوان سویچها و روترها را با چند لینک بهم متصل نمود که با این کار نوعیRedundancy نیز در شبکه ایجاد کرده ایم یعنی مثلا بین دو سویچ دو تا لینک فیزیکی برای ارتباط قرار داد یا از یک PC در یک Segment از دو مسیر با PC دیگر درSegment دیگر ارتباط داشت اما این موجب بوجود آمدن Loop میشود همانطور که در شکل ذیل نشان داده شده است :

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
روش عملکرد پروتکل Spanning Tree در سویچ های سیسکو

بنابراین اگر PC A یک ARP که Broadcast است ارسال کند مثلا برای پیدا کردن PC B در شبکه (که قصد ارسال بسته ای را به آن دارد )در اینجا سه مشکل بوجود می آید

  1. Multiple Frame Copy
  2. Broadcast Storm
  3. Mislearning MAC address

همانگونه که میدانید سویچ 3 چون آدرس PC B را نمیداند فریم ارسالی را به هردوی سویچهای 1 و 2 ارسال میکند سویچ 1 نیز این فریم ورودی را مجددا روی تمام پورتهایش(غیر از پورت ورودی) منتشر میکند این عمل در سویچ 2 نیز اتفاق می افتد و فریم ورودی در لینک 23 خودش را روی لینک 12 و لینک متصل به PC B منتشر میکند و بنابراین لینک 12 مجددا این فریم را از سویچ 2 به سویچ 1 ارسال میکند و به همین نحو سویچ 1 مجددا فریم را روی لینک 13 به سویچ 3 ارسال میکند و میبینیم که اصطلاحا Broadcast storm یا طوفان Broadcast راه می افتد و چندین کپی از فریم روی پورتهای سویچها ایجاد میشود .

اما فرض کنید PC A بسته ای را به مقصد PC B ارسال کند(اما آدرس آن را در شبکه نمیداند بنابراین Broadcast میشود و وقتی به پورتهای سویچهای 2 و 3 میرسد ، سویچها بسته را اصطلاحاFlood یا منتشر میکنند در این حین MAC address کامپیوتر A در جدول کدام پورتها ثبت میشود ؟ همانگونه که میدانید پورتهای سویچ هر بار که فریمی دریافت میکنند طی فرآیندی بنام Learning ، آدرسهای MAC جدول پورتهای خودشون رو Update میکنند

یعنی مثلا آدرس MAC کامپیوتر A که روی پورتهای متصل به لینکهای 23 و 13 به سویچ 1 و 2 میرسد در این پورتها که فریم به آنها رسیده ثبت میشود اما وقتی Flood اتفاق می افتد یعنی از سویچ 2 به سمت سویچ 1 و از سمت سویچ 1 به سمت سویچ 2 فریم با آدرسMAC کامپیوتر A ارسال میشود سویچ 2 با فرض اینکهPC A متصل به سویچ 1 است جدول پورتهای خودش را Update میکند

و انگار که PC A واقعاً به یکی از پورتهای سویچ1 متصل شده و همین موضوع نیز در سویچ 1 اتفاق می افتد انگار که PC A به یکی از پورتهای سویچ 2 متصل شده باشد سویچ 1 این را در جدول پورتهایش Update میکند.بنابراین دیدیم که چگونه Redundancy که به منظور افزایش پهنای باند و کم کردن امکان قطعی بین سویچها ایجاد کرده بودیم (احتمال اینکه لینکهای 23 و 13 همزمان قطع شوند کم است) چگونه با ایجاد لوپ مشکلات گفته شده را ایجاد نمود.

شرکت سیسکو برای از بین بردن لوپ در Device های لایه 2 ای شبکه پرو توکلی بنام STP یا Spanning Tree Protocol ارائه کرد که طی فرآیند سه مرحله ای با انتخاب Root Switch در توپو لوژی شبکه و نیز انتخاب Root Port و Designated Port برای هر سویچ موجود در شبکه ، که با توجه به ID سویچها در شبکه و نیز Accumulated path cost و نیز عدد فیزیکی شماره پورتها ی سویچها و Priority آنها این انتخابها صورت میگیرند و باعث می شود سویچ با کمترین ID به عنوان Root Switch در نظر گرفته شود

(البته ID هر سویچ از دو قسمت تشکیل شده که از چپ به راست شامل یک مقدار Priority است که میتوان آنرا در Config سویچ تغییر داد و پیش فرض آن برای سویچهای سیسکو 32768 است و قسمت بعدی ID همان MAC Address سویچ است ) در هر سویچ نیز آن پورتی که کمترین هزینه اصطلاحا انباشته شده را برای رسیدن یک بسته از Root switch به آن پورت را دارد ، بعنوان Root port در نظر گرفته میشود

که البته این پارامتر بصورت دستی در Config سویچ برای هر پورت تعریف میشود و چنانچه این هزینه برای همه پورتهای سویچ یکسان باشد از آنجا که برای هر پورت سویچ نیز یک مقدار Priority وجود دارد که یش فرض آن در سویچهای سیسکو 32 است پورتی که کمترین مقدار priority را دارد انتخاب میشود و اگر Priority پورتها نیز یکی باشد پورت با کمترین شماره فیزیکی انتخاب میشود یعنی مثلا پورت 01 بجای 02 یا 0/3 بعنوان Root Port انتخاب میشود .

روشن است که patch cost همه پورتهای Root switch صفر است , ودر محاسبه هزینه Patch همواره هزینه ورود بسته جمع بسته میشود و هنگامیکه از سویچ از یک پورت خارج میشویم نباید هزینه آن پورت اضافه شود.گام سوم STP انتخاب designated Port است که در واقع پورتی است که هدف از انتخاب آن اطمینان حاصل کردن از این است که Segment متصل به سویچ مسیری به Root port داشته باشد (چرا که همچنانکه خواهم گفت پورتهای غیر Root یا Designate همگی در یک سویچ درون حلقه به حالتی بنام Blocking میروند تا تنها یک مسیر بین Root و سویچ وجود داشته باشد و حلقه از بین برود ) .

انتخاب این پورت هم بر اساس کمترین هزینه رسیدن از Root port به Segment متصل به سویچ صورت میگیرد و همان مقایسه های گفته شده در بالا در این انتخاب نیز صورت میگیرد .در این مورد سویچی را در نظر بگیرید که دو تا لینک با سویچ کناری خود دارد و فرض کنید priority و patch Cost دو لینک نیز یکی باشد بنابراین پورت با کمترین شماره فیزیکی انتخاب میشود همانطور که در شکل زیر دیده میشود Sw5 که دو لینک ارتباطی با sw4 دارد و همه مشخصات دو لینک آن یکسانند بنابراین Fa 023 را در مقایسه با Fa 024 انتخاب میکند

Spanning Tree چیست

اما STP این اطلاعات را از کجا می آورد و در نظر بگیرید که تغییری در توپولوژی شبکه اتفاق بیفتد مثلا یک سویچ به ان اضافه یا از آن کم کنیم و یا Config های یک سویچ درون حلقه مثلاPriority آن را عوض کنیم و یا یک لینک ارتباطی قطع شود

اطلاعاتی مثل Switch ID و اینکه Root switch و Root port ها و Designated port ها و پورتهای Block شده هرسویچ کدامند درفریمهای Multicast به نام BPDU’s بین سویچها هر دو ثانیه یکبار رد و بدل میشوند .لازم به ذکر است که IEEE پروتکلSTP را بنام 802.1d استاندارد سازی نموده تا همه Device های غیر سیسکو نیز بتوانند از آن استفاده کنند.نحوه جلوگیری از تشکیل حلقه توسطSTP را در مقالات بعدی شرح خواهم داد .اگر به شکل زیر نگاهی بیندازیم متوجه میشویم که Root port ها و Designated poret ها انتخاب شده اند

بررسی ساختار پروتکل SPanning Tree در سویچ های سیسکو

پورتی که نه Root port است ونه Designated port اصطلاحا به حالت Block میرود که در شکل بالا با NDP در سویچ 4 مشخص شده است و مشخص است که با این فرآیند Loop از بین رفته است .باید در نظر داشت که هر پورت Root switch یک Designated port است چراکه هزینه رسیدن از آنها به هر Segment ای که به آن پورت وصل باشد صفر است اما RP یا Root port نیست چراکه بی معنی است با توجه به تعریف Root port از خودش به خودش برسیم.هر پورتی که در STP شرکت میکند 5 وضعیت میتواند داشته باشد :

  1. Blocking
  2. Listening
  3. Learning
  4. Forwarding
  5. Disabled

که از اینها وقتی STP اجرا میشود فقط چهار تای اولی مورد استفاده قرار مگیرند.

وضعیت Blocking در Spanning Tree چیست؟

وضعیتی است که در یکی از حالتهای زیر برای پورت اتفاق می افتد :

  1. در طول مدت انتخابRoot Switch
  2. وقتیکه یک سویچ BPDU ای روی یک پورت دریافت میکند که نشان میدهد مسیر بهتری به Roor switch از پورتی که در حال حاضر استفاده میشود وجود دارد
  3. اگر یک پورت نه Root port باشد ونه Designated port

یک پورت برای 20 ثانیه(پیشفرض) در وضعیت Blocking باقی می ماند ودر این مدت فقط به BPDU ها گوش میکند و آنها را پردازش میکند و بقیه فریمها را دور می اندازد .در این وضعیت در واقع سویچ سعی میکند که بفهمد کدام پورت RP و کدام پورتDP و کدام سویچ Root switch خواهد شد(اگر تغییری در توپولوژی شبکه رخ نداده باشد که همان قبلی ها خواهند بود و وگرنه میفهمد که تغییر رخ داده که ازطریق BPDU ها این موارد را متوجه میشود)

وضعیت Listening در Spanning Tree چیست؟

پس از اتمام 20 ثانیه یک RP یا DP به وضعیت Listening میرود و بقیه پورتها در حالت Block باقی میمانند، در این وضعیت نیز پورتها به BPDU ها گوش میکند وآنها را پردازش میکند و بقیه فریمها دور انداخته میشوند طول مدت زمانیکه پورت در این حالت باقی میماند بستگی به مقدار تنظیمی یک تایمر به نام Forward delay timer دارد که پیشفرض آن 15 ثانیه است

وضعیت Learning در Spanning Tree چیست؟

پورتهای RP یا DP از وضعیت listening به وضعیت Learning میروند که در این وضع نیز به BPDU ها گوش و آنها را پردازش میکنند اما بر خلاف مدتی که در وضعیت Listening هستند شروع به پردازش فریمها میکنند وSource Address و Destination Address جدول Port Address یا MAC خود را Update میکنند اما سویچ هنوز فریمها را forward نمیکند مدت زمانیکه پورتها در این وضع میمانند بستگی به مقدار Forward delay time است که این مقدار نیز بصورت پیشفرض 15 ثانیه است.

وضعیت Forwarding در Spanning Tree چیست؟

سرانجام پس از اتمام مدت زمان گفته شده پورتی که در وضعیت Learning بود به وضعیت Forward میرود در این وضعیت پورت BPDU ها را پردازش ، جدول MAC خودش را Update و فریمها را Forward میکند

وضعیت Disabled در Spanning Tree چیست؟

این وضعیت یک وضعیت خاص است و پورتی که در این وضعیت است در فرایند STP شرکت نمیکند.و این حالت زمانی است که یک پورت توسط Admin شبکه Shutdown شده یا بصورت دستی از فرایند STP حذف شده و یا بدلایل امنیتی disable شده  و یا بدلیل فقدان سیگنال لایه فیزیکی از کار افتاده است (مثلا کابل آن جدا شده است) همانطور که دیدید STP حلقه را از توپولوژی شبکه حذف کرد اما مدت زمانی برای همگرایی بین سویچها در این فرایند تلف میشود که از 30 تا 50 ثانیه است که برای کاهش این زمان سیسکو قابلیت PortFast را برای پورتهای غیر Trunk یعنی پورتهای Access ایجاد کرده که پورت مستقیم به مد Forwarding میرود و Config آن بصورت زیر است:

Switch(Config)# spanning-tree  portfast default 

که این فرمان PoreFast را برای همه پورتهای غیر Trunk فعال میکند برای فعال کردن آن روی یک پورت دلخواه :

Switch(Config)# interface   type   [slot#/]port#
Switch(Config-if)# spanning-tree  portfast  [trunk]

پارامترTrunk در خط آخر انتخابی است و با آن در واقع portfast را روی لینکهایTrunk ای که سر دیگر آنها سویچ نیست فعال میشود.همانطور که در مقالات قبلی شرح داده شد پروتکل Spanning Tree از ایجاد حلقه در توپولوژی شبکه بصورت لاجیکی جلوگیری میکند یعنی علیرغم اینکه بصورت فیزیکی در شبکه حلقه داریم اما بصورت لاجیکی حلقه حذف میشود تا مشکلات گفته شده در قسمت اول این سری مقالات در شبکه ایجاد نشود.

اما سوالی که مطرح میشود اینست که با حذف حلقه عملا Redundancy و افزایش پهنای باند در شبکه نخواهیم داشت پس بجای اینکه STP را در سویچها Run کنیم که آن نیز اگر تعداد سویچها زیاد باشد موجب میگردد که این فرایند بخش زیادی از توان CPU ها را برای تحلیل BPDU ها بخود اختصاص دهد و با Block شدن برخی پورتها عملا Redundancy و افزایش پهنای باند هم نخواهیم داشت پس اصلا چرا از همان اول لینکهای اضافی که در شبکه داریم بصورت فیزیکی حذف نکنیم ؟

پاسخ قسمت اول این پرسش در مورد نداشتن Redundancy روشن است چراکه اگر لینکی از کار بیفتد و یا به هر دلیلی قطع شود BPDU ای ارسال نخواهد کرد (حتی پورتی که در وضعیت Block است به BPDU گوش میکند و مجدد ارسال میکند و وضعیت خود را در آن به Root Switch اعلام میکند که دلیل آنهم روشن است چون هر تغییری که در این پورت اتفاق بیفتد STP برای تصمیم گیری درست بعدی باید از آن اطلاع داشته باشد مثلا فرض کنید Cost یا Priority این پورت را تغییر دهیم)

اگر ظرف 20 ثانیه BPDU ای از یک پورت غیر Block (یاBlock ) به Root switch نرسد فرض را بر این میگذارد که لینک قطع شده و اصطلاحا شروع به Recalculate کردن میکند تا با این وضعیت(و توپولوژی ) جدید RP ها و DP ها و NDP های موجود در شبکه را شناسایی و حلقه را بدین طریق حذف کند و در مورد پاسخ قسمت دوم یعنی افزایش پهنای باند هم راه حلی بنام Ether-channel ارائه شده که در آن چند کانال (لینک) با هم دسته میشوند و STP همه لینکهای درون یک کانال را مثل یک لینک میبیند البته مشخصات و Config پورتهای دو طرف یک کانال روی دو سویچ باید مثل هم باشد مثلا هر دو طرف Fast Ethernet یا Gigabit Ethernet باشند.

این کانالها با استفاده از دو پروتکل به نامهای LACP و PAgP میتوانند شکل بگیرند که PAgP اختصاصی سیسکو است و LCAP استاندارد شده آنست .نکته جالبی که در مورد کانالها وجود دارد اینست که پس از اینکه یک کانال شکل گرفت میتوان برای Device ها Load Balancing تعریف نمود یعنی تعریف کنیم که ترافیک ارسالی توسط هر MAC Address یا Source MAC یا Destination MAC یا IP از کدام پورتهای کانال استفاده کند برای تنظیم Load Balancing بصورت مناسب باید الگوی ترافیکی شبکه را بخوبی بدانیم با فرمانهای ذیل در IOS میتوان کانال ایجاد کرده و پورت به آن کانال اختصاص دهیم :

Switch(Config)# interface  type[slot_#/]port_# 
switch(Config – if) # channel-group group_# mode  mode
switch(Config – if) # port-channel load-balance 
 {dst - ip| dst – mac |src – dst – ip |src – dst mac | src – ip | src – mac } 

همان طور که در مقاله دوم هم گفته شد قابلیتی بنام Portfast را سیسکو ارائه نموده که زمان را برای پورتهای غیر trunk به نحو قابل توجهی کاهش داده است و علاوه بر آن در استاندارد جدیدتر به نام802.1w پروتکلی بنام RSTP بکار گرفته شده که با در نظر گرفتن پورتهای Alternate وBackup برای RP ها و DP ها و همچنین اضافه شدن تعدادی Flag درBPDU ها زمان همگرایی کاهش یافته است 

این Flag ها اطلاعاتی را درمورد نقش پورتی را که BPDU از آن خارج شده است را در خود دارند و موجب میشوند یک سویچ مجاور وقتی یک تغییر در توپولوژی شبکه اتفاق می افتد زودتر همگرا شود در اینجا اگر یک سویچ سه تا Hello متوالی را از دست بدهد فرض را بر این میگذارد که لینک سویچ همجوار او از بین رفته و از پورتهای Alternate یا Backup بجای آن استفاده خواهد کرد.آنچه که در واقع ارتقا یافته STP و RSTP است و سیسکو از آن استفاده میکند پروتکلی بنام PVST+ یا Per VLAN STP است.


علی نخعی
علی نخعی

Admin

MCSE,CCNA,CCNP Route, CCNP Switch, Eelectrical Engineer

نظرات