STACK://UP الأقاليم 0/9RTL · AR / قفز · ? اختصارات UP

الإقليم ٠ — الطلب الذي يصل: من اسمٍ إلى خادم

النبذة

في منهج الشبكات أنهيتَ رحلةً عند بابٍ مغلق: عرفتَ أن /etc/hosts هو أبسط مترجمٍ من اسمٍ إلى IP، وأن العالم لا يمكن أن يعتمد على ملفٍ في كل جهاز، فوُلد DNS — وتركناه هناك بذرةً. الآن أنت في الجهة الأخرى من الباب: تملك خادماً حقيقياً على 8.8.8.8، وتريد أن يصل إليه كل من يكتب www.foobar.com في متصفّحه. هذا الإقليم يفتح البذرة: كيف يصير الاسم عنواناً، ومن يملك الإجابة، وما نوع الإجابة.

اللغز المستفزّ (توقّف وفكّر قبل أن تكمل)

المشروع يطلب منك: «نطاق foobar.com مضبوطٌ بسجلّ www يشير إلى IP خادمك 8.8.8.8». ثم يسألك سؤالاً يسقط فيه أكثر الطلاب:

لاحظ

ما نوع سجلّ DNS الذي يمثّله www في www.foobar.com؟

قبل أن تقرأ كلمةً أخرى: اكتب إجابتك على ورقة. A? CNAME? شيءٌ آخر؟ ولماذا؟ خذ دقيقتك — الفخّ مصمَّمٌ ليصطادك إن أجبت بالعادة لا بالتعريف.

الدرس

ليش نحتاج DNS أصلاً — الدافع الذي تركناه في منهج الشبكات

أنت تعرف من قبل: البشر يحفظون أسماءً، والآلات تسيّر حِزماً إلى أرقام (IP). و /etc/hosts يحلّ هذا لكنه لا يتوسّع: مَن يحدّث الملف على ملياري جهازٍ كلما تغيّر IP موقع؟ المشكلة الحقيقية ليست «الترجمة» — أنت تعرف الترجمة. المشكلة هي التفويض (delegation) واللامركزية: لا أحد يملك القائمة كاملة، ولا يجب أن يملكها. DNS هو الحلّ: شجرةٌ موزَّعة، كل جزءٍ منها يملكه من يملك ذلك الجزء.

ابنِها بنفسك ذهنياً. لو طُلب منك تصميم نظام أسماءٍ للعالم كله بلا ملفٍ مركزي، ستُجبَر على هذه القرارات بالضبط:

هذا بالضبط ما فعله DNS الحقيقي. لاحظ: لم تحفظ شيئاً — اشتققتَه من قيد «بلا مركز». لن نغوص أعمق في آلية الاستعلام الكامل (recursive vs iterative، الجذر، الـ TLD servers) — ذلك تفصيلٌ يفتحه الإقليم ٨ حين نتتبّع google.com خطوةً خطوة. هنا يكفيك: النطاق له منطقة (zone) فيها سجلّات (records)، وكلٌّ منها من نوعٍ يحدّد معناه.

ليش «أنواع» للسجلّات — وما الفرق الذي يصطادك في اللغز

السجلّ في DNS سطرٌ يقول: «هذا الاسم، من هذا النوع، يساوي هذه القيمة». النوع ليس زينة — هو ما تعنيه القيمة. أهمّ الأنواع التي يجب أن تشتقّ منطقها:

النوعيربط…القيمةليش وُجد
Aاسماً ⟵ عنوان IPv4مثل 8.8.8.8الترجمة الأساسية: اسم → رقم
AAAAاسماً ⟵ عنوان IPv62001:db8::1نفس الفكرة لكن IPv6
CNAMEاسماً ⟵ اسمٍ آخر (alias)مثل foobar.comلتقول «هذا الاسم هو لقبٌ لذاك، اسأل عنه»
MXنطاقاً ⟵ خادم بريدهmail.foobar.comلتوجيه البريد
NSنطاقاً ⟵ خوادمه الموثوقةns1.foobar.comالتفويض نفسه
TXTاسماً ⟵ نصّاً حرّاًأي نصتحقّق ملكية، سياسات بريد…

المفتاح في اللغز هو الفرق بين سطرين فقط:

الآن أعد قراءة المشروع: «سجلّ www يشير إلى IP خادمك 8.8.8.8». القيمة رقم IP. وما النوع الوحيد الذي قيمته رقم IPv4؟ A. إذاً www هنا سجلّ A، لا CNAME. من أجاب CNAME وقع في عادةٍ شائعة: في مواقع الإنتاج كثيراً ما يكون www سجلّ CNAME يشير إلى النطاق الجذر أو إلى موزِّعٍ خارجي — لكن في هذا المشروع القيمة المعطاة رقم IP، وهذا يحسم النوع. النوع يُحدَّد بالقيمة، لا بالاسم www. هذا هو الدرس.

ليش «خادم» ليست صندوقاً — تعريفٌ يربك ثم يُوضّح

سؤالٌ آخر يطرحه المشروع: «ما هو الـ server؟» الفخّ أن تشير إلى صندوقٍ معدني. لكن الـ server ليس الحديد. الخادم برنامجٌ (أو جهازٌ) يقدّم خدمةً عبر الشبكة استجابةً لطلبات عملاء (clients). الكلمة تصف دوراً، لا شكلاً. نفس الصندوق قد يحمل عدّة خوادم (web server, database server) في آنٍ واحد — وهذا بالضبط حال Task 0: خادمٌ واحدٌ (صندوق) يشغّل عدّة خوادم (أدوار). احفظ هذا التمييز؛ سيصير محورياً في الإقليم ١ حين نفكّك الأدوار داخل الصندوق الواحد.

ليش يصل الطلب أصلاً: ما الذي «يتكلّم» به الخادم مع المستخدم

المشروع يسأل: «ما الذي يستخدمه الخادم للتواصل مع جهاز المستخدم؟» أنت تملك الجواب من منهج الشبكات تقريباً كاملاً: المتصفّح يفتح TCP (المصافحة الثلاثية التي بنيتَها) إلى IP الخادم على port معيّن (٨٠ أو ٤٤٣ — منافذ معروفة درستَها)، ثم يتحدّثان فوق هذا الاتصال بلغةٍ من طبقة التطبيق اسمها HTTPHTTPS حين يكون مشفّراً — إقليم ٥). إذاً الجواب الدقيق: HTTP/HTTPS فوق TCP/IP. لاحظ كيف أن كل اللبنات تحت HTTP مبنيّةٌ سلفاً — لم نعد اشتقاق TCP، استعملناه. هذا هو معنى البناء فوق منهجٍ سابق.

التمرين (سبورة + ورقة)

ارسم على ورقة النصف الأول من رحلة الطلب، من لحظة ما يكتب المستخدم www.foobar.com إلى لحظة ما تصبح بيده 8.8.8.8 جاهزاً ليفتح اتصالاً:

  1. المستخدم يكتب الاسم. مَن يُسأل أولاً، ولماذا؟
  2. أين يتدخّل الـ DNS resolver، وماذا يعيد بالضبط (أي نوع سجلّ)؟
  3. لماذا قد لا يُسأل DNS إطلاقاً في الطلب التالي مباشرةً (TTL/cache)؟
  4. بأي شيءٍ سيفتح المتصفّح الاتصال بعد أن صار IP بيده، وعلى أي port؟

لا تكتب فقرات — ارسم صناديق وأسهماً وسمِّ كل سهمٍ ببروتوكوله. هذا تمرينُ السبورة الحقيقي. حين تنتهي، قارن منطقك بالخلاصة أدناه — لا قبلها.

الخلاصة — وصلٌ في الشجرة

البذرة المتروكة هنا: الآن صار IP بيد المستخدم، وفُتح الاتصال، ووصل الطلب إلى الصندوق على 8.8.8.8. لكن ماذا يوجد داخل ذلك الصندوق؟ كيف يتحوّل «GET /» الواصل إلى صفحةٍ فيها بياناتٌ من قاعدة بيانات؟ ولماذا لا يكفي برنامجٌ واحد؟ هذا هو الإقليم ١.


على السبورة (كما تقولها بالإنجليزية، لا أطول)

The domain name gives humans a memorable name instead of an IP. I configured foobar.com with a www record pointing to 8.8.8.8.

That www record is an A record — because its value is an IPv4 address. (A CNAME would point to another name, not to an IP.)

When a user requests www.foobar.com, DNS resolves the name to the IP (cached for the record's TTL), then the browser opens a TCP connection to 8.8.8.8 and speaks HTTP over it.

A server is a machine/program that provides a service in response to client requests — it's a role, not necessarily a dedicated box.

وقفة الانضباط: إن لم يسألوا «كيف يعمل DNS داخلياً»، لا تشرح الـ recursive resolution. قل إنه يحلّ الاسم إلى IP وانتقل. الإطناب هنا يضرّك.