REBUILD://NET المكدّس 0/8RTL · AR / أوامر · ? اختصارات live

المرحلة 02 — شبكاتٌ كثيرة

لاحظ

الطبقة التي نبنيها: Network (L3). وفيها يولد العنوان الذي بنى الإنترنت: IP. ومنها نشتقّ: الـ subnet، الـ routing، الخاص/العام، NAT، IPv6، وأخيراً التعريف الحقيقي لـ WAN والإنترنت. هذه أطول مرحلة وأهمّها — خذ وقتك.

النبذة

عندك الآن LAN يعمل: أجهزة تتخاطب بالـ MAC على سويتش. المشكلة من البذرة السابقة: الـ MAC مسطّح ومحلّي. لا يقول «أين»، ولا يتوسّع لمليارات. هذه المرحلة كلها جوابٌ على سؤالٍ واحد: كيف يصل شيءٌ من شبكتي إلى شبكةٍ أخرى عبر العالم؟


اللغز

عندك LAN (٥ أجهزة، تتخاطب بالـ MAC). صديقتك في الطرف الآخر من المدينة عندها LAN آخر. تريد أن يُرسل حاسبُك بياناتٍ لحاسبها.

حاول أن تحلّها بما تملك فقط (الـ MAC والإطارات):

  1. هل تعرف عنوان MAC لحاسبها؟ (لا — لم تَرَه قط، وليس على سلكك.)
  2. لنفترض أن جنّياً أعطاك إياه. ضعه في Dest MAC وأرسل. ماذا يحدث؟ (لا شيء — الإطار لا يخرج من سويتشك؛ الـ MAC معناه محلّي، والسويتش لا يعرف منفذاً لجهازٍ ليس على نسيجه.)
  3. حسناً، لِنربط كل LANات العالم بسويتشٍ عملاق واحد. لماذا تكون هذه كارثة؟ فكّر: كم إطار broadcast سيُغرِق العالم؟ وكم حجم جدول MAC↔منفذ الذي يحفظ كل جهازٍ على الكوكب؟

اكتب: ما الخاصيتان اللتان يفتقدهما الـ MAC وتمنعانه من ربط العالم؟


الدرس

ليش نحتاج عنواناً هرمياً (هذا قلب كل شيء)

المشكلة في الـ MAC المسطّح أنه مثل قائمة هواتف بلا ترتيب: لتجد شخصاً، تسأل الجميع. لا يتوسّع.

الحل الذي اخترعه الناس مأخوذٌ حرفياً من البريد: اجعل العنوان هرمياً بحيث يُشفِّر الموقع. عنوانك البريدي ليس رقماً عشوائياً — هو الدولة ← المدينة ← الحي ← الشارع ← المنزل. هذه الهرمية تتيح معجزة: ساعي بريد في طوكيو لا يحتاج أن يعرف منزلك في الرياض؛ يكفيه أن يعرف "كل ما هو للسعودية ← سلّمه للطائرة المتجهة للسعودية". يُختزل العالم كله إلى قاعدة واحدة عنده.

هذا بالضبط ما يفعله الـ IP address: عنوانٌ هرمي، نصفُه يقول «أي شبكة»، ونصفُه يقول «أي جهاز داخلها». والصناديق التي تقف بين الشبكات وتوجّه حسب «أي شبكة» تُسمّى routers (أجهزة التوجيه).

إجابة هولبرتون

جوابا هولبرتون (Task 2): الـ IP مثل العنوان البريدي للمنازل. الآن تعرف لماذا التشبيه دقيقٌ هذه المرة (راجع «الخبيئة» في 00 — التشبيه يوصلك ثم نهدمه): ليس لأنه «عنوان» وحسب، بل لأن الهرمية تتيح التوجيه دون معرفةٍ عالمية. هذه هي الميزة الأولى المفقودة في الـ MAC.

والفرق الجوهري MAC vs IP الذي يجب أن يثبت في عظمك:

  • MAC = اسمك (مسطّح، فريد، محروق، لا يتغيّر، لا يقول أين أنت).
  • IP = عنوانك (هرمي، يقول أين أنت، يتغيّر إذا انتقلت لشبكةٍ أخرى).

انقل لابتوبك من البيت للمقهى: MAC نفسه، IP تغيّر. هذا كل الفرق.

بنية IPv4: لماذا أربعة أرقام بنقاط

عنوان IPv4 = 32 بِتّة. لقراءته بشراً، نقسّمه أربع مجموعات من 8 بِتّات (octets) ونكتب كلاً عشرياً بنقطة: 192.168.1.10. كل octet من 0 إلى 255.

أين «أي شبكة» وأين «أي جهاز»؟ هذا هو السؤال الذي يلد الـ subnet.

اشتقاق الـ subnet والـ mask (لا تحفظه — استنتجه)

الراوتر يحتاج أن يجيب سؤالاً واحداً عن كل حزمة: «هل الوجهة على شبكتي المحلّية (فأسلّمها مباشرةً بالـ MAC)، أم بعيدة (فأمرّرها للراوتر التالي)؟»

لكي يجيب، يجب أن يعرف أين ينتهي «جزء الشبكة» في العنوان ويبدأ «جزء الجهاز». هذا الحدّ هو الـ subnet mask. نكتبه كعدد بِتّات الشبكة بعد / (تُسمّى CIDR):

text
192.168.1.10 / 24 └──────┬──────┘ └┬┘ العنوان أول 24 بِتّة = جزء الشبكة، آخر 8 = جزء الجهاز

/24 يعني: أول 24 بِتّة (192.168.1) تحدّد الشبكة، آخر 8 (.10) تحدّد الجهاز داخلها. فتكون شبكتك هي 192.168.1.0/24، وتسع 256 عنواناً (.0 إلى .255).

كيف يقرّر الراوتر «نفس الشبكة أم لا»؟ بعملية AND بِتّيّة بسيطة:

text
الوجهة: 192.168.1.50 = 11000000.10101000.00000001.00110010 mask /24: 255.255.255.0 = 11111111.11111111.11111111.00000000 AND ─────────────────────────────────────────────────── نتيجة: 192.168.1.0 ← هذا "عنوان الشبكة" يكرّرها على عنوانه هو (192.168.1.10) → 192.168.1.0 → نفس النتيجة → نفس الشبكة!

إن تطابق عنوانا الشبكة ← الوجهة جارٌ على نفس الـ LAN ← أسلّم بالـ MAC مباشرة. إن اختلفا ← بعيدة ← أرسلها للـ default gateway (الراوتر).

إجابة هولبرتون

جواب هولبرتون: ما الـ subnet؟ ليس «تقسيم الشبكة» حفظاً — بل: الحدّ الذي يفصل بِتّات الشبكة عن بِتّات الجهاز، والذي يعرّف بالضبط من تستطيع بلوغه بالـ MAC مباشرةً دون راوتر. الـ subnet هو حيث تلتقي طبقة 3 بطبقة 2.

عنوانان خاصّان داخل كل subnet لا يُعطَيان لجهاز:

🔗 الجسر العائد للمرحلة 01: ARP — وأجمل خبيئةٍ في المنهج

سؤالٌ يجب أن يكون قد أرّقك: قلنا «الراوتر يسلّم بالـ MAC إذا كانت الوجهة محلّية». لكن الحزمة فيها IP الوجهة، لا MAC-ها! من أين يأتي الـ MAC؟

هنا يدخل ARP (Address Resolution Protocol). حين يريد جهازك إرسال حزمة IP لجارٍ على شبكته (192.168.1.50) ولا يعرف MAC-ه، يبثّ سؤالاً على الـ LAN كله (تذكّر broadcast من المرحلة 01، ff:ff:ff:ff:ff:ff):

text
"من يملك 192.168.1.50؟ أخبروني بعنوان MAC-ه." ← هذا Type = 0x0806 (ARP)!

(أتذكر لغز المرحلة 01؟ الإطار الذي Type=08 06 وبُثَّ لـ ff..ff؟ كان ARP. الذي Type=08 00 كان IP. اشتقّيتها بنفسك قبل أن تعرف اسمها.)

صاحب العنوان يرد بـ MAC-ه، فيضع جهازك الحزمة في إطار وجهتُه ذلك الـ MAC. الآن الخبيئة العظمى:

لاحظ

حين ترسل حزمةً لجهازٍ على شبكتك: Dest MAC = MAC الجهاز نفسه. حين ترسل حزمةً لجهازٍ عبر العالم: Dest IP = الجهاز البعيد، لكن Dest MAC = MAC الراوتر (gateway-ك)، لا الوجهة!

الـ IP يبقى ثابتاً من المصدر للوجهة (end-to-end)، بينما الـ MAC يتغيّر في كل قفزة (hop): من جهازك ← راوترك، ثم راوترك ← الراوتر التالي... عند كل راوتر يُنزَع الإطار القديم ويُلَفّ إطارٌ جديد بـ MAC القفزة التالية، بينما حزمة الـ IP الداخلية لا تُمَسّ.

هذه الجملة وحدها تساوي نصف المنهج. اقرأها ثلاث مرات. هي السبب في أن طبقتين (2 و 3) موجودتان، وكيف تتعاونان: الـ IP يقرّر الوجهة النهائية والمسار، والـ MAC ينفّذ القفزة الواحدة.

الخاص والعام و NAT: مولودان من الندرة

IPv4 = 32 بِتّة = ‎2³² ≈ 4.29 مليار عنوان فقط. عددٌ بدا فلكياً في 1981، وصار مضحكاً مع انفجار الأجهزة. الحل الذي أنقذ الإنترنت من الاختناق:

text
10.0.0.0/8 (10.x.x.x) 172.16.0.0/12 (172.16.x.x – 172.31.x.x) 192.168.0.0/16 (192.168.x.x)
إجابة هولبرتون

جواب هولبرتون: نوعا الـ IP؟ عام (public) وخاص (private). والآن تعرف لماذا وُجد الخاص: لتأجيل نفاد العناوين عبر إعادة الاستخدام خلف NAT. لهذا IP جهازك داخلياً 10.0.2.15 أو 192.168.x.x (لاحظ مثال هولبرتون 10.0.2.15 — إنه نطاق 10/8 الخاص الذي يعطيه VirtualBox)، بينما IP-ك على الإنترنت مختلف تماماً.

عرَضٌ جانبيٌّ لـ NAT: جهازٌ خارجي لا يستطيع بدء اتصالٍ بجهازك الداخلي، لأن لا عنوان عاماً له، والراوتر لا يعرف لمن يسلّم حزمةً لم يطلبها أحدٌ من الداخل. هذا أعطى الناس شعوراً زائفاً بالأمان، وكسر بروتوكولات كثيرة (P2P، VoIP) واضطرّها لحيلٍ مثل hole punching. تذكّر هذا حين نتكلّم عن 0.0.0.0 والاستماع على المنافذ.

لماذا وُجد IPv6

NAT حلٌّ مؤقّت قبيح. النفاد الحقيقي وقع: استنفدت IANA آخر كتلة من عناوين IPv4 عام 2011. الحل الجذري: عنوانٌ أكبر بكثير.

إجابة هولبرتون

جواب هولبرتون: لماذا وُجد IPv6؟ لأن IPv4 (32 بِتّة) نفد فعلاً عام 2011، و NAT مجرّد ضمّادة. IPv6 (128 بِتّة) يحلّ الندرة جذرياً ويلغي الحاجة لـ NAT.


التعريف الحقيقي لـ WAN والإنترنت

الآن، بعد أن بنيتَ الـ IP والراوترات، صار هذا اشتقاقاً لا حفظاً:

إجابة هولبرتون

جواب هولبرتون (Task 1):

  • حاسب محلّي → LAN (جيرانه يبلغونه بالـ MAC).
  • مكتب لمكتب على بُعد شوارع → WAN (LANان متباعدان موصولان).
  • تتصفّح Google من جوّالك على بيانات الجوّال → الإنترنت (شبكتك تعبر شبكاتٍ

عامّة كثيرة لتبلغ شبكة Google).

ثلاثتها لم تُحفَظ — اشتُقّت من «ما الذي يلزم لربط شبكاتٍ عبر مسافات».


جرّب: شجرتك العائلية على الشبكة
bash
ip addr # عنوانك IP و الـ CIDR (مثلاً inet 10.0.2.15/24) و MAC ip route # جدول التوجيه — لاحظ السطر "default via X" = الـ gateway/الراوتر ip neigh # ذاكرة ARP: جدول IP↔MAC للجيران الذين كلّمتهم مؤخراً traceroute 8.8.8.8 # (أو tracepath) كل سطر = راوترٌ قفزتْ عبره حزمتك نحو Google

تأمّل traceroute: كل سطر راوترٌ حقيقي بين جهازك و Google. عند كل واحد منها، كان Dest MAC لإطارك هو MAC ذلك الراوتر، بينما Dest IP بقي 8.8.8.8 طوال الرحلة. الخبيئة التي قرأتها قبل قليل — تراها بعينك الآن. (كيف يصنع traceroute هذا السحر؟ بذرةٌ للمرحلة 05.)


لغز الإتقان (ورقة، قلم، ثنائي — لا حاسبة subnet)

عنوانك 172.16.20.130/25 (انتبه: ‎/25 لا /24).

  1. اكتب الـ mask ثنائياً وعشرياً. كم بِتّة للجهاز؟ كم عنواناً يسع هذا الـ subnet؟
  2. احسب يدوياً (AND): عنوان الشبكة، وعنوان الـ broadcast، ومدى عناوين الأجهزة القابلة للاستعمال.
  3. جهازٌ آخر 172.16.20.10. هل هو على شبكتك أم لا؟ برهِن بالـ AND.
  4. السؤال القاتل: لتُرسل لـ 172.16.20.10، ولـ 8.8.8.8 — ما الذي ستضعه في Dest MAC لكلٍّ منهما؟ ولِمَ يختلفان؟ (إن أجبت هذا بثقة، فقد أتقنت المرحلة.)
  5. كم subnet من نوع ‎/25 يتّسع داخل 172.16.20.0/24؟ ولماذا قسّم الناس شبكةً كبيرة لشبكاتٍ أصغر أصلاً؟ (فكّر: broadcast، عزل، أمان.)

الخلاصة وموقعك على الشجرة

العقدة المعلّقة: حزمتك وصلت حاسب صديقتك. لكن حاسبها يشغّل متصفّحاً وSpotify ولعبة وSSH في آنٍ واحد. الحزمة تحمل IP-ها فقط. أي برنامجٍ من هؤلاء يأخذها؟ الـ IP أوصل الرسالة للمبنى — من موظّف غرفة البريد داخل المبنى؟

بذرة

الـ IP يعرّف الجهاز، لا المحادثة ولا البرنامج. لو وصلت حزمتان لنفس الـ IP، يجب على نظام التشغيل أن يفرزهما: هذه للمتصفّح، تلك لـ SSH. هذا الفرز (demultiplexing) يتطلّب رقماً ثانياً، رقماً داخل الجهاز. ومن هذا الرقم سيولد كل ما تعرفه عن المنافذ، والـ sockets، وأخيراً الفرق العظيم بين TCP و UDP — في المرحلة 03.

← التالي: 03-the-last-mile.md