ماهو بروتوكول STP وماهي إستخداماته في شبكات الـ LAN؟


 يُستخدم بروتوكول STP كثيراً في شبكات الـ LAN لمنع حدوث مشكلة الـ (L2 Loop). هذا المقال سيوضح الفكرة الأساسية لهذا البروتوكول.

أين يستخدم؟ وإلى أي طبقة من طبقات الـ TCP/IP ينتمي؟

يستخدم بروتوكول الـ STP في الشبكات المحلية (LAN) ولايمتد عمله خارجها.

لذلك يعتبر هذا البروتوكول من بروتوكولات الطبقة الثانية من طبقات الـ TCP/IP والتي تسمى بالـ (Data Link Layer).

وجود الـ Loop قد يكون متعمداً في تصميم الشبكة وذلك لتوفير مسار آخر (Redundancy) للوصول إلى نقطة محددة بالشبكة أو قد ينتج عن خطأ غير متعمد. الشكل التالي يوضح شبكة بها ثلاثة سويتشات وبعض الأجهزة وسيرفر. لاحظ شكل التوصيل بين السويتشات الثلاثة والحلقة (Loop) الموجودة بينهم. ثم لاحظ أن الأجهزة المتصلة بالـ switch 2 يمكنها الوصول إلى السيرفر عبر المسار sw2 – sw1 أو المسار sw2 – sw3 – sw1، وبالتالي إذا حدثت مشكلة بالمسار الأول يمكنها الوصول عبر المسار الثاني (هذا ما نسميه بالـ Redundancy).

redundant topology

توفير عدة مسارات بالشبكة يجعلها أكثر إعتمادية، كما ستكون متاحة دائما مما يجعل إنسياب عمل المؤسسات يسري بصورة سلسلة وخالية من مشكلات فقدان الشبكة. ولكن إذا قمنا بالتوصيل بين السويتشات هكذا مباشرة ودون تشغيل بروتوكول STP ستحدث الكارثة وتتوقف الشبكة عن العمل والسبب واضح وهو وجود الـ Loop.

ما هي مهمة بروتوكول STP؟

بروتوكول STP سيعمل على منع حدوث الـ Loop في الشبكة. يقوم بذلك عن طريق إغلاق بورت من البورتات المشترِكة في عمل الـ Loop. في المثال التالي سيقوم بروتوكول الـ STP بغلق البورت الموجود في switch2 والذي به لينك يتجه إلى switch3. هكذا نكون قد تخلصنا من الـ Loop.

STP loop shutdown ex1

إذا حدثت مشكلة في اللينك بين switch2 و switch1 مثلاً، سيكتشف بروتوكول STP ذلك وسيقوم بفتح البورت المغلق في switch2 ليسمح للأجهزة المتصلة بـ switch2 للوصول للسيرفر عبر switch3. كذلك إذا حدثت مشكلة في اللينك بين switch3 و switch1 سيقوم بروتوكول STP بفتح المسار المغلق بين switch3 وswitch2 وبالتالي سيسمح للأجهزة المتصلة بـ switch3 للوصول للسيرفر عبر switch2.

كيف يعمل بروتوكول STP؟

يعمل البروتوكول عبر رسائل تُرسل بين السويتشات تسمى بالـ BPDU – Bridge Protocol Data Unit وأول خطوة يبدأ بها البروتوكول هي إختيار الـ root switch. وهو عبارة عن سويتش يعمل كنقطة مرجعية لباقي السويتشات. يتم إختيار الـ root بالطريقة التالية:

  • كل سويتش لديه رقم يُسمى بالـ Priority يمتد من 0 وحتى 65535. السويتش الذي لديه أقل Priority سيكون هو الـ root.
  • إذا تساوت الـ Priority في جميع السويتشات يتم إختيار السويتش الذي لديه أقل MAC-Address ليكون هو الـ root.

للتوضيح أكثر تابع الأمثلة التالية.

مثال يوضح كيف يختار بروتوكول STP الـ root

في الشكل التالي كل سويتش لديه Priority و MAC-Address. لنحدد من هو الـ root سنقوم بالبحث عن السويتش الذي لديه أقل Priority. ولكن نلاحظ أن جميع السويتشات لديها نفس الـ Priority وهي 32768، إذاً سنبحث عن السويتش الذي لديه أقل MAC-Address. لمعرفة الـ MAC-Address الأقل إبدأ من اليسار ثم قارن الرقم الأول في جميع السويتشات فإذا تساوى إذهب للرقم الذي بعده في جهة اليمين ثم قارن من جديد حتى تجد الرقم الأقل. في هذا المثال جميع السويتشات تتساوى في أول رقمين للـ MAC-Address. في الرقم الثالث switch3 لديه رقم 9 وهو أكبر رقم لذلك سيخرج من المنافسة. السويتشان switch1 و switch2 يتساوان مرة أخرى في الرقم الرابع لذلك سنرى الرقم الخامس إن كان سيحدد من هو الـ root. الرقم الخامس بـ switch1 هو 4 وبـ switch2 هو 5 إذاً switch1 هو الـ root لأن لديه الرقم الأقل وبالتالي لديه أقل MAC-Address.

STP root election

مثال ثاني لتوضيح إختيار الـ root في بروتوكول STP

في هذا المثال نلاحظ أن switch3 لديه أقل Priority لذلك سيكون هو الـ root.

STP root election ex2

ماذا بعد إختيار الـ root؟

بعد أن حدد البروتوكول الـ root تبدأ السويتشات الأخرى بتحديد أقرب مسار للوصول إلى هذا الـ root. ولتحديد أقرب مسار للوصول إلى الـ  root هناك بعض القواعد التي يجب معرفتها.

أولا:ً كل بورت سيكون له cost يُحدد على حسب السرعة التي يعمل بها. الجدول التالي يوضح بعض منها.

cost

 port speed / bps

19

100M

4

1G

2

10G

ثانياً: يُحسب الـ cost اللازم للوصول إلى الـ root لكل بورت بالسويتش بالطريقة الموضحة بالخطوات والشكل التالي:

STP root port
  • نبدأ من الـ root ولنذهب عبر المسار المتجه إلى switch2 (المسار الموضح باللون الأحمر)
  • يرسل الـ root فريم BPDU يحتوي على cost بالقيمة 0.  (يأخذ الفريم القيمة 0 فقط عندما يخرج من الـ root)
  • يصل الفريم إلى switch2 عبر البورت GE1. سيقوم السويتش بإضافة 4 لأن البورت يعمل بسرعة 1G وسيصبح المجموع 4
  • إذاً الـ cost بالنسبة لبورت GE1 بـ switch2 يساوي 4.
  • سيقوم switch2 بإرسال الفريم إلى switch3.
  • سيصل الفريم إلى switch3 عبر البورت GE2. سيقوم السويتش بإضافة 4 إلى الـ cost ليصبح المجموع 8.
  • إذاً البورت GE2 الموجود بـ switch3 لديه cost يساوي 8.

نقطة هامة

نتوقف قليلاً هنا لتوضيح نقطة هامة، عندما يخرج الفريم من السويتش لايتم إضافة أي cost ولكن يتم القيام بإضافة الـ cost فقط في حالة دخول الفريم إلى السويتش. لذلك في هذ المسار (الموضح باللون الأحمر) لن نستطيع تحديد الـ cost بالنسبة لبورت GE2 الموجود بـ switch2 ولا بورت GE1 الموجود بـ switch3. لذلك سنقوم بتمرير فريم آخر من الـ root عبر المسار الموضح باللون الأخضر كما هو موضح في الخطوات التالية.

  • نرجع للـ root مرة أخرى ونرسل فريم بقيمة 0 إلى switch3 (المسار الموضح باللون الأخضر)
  • عندما يصل الفريم إلى switch3 سيضيف عليه 4.
  • يصبح الـ cost على GE1 بـ switch3 هو 4.
  • يرسل switch3 الفريم إلى switch2.
  • يصل الفريم إلى switch2 عبر البورت GE2. سيقوم السويتش بإضافة 4 إلى الـ cost ليصبح المجموع 8.
  • إذاً البورت GE2 الموجود بـ switch2 لديه cost يساوي 8.

الشكل التالي يحدد الـ cost لكل بورت.

STP port cost and root port

إذاً الـ cost هو عدد يحدد (وزن / تكلفة) المسار من البورت الموجود بالسويتش وحتى الوصول إلى الـ root.

تحديد الـ root ports

بعد أن حددنا الـ cost لكل بورت سنقوم بتحديد الـ root port. الـ root port يتم تحديده في كل سويتش وهو البورت صاحب أقل cost للوصول إلى الـ root switch أو switch1 في هذه الحالة. من الشكل السابق يتضح أن البورت GE1 في switch2 و switch3 هو الـ root port لأنه الأقل من ناحية الـ cost.

إختيار الـ designated ports (البورتات المنتخبة)

تبقى لنا أن نحدد البورتات المنتخبة (designated ports) وهي البورتات المرشحة لإرسال البيانات. وبعدها يتم تحديد البورت الذي سيتم إغلاقه (Blocking) لمنع حدوث الـ Loop. ولتحديد الـ designated ports نقوم بالخطوات التالية:

  • جميع البورتات الموجودة بالـ root switch تعتبر designated ports
  • جميع البورتات التي تم تصنيفها كـ root port تعتبر designated ports
  • الآن تبقت لنا البورتات GE2 الموجودة باللينك بين switch2 و switch3. سيتم إختيار بورت ليكون designated وسيكون البورت الآخر في حالة الـ Blocking.

البورت صاحب الـ cost الأقل سيكون هو الـ designated ولكن في هذه الحالة تساوى الـ cost في البورتين لذلك سنلجأ للـ MAC-Address الموجود بالسويتش. نلاحظ من الأمثلة السابقة أن switch2 له MAC-Address أقل. بالتالي سيكون البورت GE2 على switch2 هو الـ designated ports والبورت GE2 سيكون في حالة الـ Blocking. الآن أصبح لدينا شبكة بدون Loop، الشكل التالي يوضح ذلك.

STP SW3 GE2 Blocking

حالة البورتات في بروتوكول STP

البورتات التي تعمل مع بروتوكول الـ STP تكون وفي واحدة من الحالات التالية:


ختاماً

بروتوكول STP يستخدم في الشبكات لمنع حدوث أي Loop بالشبكة. يعتبر من البروتوكولات الهامة جداً خاصة في الشبكات التي تحتوي على لينكات إضافية (redundancy links) لتعزيز إستقرارية الشبكة.

https://khamsavolt.com/

تعليقات