
مقال 7 دقائق للقراءة
درس اليوم: بروتوكول STP و RSTP — منع الحلقات في السويتشات
CCNA 200-301 | Spanning Tree Protocol & Rapid Spanning Tree Protocol
في الشبكات الجيدة نضع روابط احتياطية بين السويتشات حتى لا تتعطل الشبكة بتعطل كابل واحد. لكن هذه الروابط نفسها قد تسبب حلقة (Loop) تنهار بها الشبكة كلها خلال ثوانٍ. هنا يأتي STP: يعطّل الروابط الزائدة منطقياً، ويفعّلها تلقائياً عند تعطل الرابط الأساسي.
🚦 تشبيه: مدينة فيها طرق دائرية متصلة ولا توجد إشارات مرور، فتدور السيارات إلى الأبد وتزداد حتى يتوقف كل شيء. STP هو مهندس المرور: يغلق طريقاً واحداً مؤقتاً ليمنع الدوران، ويفتحه فوراً إذا انقطع الطريق الرئيسي.
1. لماذا تُدمّر الحلقات الشبكة؟
إطار Ethernet لا يحمل TTL كحزم IP، فلا يموت إذا دار في حلقة. نتيجة ذلك ثلاث مشاكل:
- Broadcast Storm: إطارات البث تدور وتتضاعف حتى تستهلك كل عرض النطاق وتُجمّد الأجهزة.
- عدم استقرار جدول MAC: يرى السويتش نفس العنوان من منافذ مختلفة، فيحدّث جدوله باستمرار.
- تكرار الإطارات: تصل نسخ متعددة من الإطار نفسه إلى الوجهة.
💡 السويتش يعيد إرسال الـ Broadcast من كل المنافذ ما عدا الذي جاء منه، وهذا ما يغذي الحلقة.
2. كيف يعمل STP (802.1D)؟
السويتشات تتبادل رسائل BPDU (Bridge Protocol Data Unit) كل ثانيتين لتبني شجرة بلا حلقات.
Bridge ID
يتكون من: Priority (الافتراضي 32768) + VLAN ID + عنوان MAC.
· الأصغر هو الأفضل في كل المقارنات. · تُغيَّر الأولوية بمضاعفات 4096 فقط.
الخطوات الأربع لبناء الشجرة
1) انتخاب الـ Root Bridge
السويتش صاحب أقل Bridge ID (أقل Priority، وعند التعادل أقل MAC). كل منافذه تكون Designated.
2) اختيار Root Port في كل سويتش غير جذر
المنفذ الأقرب للجذر، أي الأقل في Root Path Cost. ومنفذ واحد فقط في كل سويتش.
3) اختيار Designated Port في كل قطعة (Segment)
المنفذ الذي يقدم أقل تكلفة نحو الجذر على ذلك الرابط، وهو الذي يمرر الإطارات.
4) تعطيل البقية
أي منفذ ليس Root ولا Designated يصبح Alternate ويُحجب (Blocking/Discarding).
كسر التعادل في اختيار Root Port
بالترتيب:
- أقل Root Path Cost.
- أقل Bridge ID للسويتش المرسِل.
- أقل Port Priority (الافتراضي 128).
- أقل Port ID.
تكلفة الروابط (802.1D)
| السرعة | التكلفة |
|---|---|
| 10 Mbps | 100 |
| 100 Mbps | 19 |
| 1 Gbps | 4 |
| 10 Gbps | 2 |
💡 كلما زادت السرعة قلّت التكلفة.
حالات المنفذ في STP التقليدي
| الحالة | المدة | الوظيفة |
|---|---|---|
| Blocking | 20 ث (Max Age) | يستقبل BPDU فقط |
| Listening | 15 ث | يشارك في الانتخاب، لا يتعلم MAC |
| Learning | 15 ث | يتعلم MAC، لا يمرر بيانات |
| Forwarding | — | يمرر البيانات |
⏱️ التقارب (Convergence) بعد عطل قد يستغرق 30 إلى 50 ثانية، وهذا بطيء جداً لشبكات اليوم، وهو سبب ظهور RSTP.
3. RSTP (802.1w) — النسخة السريعة
يعطي النتيجة نفسها، لكن التقارب خلال ثوانٍ قليلة أو أقل لأن السويتشات تتفاوض مباشرة بدل الانتظار على المؤقتات.
الحالات تصبح ثلاثاً فقط
Discarding و Learning و Forwarding.
أدوار المنافذ في RSTP
| الدور | الوظيفة |
|---|---|
| Root | الأقرب للجذر |
| Designated | يمرر على القطعة |
| Alternate | بديل جاهز للـ Root Port (انتقال فوري عند العطل) |
| Backup | بديل للـ Designated على نفس القطعة (يظهر مع الـ Hubs) |
| Disabled | منفذ معطل |
نسخ STP في Cisco
| النسخة | المعيار | ملاحظات |
|---|---|---|
| STP | 802.1D | شجرة واحدة، بطيء |
| PVST+ | 802.1D | شجرة لكل VLAN |
| RSTP | 802.1w | شجرة واحدة، سريع |
| Rapid PVST+ | 802.1w | شجرة لكل VLAN، سريع (الأفضل والأكثر استخداماً) |
💡 الوضع الافتراضي في سويتشات Cisco هو PVST+.
4. الإعداد
تفعيل Rapid PVST+:
```cisco SW1(config)# spanning-tree mode rapid-pvst ```
جعل سويتش هو الجذر:
```cisco SW1(config)# spanning-tree vlan 1 root primary SW2(config)# spanning-tree vlan 1 root secondary ```
أو بتحديد الأولوية يدوياً:
```cisco SW1(config)# spanning-tree vlan 1 priority 4096 ```
التحكم بالتكلفة وأولوية المنفذ:
```cisco SW1(config-if)# spanning-tree vlan 1 cost 10 SW1(config-if)# spanning-tree vlan 1 port-priority 64 ```
5. ميزات الحماية المهمة
PortFast: يجعل المنفذ ينتقل فوراً إلى Forwarding. يُستخدم فقط مع أجهزة النهاية (حاسوب، طابعة).
```cisco SW1(config)# interface FastEthernet0/5 SW1(config-if)# spanning-tree portfast ```
BPDU Guard: إذا وصلت BPDU إلى منفذ PortFast (يعني أن أحدهم وصل سويتش) يُغلَق المنفذ تلقائياً (err-disabled).
```cisco SW1(config-if)# spanning-tree bpduguard enable ```
أو لكل منافذ PortFast دفعة واحدة:
```cisco SW1(config)# spanning-tree portfast default SW1(config)# spanning-tree portfast bpduguard default ```
Root Guard: يمنع سويتش غير مصرح به من أن يصبح الجذر.
Loop Guard: يحمي من حلقات تظهر عند توقف BPDU بشكل غير متوقع.
🛡️ ربط بالأمان: هجوم شائع هو توصيل سويتش مزيف بأولوية منخفضة ليصبح هو الجذر، فيمر عبره كل المرور. وBPDU Guard وRoot Guard هما الحل.
6. التحقق واستكشاف الأخطاء
```cisco show spanning-tree show spanning-tree vlan 10 show spanning-tree summary show spanning-tree interface g0/1 detail ```
· `show spanning-tree vlan 10`: يظهر من هو الـ Root Bridge وأدوار المنافذ وحالاتها (Root/Desg/Altn). · `show spanning-tree summary`: الوضع المستخدم (PVST/Rapid) وعدد المنافذ في كل حالة.
مثال لقراءة الناتج:
``` VLAN0010 Root ID Priority 4106 Address 0011.2233.4455 This bridge is the root Bridge ID Priority 4106 (priority 4096 sys-id-ext 10) ```
· `4106` = 4096 (الأولوية) + 10 (رقم الـ VLAN).
7. مثال محلول
ثلاثة سويتشات متصلة في مثلث. الأولويات كلها الافتراضية، والعناوين:
· SW1: `AA:AA:AA:00:00:01` · SW2: `BB:BB:BB:00:00:01` · SW3: `CC:CC:CC:00:00:01`
من الجذر؟ الأولويات متساوية، فيفوز أقل MAC وهو SW1.
بقية الخطوات:
- كل منافذ SW1 تصبح Designated.
- SW2 و SW3 كل منهما يختار Root Port نحو SW1.
- الرابط بين SW2 و SW3 فيه منفذ Designated ومنفذ Alternate. وبالتعادل في التكلفة يفوز السويتش الأقل Bridge ID، فيكون SW2 هو Designated ويُحجب منفذ SW3.
⚠️ مشكلة شائعة: إذا تركت الإعدادات الافتراضية، قد يصبح أقدم أو أضعف سويتش (صاحب أقل MAC) هو الجذر، فيمر عبره كل المرور. لذا حدد الجذر يدوياً دائماً.
8. أخطاء شائعة
- ترك الأولويات الافتراضية، فيُنتخب جذر عشوائي (أقل MAC).
- تفعيل PortFast على منافذ Trunk أو بين السويتشات.
- خلط الأوضاع بين السويتشات (بعضها PVST+ وبعضها Rapid) فيبقى التقارب بطيئاً في أجزاء الشبكة.
- عدم تفعيل BPDU Guard على منافذ المستخدمين.
- الخلط بين الأولوية (من مضاعفات 4096) وبين الأولوية مع رقم الـ VLAN في الناتج.
- الظن أن المنفذ المحجوب "معطل"، وهو في الحقيقة بديل جاهز.
9. تحدي Packet Tracer 🧪
تصميم الشبكة:
· ثلاثة سويتشات SW1 و SW2 و SW3 متصلة في مثلث (كل سويتش مع الآخرين). · حاسوب PC1 على SW2 و PC2 على SW3.
المطلوب:
- اترك الإعدادات الافتراضية ونفّذ `show spanning-tree` على الثلاثة، وحدد من الجذر ولماذا.
- حدد المنفذ المحجوب (Alternate) في الشبكة.
- اجعل SW1 هو الجذر بالأمر `root primary`، و SW2 احتياطياً بـ `root secondary`.
- فعّل `rapid-pvst` على الثلاثة.
- أثناء `ping -t` من PC1 إلى PC2، افصل الكابل المستخدم فعلياً وراقب زمن الانقطاع.
- (تحدٍ إضافي): فعّل `portfast` و `bpduguard` على منفذي PC1 و PC2، ثم وصّل سويتشاً بمنفذ PC1 وراقب ما يحدث.
10. اختبار اليوم 📝
س1: لماذا لا تنتهي الحلقات في Ethernet تلقائياً كما في IP؟
س2: كيف يُنتخب الـ Root Bridge؟ وما قيمة الأولوية الافتراضية؟
س3: ما الفرق بين Root Port و Designated Port و Alternate Port؟
س4: ما الفرق في زمن التقارب بين STP و RSTP؟ وما حالات المنفذ في RSTP؟
س5 — تحدي CCNA: ما الأمر الذي يجعل السويتش جذراً لـ VLAN 20؟ وما الميزة التي تغلق منفذاً متصلاً بحاسوب إذا وصلته BPDU؟
🎯 خلاصة الدرس
· المشكلة: الحلقات تسبب Broadcast Storm لأن الإطار لا يحمل TTL. · STP: يبني شجرة بلا حلقات عبر BPDU كل 2 ثانية. · Bridge ID: Priority (32768) + VLAN + MAC، والأقل يفوز. · الخطوات: انتخاب الجذر، ثم Root Port، ثم Designated Port، وتحجب البقية. · STP التقليدي: تقارب 30–50 ثانية. RSTP: ثوانٍ قليلة. · Rapid PVST+: الأفضل في Cisco (شجرة لكل VLAN وسرعة RSTP). · PortFast + BPDU Guard: لمنافذ أجهزة النهاية فقط. · التحقق: `show spanning-tree`. · القاعدة الذهبية: لا تترك انتخاب الجذر للصدفة، بل حدده بنفسك.
💬 سؤال للنقاش
موظف وصّل سويتش صغيراً من منزله بمنفذ في المكتب، وكانت أولويته أقل من أولوية سويتشات الشركة. ماذا قد يحدث للشبكة؟ وما الميزتان اللتان تمنعان ذلك؟ شاركونا إجاباتكم في التعليقات
#CCNA #STP #RSTP #SpanningTree #Switching #Cisco #Networking #هندسة_الشبكات
