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

المرحلة 01 — سلكٌ واحد

لاحظ

الطبقات التي نبنيها هنا: Physical (L1) و Data Link (L2). وفيها يولد أول عنوان: الـ MAC، وأول تعريفٍ حقيقي لـ LAN.

النبذة

في المرحلة 00 كان عندنا سلكٌ بين حاسبين، واكتشفنا أن مجرّد إرسال hi يتطلّب سبعة اتفاقات. سنفترض الآن أن مشاكل الفولتية والتزامن والترميز (أ، ب) محلولة — هذه هي الطبقة الفيزيائية، ولن نقضي فيها وقتاً لأنها هندسة كهرباء لا شبكات. سنقفز للمشكلة التي تبدأ منها الشبكات فعلاً: ماذا يحدث حين يكون على السلك أكثر من اثنين؟


اللغز

وصّلنا خمسة حواسيب على سلكٍ واحدٍ مشترك (هذا فعلاً كيف كان Ethernet البدائي يعمل: كيبل واحد سميك، الجميع ملحومون عليه — يُسمّى bus). أي فولتية تضعها A على السلك، يسمعها الجميع فوراً: B, C, D, E.

A تريد أن ترسل hi لـ C تحديداً.

  1. كيف يعرف C أن هذه الرسالة له، لا لـ B أو D؟
  2. وحين ينتهي C ويريد الرد، كيف تعرف A أن الرد جاءها منه؟
  3. والأصعب: ماذا لو بدأت A و D الإرسال في نفس اللحظة؟

صمّم حلاً. لا تكمل حتى تكتب آليةً لكل سؤال. (تلميح لتوجيه التفكير لا للحل: السؤال الأول والثاني يطلبان نفس الشيء — كيف نسمّي جهازاً على السلك.)


الدرس

ليش نحتاج «اسماً» لكل بطاقة — ولماذا يُحرَق في المصنع

حلّك للسؤالين ١ و ٢ لا بد أنه نوعٌ من: «كل جهاز له معرّف فريد، ونضع معرّف المرسِل والمستقبِل في بداية الرسالة، والكل يسمع لكن من لا يطابق معرّفُه المستقبِلَ يتجاهل».

ممتاز — اخترعتَ الـ MAC address (Media Access Control address).

لكن السؤال الأعمق، الذي يفرّق من فهم عمّن حفظ: من أين يأتي هذا المعرّف؟

تخيّل أن الأجهزة تختار أرقامها عند الإقلاع. مشكلتان قاتلتان:

الحل الوحيد المنطقي: يأتي الرقم محروقاً في البطاقة من المصنع، وفريداً عالمياً. ولكي يكون فريداً عالمياً دون تنسيقٍ لحظي، قُسّم الـ 48 بِتّة إلى نصفين:

text
48 bit = [ 24 bit OUI ] [ 24 bit رقم الجهاز ] مُعرّف الشركة تختاره الشركة بحرية (تشتريه من IEEE)

النتيجة: تفرّدٌ عالميٌّ بلا مرجعٍ مركزي لحظي — كلٌّ يدير مجاله. هذا لماذا الـ MAC يُكتب هكذا: a4:83:e7:1f:0c:9d — ستة بايتات، أول ثلاثة هي OUI.

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

جواب سؤال هولبرتون (Task 2): ما الـ MAC؟ «المعرّف الفريد لواجهة شبكة». لاحظ أنك لم تحفظ هذا — اشتققتَه: هو الاسم الذي تحتاجه بطاقةٌ ما لتُميَّز على سلكٍ مشترك، ولذلك هو خاصّ بـ«واجهة الشبكة» (NIC) لا بالحاسب. حاسبٌ بثلاث بطاقات له ثلاثة عناوين MAC.

التأطير: كيف يُغلَّف hi فعلياً (الـ Frame)

السؤالان ١ و ٢ يفرضان أن كل رسالة على السلك يجب أن تحمل المرسِل والمستقبِل. وحلّ مشكلة 00-(و) (تلف بِتّة) يفرض checksum. فتصير الوحدة المرسَلة على السلك ليست hi عارية، بل hi ملفوفةً في إطار (Ethernet Frame):

text
[ Preamble ][ Dest MAC ][ Src MAC ][ Type ][ ...الحمولة (payload)... ][ FCS ] 7+1 بايت 6 بايت 6 بايت 2 بايت 46–1500 بايت 4 بايت Preamble : نبضات تزامن، تقول للمستقبِل "انتبه، إطارٌ قادم" (حل مشكلة 00-أ/ج) Dest MAC : لمن؟ (السؤال 1) Src MAC : ممن؟ (السؤال 2) Type : ما نوع الحمولة بالداخل؟ (مثلاً 0x0800 = بداخلي IP) — تذكّر هذا الحقل FCS : Frame Check Sequence = الـ checksum (حل مشكلة 00-و)

كل بطاقة على السلك تقرأ Dest MAC؛ إن لم يطابق عنوانها (وليس عنوان البث) تُسقِط الإطار في العتاد قبل أن يزعج المعالج. (عنوان خاص ff:ff:ff:ff:ff:ff = broadcast = «للجميع» — احفظ هذا، سنحتاجه بشدّة في المرحلة 02.)

السؤال ٣: التصادم — ومولد الحلّ التاريخي

حين يرسل اثنان معاً تتشوّش الفولتية = collision. الحل الأصلي (CSMA/CD): «أصغِ قبل أن تتكلّم؛ وإن سمعتَ تصادماً أثناء الإرسال، اصمت فترةً عشوائية ثم أعِد». لم يَعُد هذا مستخدماً اليوم لأن الـ switch قتل المشكلة: السويتش يعطي كل جهاز سلكَه الخاص ويعيد توجيه الإطار للمنفذ الصحيح فقط (يبني جدولاً MAC↔منفذ). لا حاجة للتفصيل الآن — يكفي أن تعرف أن «السلك المشترك» صار تجريداً، والسويتش يحافظ على الوهم بكفاءة.


التعريف الحقيقي لـ LAN (لا التعريف المحفوظ)

هولبرتون سيقول لك: «LAN يربط الأجهزة المحلّية، حجمه غرفة/مبنى». هذا وصفُ نتيجةٍ، لا تعريفاً. التعريف الذي اشتققتَه:

لاحظ

الـ LAN هو مجموعة الأجهزة التي تستطيع الوصول لبعضها مباشرةً بعنوان الـ MAC، على نسيج طبقة-وصلٍ واحد (سلك/سويتش)، دون أن يقف بينها شيءٌ يترجم العناوين.

أي: «أنا وأنت في نفس الـ LAN» ⟺ «أستطيع أن أضع MAC-ك في إطارٍ ويصلك مباشرة». أما «الحجم غرفة أو مبنى» فهو عاقبةٌ لا تعريف: مدى تقنيات الطبقة الفيزيائية (طول كيبل Ethernet، مدى إشارة الواي-فاي) محدود فيزيائياً، فيصير الـ LAN صغيراً جغرافياً. التعريف سببٌ، والحجم نتيجة.

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

جواب هولبرتون (Task 1، السؤال الأول): الحاسب المحلّي متّصل بـ؟ → LAN. الآن تعرف لماذا: لأنه على نسيجٍ يبلغه جيرانه بالـ MAC مباشرة.


جرّب: شاهد عنوانك الحقيقي

على Linux:

bash
ip link show # كل واجهة وعنوان MAC-ها (سطر link/ether)

سترى شيئاً مثل link/ether a4:83:e7:1f:0c:9d. خذ أول ثلاث بايتات (a4:83:e7) وابحث عنها في أي «MAC OUI lookup» — سيخبرك بالشركة المصنّعة لبطاقتك. هذا الـ OUI الذي اشتريَته الشركة من IEEE، حيٌّ أمامك.

(على macOS: ifconfig en0 | grep ether. لاحظ اختلاف الأداة — سنعالج هذا في 07.)


لغز الإتقان (لا تأداة — ورقة وقلم)

إليك بداية إطار Ethernet كـ hex، وعنوان MAC جهازك هو a4:83:e7:1f:0c:9d:

text
ff ff ff ff ff ff 00 1a 2b 3c 4d 5e 08 06 ...

ثم إطار ثانٍ:

text
a4 83 e7 1f 0c 9d 00 1a 2b 3c 4d 5e 08 00 ...

ثالث:

text
b8 27 eb 00 11 22 00 1a 2b 3c 4d 5e 08 00 ...

لكل إطار، أجِب وبرهِن:

  1. ما عنوان الوجهة؟ عنوان المصدر؟ ما حقل Type؟
  2. هل ستقبله بطاقتك أم تُسقطه في العتاد؟ ولماذا؟
  3. في الإطار الأول، Type = 08 06. في الثاني والثالث 08 00. أحدهما يعني «بداخلي IP»، والآخر يعني شيئاً آخر سنكتشفه بعد قليل. خمّن أيهما الـ IP، ولماذا قد يحتاج جهازٌ أن يبثّ شيئاً لـ«الجميع» (ff..ff) لكنه ليس IP عادي.
لاحظ

القرار الذي تتّخذه بطاقتك في السؤال 2 هو حرفياً ما يفعله العتاد ملايين المرات في الثانية. أنت الآن تفكّر مثل بطاقة شبكة.


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

العقدة المعلّقة التي يجب أن تحكّك: قلتُ إن الـ MAC «معناه محلّيٌّ فقط». وقلت إن حقل Type قد يساوي «بداخلي IP». ما هذا الـ IP؟ ولماذا نحتاجه إن كان الـ MAC يكفي؟

بذرة

الـ MAC مسطّح: b8:27:eb:00:11:22 لا يخبرك أين هذا الجهاز في العالم، تماماً كما أن اسم «محمد» لا يخبرك بعنوانه. على سلكٍ من خمسة أجهزة هذا لا يهم — تصرخ للجميع ومن يطابق يرد. لكن تخيّل خمسة مليارات جهاز. لا يمكن أن يصرخ كلٌّ للجميع، ولا أن يحفظ كلٌّ عنوان كل أحد. الـ MAC المسطّح ينهار تماماً عند هذا الحجم. في المرحلة 02 سنكتشف أن الخروج من الغرفة يتطلّب نوعاً جديداً تماماً من العناوين: عنواناً هرمياً يقول «أين»، لا «من» فقط.

← التالي: 02-many-networks.md