التوجيه الديناميكي: OSPF خطوة بخطوة
درس 5 من 6
5التوجيه الديناميكي: OSPF خطوة بخطوة
الصورة الكبيرةفي شبكة من ثلاثة موجّهات تكتب المسارات بيدك. في شبكة من ثلاثمئة، وفي كل يوم وصلة تنقطع وأخرى تُضاف، الكتابة باليد مستحيلة. هنا تتكلم الموجّهات فيما بينها وترسم الخريطة وتعيد رسمها وحدها.
ماذا تشاهد في الرسم: هكذا يصبح موجّهان جارين كاملين في OSPF: يتعارفان برسائل Hello، ثم يتبادلان ملخص ما يعرفانه، ثم يطلب كل منهما ما ينقصه حتى تتطابق خريطتاهما.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
تخيّل مجموعة سائقي توصيل في مدينة. التوجيه الثابت أن تعطي كل سائق ورقة بالطرق، فإن أُغلق شارع لا يعرف أحد. OSPF أن يتصل كل سائق بجيرانه ويخبرهم: «الشارع بيني وبينك مفتوح وسريع». الأخبار تنتشر حتى يملك كل سائق خريطة المدينة كاملة، ثم يحسب كل واحد أقصر طريق بنفسه. وإن أُغلق شارع، يصل الخبر للجميع فيعيدون الحساب خلال ثوانٍ. «أقصر» هنا لا تعني أقل عدد شوارع، بل أسرع طريق: الشارع العريض تكلفته أقل.
OSPF بروتوكول حالة الوصلة (link-state) داخل نظام مستقل واحد (IGP)، معرّف في RFC 2328 لـ IPv4 (OSPFv2). الموجّهات ترسل Hello على العنوان المتعدد 224.0.0.5 كل 10 ثوانٍ على Ethernet، وتعتبر الجار ميتًا بعد 40 ثانية (Dead). للجوار يجب أن يتطابق: المنطقة، والشبكة الفرعية والقناع، ومؤقتا Hello وDead، والمصادقة، وMTU. يتبادل الجيران LSA تُخزن في LSDB متطابقة داخل المنطقة، ثم يشغّل كل موجّه SPF (Dijkstra) بتكلفة = عرض النطاق المرجعي ÷ عرض الواجهة (المرجع الافتراضي في Cisco 100 Mbps، فكل واجهة 100 Mbps أو أسرع تكلفتها 1؛ لذلك يُرفع المرجع بأمر auto-cost reference-bandwidth). على الشبكات المشتركة يُنتخب DR وBDR بالأولوية الأعلى ثم معرّف الموجّه الأعلى ليقل عدد الجوارات. التصميم الهرمي: كل المناطق تتصل بـ المنطقة 0 (العمود الفقري). المسافة الإدارية 110.
قبل أن تبدأ
🧭التوجيه وترجمة العناوين NAT
تعرف جدول التوجيه وأطول تطابق والمسافة الإدارية.
🧮الشبكات الفرعية
تقرأ البادئة والقناع العكسي.
الفكرة الجوهرية
1لماذا لا تكفي المسارات الثابتة؟
المسار الثابت بسيط ومضمون، ويناسب الشبكة الصغيرة والمسار الافتراضي نحو مزوّد الخدمة. مشكلته أنه لا يرى الأعطال: إن انقطعت الوصلة يبقى المسار في الجدول وتضيع الحزم. ومع كل شبكة جديدة يجب أن تعدّل كل موجّه بيدك. البروتوكول الديناميكي يحل الأمرين: يكتشف الشبكات وحده، ويتجاوز العطل وحده.
| ثابت | OSPF | |
|---|---|---|
| من يكتبه | المهندس، سطرًا سطرًا | الموجّهات تتعلمه وحدها |
| عند انقطاع وصلة | يبقى ويضيع المرور | يعاد الحساب خلال ثوانٍ |
| يناسب | شبكات صغيرة والمسار الافتراضي | شبكات المؤسسات المتوسطة والكبيرة |
| الحمل على الموجّه | لا شيء تقريبًا | ذاكرة ومعالج لحساب الخريطة |
2الجيران والخريطة المشتركة
كل موجّه يرسل Hello على واجهاته. إن رد موجّه آخر بالشروط نفسها (المنطقة، والشبكة، والمؤقتات، والمصادقة) صارا جارين. بعدها يتبادلان LSA: رسائل تقول «أنا R1، ولي وصلة إلى 10.1.1.0/24 بتكلفة 1، وجاري R2». كل LSA ينتشر في المنطقة كلها، فينتهي كل موجّه بنسخة متطابقة من الخريطة اسمها LSDB. الحالة التي تريد رؤيتها بين جارين هي FULL.
3Dijkstra والتكلفة: من يفوز؟
بعد أن يملك الموجّه الخريطة، يشغّل خوارزمية Dijkstra ليجد أقل مجموع تكاليف إلى كل شبكة. التكلفة تُحسب من سرعة الواجهة: المرجع ÷ السرعة. لذلك الطريق عبر ثلاث وصلات سريعة قد يغلب طريقًا مباشرًا عبر وصلة بطيئة. شغّل السكربت ولاحظ هذا بالضبط.
الوصلة المباشرة R1 إلى R2 بسرعة 10 Mbps تكلفتها 10000، فيفضّل OSPF الدوران عبر R3 وR4 بتكلفة 120. غيّر السرعات وأعد التشغيل.
import heapq
REFERENCE = 100_000 # Mbps: raised from Cisco's default 100 so fast links differ
def cost(mbps):
return max(1, REFERENCE // mbps)
# links: (router, router, speed in Mbps)
links = [("R1", "R2", 10), ("R1", "R3", 10_000), ("R3", "R4", 10_000), ("R4", "R2", 1_000)]
graph = {}
for a, b, speed in links:
graph.setdefault(a, []).append((b, cost(speed)))
graph.setdefault(b, []).append((a, cost(speed)))
def shortest(start):
best = {start: (0, [start])}
queue = [(0, start, [start])]
while queue:
total, node, path = heapq.heappop(queue)
if total > best[node][0]:
continue
for nxt, c in graph[node]:
if nxt not in best or total + c < best[nxt][0]:
best[nxt] = (total + c, path + [nxt])
heapq.heappush(queue, (total + c, nxt, path + [nxt]))
return best
for dest, (total, path) in sorted(shortest("R1").items()):
print(f"R1 -> {dest}: cost {total:<5} via {' > '.join(path)}")4المناطق وDR والتحقق
في شبكة كبيرة تكبر الخريطة ويثقل الحساب، فتُقسم إلى مناطق، وكل منطقة تتصل بـ المنطقة 0. على وصلة مشتركة بين موجّهات كثيرة، يُنتخب DR (وBDR احتياطيًا) فيتبادل الكل خرائطهم معه بدل أن يتبادل كل موجّه مع كل موجّه. الفائز: الأولوية الأعلى (الافتراضي 1، والصفر يعني لا يترشح)، ثم معرّف الموجّه الأعلى.
passive-interface يوقف رسائل Hello نحو شبكة المستخدمين (أمان وهدوء) مع الإعلان عنها. FULL تعني جوارًا مكتملًا، و[110/120] هي المسافة الإدارية/التكلفة.
R1(config)# router ospf 1 R1(config-router)# router-id 1.1.1.1 R1(config-router)# auto-cost reference-bandwidth 100000 R1(config-router)# network 10.1.0.0 0.0.255.255 area 0 R1(config-router)# passive-interface GigabitEthernet0/2 R1# show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 2.2.2.2 1 FULL/DR 00:00:34 10.1.12.2 Gi0/0 3.3.3.3 1 FULL/BDR 00:00:38 10.1.13.3 Gi0/1 R1# show ip route ospf O 10.2.0.0/24 [110/120] via 10.1.13.3, Gi0/1
مثال محلول
المسألة: بعد إضافة موجّه جديد R5، الأمر show ip ospf neighbor على R1 لا يظهر R5 أبدًا، رغم أن ping بينهما ينجح. كيف تبحث؟
الحل: الـ ping ينجح، إذن الطبقات 1 إلى 3 سليمة والمشكلة في شروط الجوار. قارن على الطرفين بـ show ip ospf interface: (1) المنطقة واحدة؟ (2) القناع نفسه؟ (3) مؤقتا Hello وDead متطابقان؟ (4) المصادقة؟ (5) هل الواجهة passive بالخطأ؟ (6) هل يتكرر معرّف الموجّه؟ في هذه الحالة كان R5 في area 1 وR1 في area 0 على الوصلة نفسها. بعد التصحيح ظهرت الحالة FULL ثم مسارات O في الجدول.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| OSPF يختار الطريق ذا أقل عدد قفزات. | يختار أقل مجموع تكلفة، والتكلفة من سرعة الوصلات. العدّ بالقفزات هو أسلوب RIP. |
| إن نجح ping بين موجّهين فسيصبحان جارين. | الجوار يحتاج تطابق المنطقة والقناع والمؤقتات والمصادقة أيضًا. |
| الموجّه صاحب أعلى عنوان IP هو DR دائمًا. | الأولوية أولًا، ثم معرّف الموجّه. والانتخاب لا يتغير إن انضم موجّه أعلى لاحقًا. |
أين تقابله في العمل
🏢شبكة شركة بفروع
OSPF يربط المقر والفروع ويتجاوز الوصلة المعطلة وحده.
🎓شهادة CCNA
OSPF أحادي المنطقة جزء أساسي من مجال IP Routing.
☁️السحابة والمراكز
الفكرة نفسها (حالة الوصلة وأقصر طريق) تعمل داخل شبكات مراكز البيانات.
اختبر فهمك
على أي أساس يختار OSPF الطريق؟
Dijkstra على التكاليف، والتكلفة من سرعة الوصلة.
بالمرجع الافتراضي في Cisco، كم تكلفة واجهة 10 Mbps؟
100 ÷ 10 = 10.
أي شرط لا يلزم أن يتطابق بين جارين في OSPF؟
الاسم لا يدخل في الجوار؛ المنطقة والمؤقتات والقناع تدخل.
ما الحالة التي تعني أن الجارين تطابقت خريطتاهما؟
FULL هي نهاية التبادل.
كيف يُنتخب DR؟
والأولوية صفر تعني لا يترشح أبدًا.
لماذا تستخدم passive-interface على واجهة المستخدمين؟
لا موجّهات في شبكة المستخدمين، ورسائل Hello هناك ضجيج وخطر.
بطاقات مراجعة سريعة
تحقق من فهمك
لماذا نحتاج DR على شبكة Ethernet عليها ستة موجّهات؟
بدونه يكوّن كل موجّه جوارًا كاملًا مع كل الآخرين (15 جوارًا). مع DR وBDR يتبادل الكل معهما فقط، فيقل الحمل والرسائل.
وصلة انقطعت بين R1 وR3. ماذا يحدث في OSPF؟
يلاحظ الطرفان الانقطاع (فورًا من الواجهة أو بعد مؤقت Dead)، ويرسلان LSA جديدًا ينتشر في المنطقة، فيعيد كل موجّه حساب Dijkstra ويحدّث جدوله.
متى تبقى المسارات الثابتة أفضل من OSPF؟
في فرع صغير بمخرج واحد، وللمسار الافتراضي نحو مزوّد الخدمة: بسيطة ومتوقعة ولا تستهلك شيئًا.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
مقالات2
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.