
نحن نتعامل مع اتصال الشبكات الحديث وكأنه خدعة سحرية خالية من العيوب: يتم إطلاق استدعاء API، وتستعلم قاعدة البيانات، وتمتلئ لوحة المعلومات بالبيانات في أجزاء من الألف من الثانية. لكن تحت هذه الطبقات البرمجية النظيفة، يكمن تصادم عنيف وسريع بين الفيزياء والسيليكون. كل حمولة بيانات (payload) تعبر مركز بيانات أو بوابة محلية يجب أن تتجرد في النهاية من أناقتها البرمجية وتتحول إلى طاقة كهربائية خام. حقيقة الشبكات ليست مجرد كود برمجي؛ بل هي بيئة فوضوية من تقلبات الجهد المجهرية (voltage fluctuations)، والإشارات التفاضلية (differential signaling)، والموجات الكهرومغناطيسية التي تتسابق عبر أزواج الأسلاك النحاسية المجدولة بجزء من سرعة الضوء.
تعد رحلة الحزمة من هذه النبضات الكهربائية التناظرية وعودتها لتصبح حمولة بيانات تطبيق منظمة تماماً بمثابة درس متقدم في الهندسة. إنه سباق تتابع مجهري وعالي المخاطر، حيث يجب على شرائح PHY المادية، ووحدات تحكم MAC، ومحركات الوصول المباشر للذاكرة (DMA)، ونواة نظام التشغيل أن تنسق تسليم البيانات في أجزاء من المليار من الثانية لمنع انهيار الاتصال بالكامل. هذه هي القصة الحقيقية لنموذج OSI، مكشوفة وقيد العمل — تحليل دقيق خطوة بخطوة لكيفية قيام بطاقة واجهة الشبكة (NIC) بسحب الجهد الكهربائي الخام من السلك وإعادته إلى العالم الرقمي.
عندما يرسل تطبيق ما بيانات عبر الشبكة، فإنه لا يلقي بالبايتات الخام على السلك فحسب. بدلاً من ذلك، يبدأ رحلة هبوط منسقة بعناية عبر نموذج OSI. تخضع البيانات لعملية التغليف (encapsulation) — حيث تقوم كل طبقة بتغليف حمولة البيانات بترويسات التحكم (control headers) الخاصة بها، وتقسيمها إلى أجزاء يمكن التحكم فيها، وتسليمها إلى النواة، وعبور ناقل PCIe، وتحويلها أخيراً إلى جهود كهربائية تنتقل عبر الأزواج النحاسية. يفكك هذا الدليل التقني هذا النزول الدقيق، بدءاً من مساحة المستخدم وصولاً إلى الوسيط المادي.
تبدأ الرحلة في User Space، بعيداً عن الأجهزة. عندما يرغب تطبيق ما (مثل متصفح الويب أو عميل قاعدة البيانات) في الاتصال، فإنه ينشئ بيانات بتنسيقات قابلة للقراءة.
Layer 7 (Application): هنا تُترجم نية المستخدم إلى بروتوكولات طبقة التطبيق (HTTP, TLS, DNS, SSH). على سبيل المثال، يقوم عميل HTTP بإنشاء سلسلة طلب GET على النحو التالي: GET /index.html HTTP/1.1.
Layer 6 (Presentation): مسؤولة عن بناء جملة البيانات، والتسلسل (serialization)، والأمان. إذا تم تمكين التشفير (مثل TLS 1.3)، تقوم هذه الطبقة بتسلسل بيانات التطبيق، وتشفير النص العادي إلى ciphertexts، وإضافة ترويسات السجل الخاصة بها.
Layer 5 (Session): تقوم بإنشاء وصيانة وإنهاء جلسات الاتصال بين التطبيقات، مع الحفاظ على عمليات تبادل البيانات طويلة الأمد متميزة ومتزامنة.
بمجرد تنسيقها، يقوم التطبيق بتشغيل استدعاء نظام (مثل write() أو send()) لتسليم حمولة البيانات إلى نواة نظام التشغيل.
في هذه الطبقة، يأخذ مكدس شبكة نظام التشغيل بيانات التطبيق الخام ويقرر كيفية تسليمها. الآليتان الأساسيتان هنا هما TCP و UDP.

The OSI Encapsulation Descent. Source: edu-search-genmedia
TCP (Transmission Control Protocol): إذا كانت الموثوقية مطلوبة، تقوم النواة بتقسيم تدفق البايتات المستمر إلى أجزاء (segments) تتناسب مع حجم MSS (Maximum Segment Size). وتُلحق ترويسة TCP بحجم 20 إلى 60 بايت تحتوي على منافذ المصدر/الوجهة، وأرقام التسلسل لإعادة التجميع، وأرقام التأكيد (acknowledgment numbers)، وأحجام النوافذ للتحكم في التدفق، والمجاميع الاختبارية (checksums).
UDP (User Datagram Protocol): بالنسبة لحركة المرور الخفيفة ذات زمن الوصول المنخفض، تقوم النواة بتغليف الحمولة في ترويسة UDP مدمجة بحجم 8 بايت تحتوي فقط على المنافذ، والطول، والـ checksum.
بمجرد تغليفها، تقوم طبقة النقل بتسليم البيانات إلى طبقة الشبكة عبر الهياكل الداخلية للنواة (مثل sk_buff في نظام Linux).
هنا يحدث التوجيه العالمي والعنونة المنطقية باستخدام بروتوكول IPv4 أو IPv6.
إضافة ترويسة IP: تضيف النواة ترويسة بحجم 20 بايت (IPv4) أو 40 بايت (IPv6) تحتوي على عنوان IP المصدر، وعنوان IP الوجهة، وحد القفزات (TTL)، ومعرفات البروتوكول.
البحث عن المسار والتحقق من MTU: تتحقق النواة من جدول التوجيه لتحديد بطاقة الشبكة (NIC) التي يجب أن تتعامل مع الحزمة. وتُقيّم MTU (Maximum Transmission Unit). إذا تجاوزت الحزمة هذه القيمة، يتم تشغيل التجزئة (fragmentation).
حل عناوين الجيران (Neighbor Resolution): قبل تسليم الحزمة إلى بطاقة الشبكة، يستعلم نظام التشغيل من جدول ARP (لـ IPv4) أو NDP (لـ IPv6) لتعيين عنوان IP إلى عنوان MAC مادي.
يعمل نظام التشغيل ومحرك بطاقة NIC معاً لتحويل الحزمة إلى إطار Ethernet Frame.
إضافة ترويسة MAC: يتم إلحاق ترويسة بحجم 14 بايت تحتوي على عنوان MAC الوجهة، وعنوان MAC المصدر، وحقل EtherType.
التسليم عبر DMA و PCIe: يضع المشغل (driver) الإطار في Ring Buffer ويوجه محرك DMA عبر ناقل PCIe لسحب الإطار إلى ذاكرة التخزين المؤقت SRAM في البطاقة.
إنشاء FCS: قبل الإرسال، تقوم وحدة تحكم MAC بإنشاء تسلسل التحقق (FCS باستخدام CRC-32) وتُلحقه في النهاية لتكتشف جهة الاستقبال أي تلف في البتات.
تنتقل المرحلة النهائية إلى الفيزياء التناظرية البحتة، حيث تقوم شريحة PHY بتحويل البتات الرقمية إلى طاقة مادية.
Preamble و SFD: تُضاف 7 بايت من الـ Preamble وبايت كـ Start Frame Delimiter لمزامنة ساعة المستقبل.
تشفير الخط والتشويش: يتم تشويش البتات الخام لضمان انتقالات الإشارة. في Gigabit Ethernet، يتم تعديل البتات باستخدام PAM-5.

Differential Voltage Signaling Across Copper Pairs. Source: Practical Networking
الإشارات التفاضلية (Differential Signaling): تُحول محركات الخطوط الرموز إلى تيارات كهربائية عبر الأزواج النحاسية (مثلاً +2.5V و -2.5V).
الانتشار الكهرومغناطيسي: يخلق فرق الجهد موجة كهرومغناطيسية تنتقل بسرعة تقارب 60-70٪ من سرعة الضوء.
عندما تضرب نبضة كهربائية بطاقة الشبكة (NIC)، يجب أن تتعاون الأجهزة والبرمجيات للتحقق من الحمولة، وإعادة تجميعها، وتسليمها في غضون ميكروثانية. إليك التسلسل العكسي:
تلتقط شريحة PHY الطاقة التناظرية وتترجمها مرة أخرى إلى تدفق بتات رقمي.
استعادة الساعة (Clock Recovery): تحلل أجهزة PLL الخاصة بالمستقبل انتقالات الجهد لاستخراج توقيت ساعة المرسل ومزامنة نفسه.
فك تشفير الرموز: يقرأ المحول التناظري الرقمي (ADC) مستويات الجهد ويعينها مرة أخرى إلى كود ثنائي (binary code).
Descrambling و PCS: تطبق الطبقة الفرعية للترميز المادي (PCS) خوارزمية عكسية لفك تشويش البيانات وإعادتها إلى تدفق البتات الأصلي.

Internal Architecture of a Receiver PHY. Source: Embedded Hardware Design
تمرر شريحة PHY البتات إلى شريحة MAC.
مزامنة الإطار: يمسح الـ MAC البتات بحثاً عن الـ Preamble و SFD لبدء تسجيل إطار جديد.
تصفية عناوين الأجهزة: يقرأ الـ MAC عنوان MAC الوجهة؛ وإذا لم يتطابق، تتخلص الشريحة فوراً من الإطار.
التحقق من FCS: يعيد الـ MAC حساب تجزئة CRC-32. إذا لم تتطابق النتيجة مع المرفقة في الإطار، يتم إسقاط البيانات بصمت.
يجب على الـ MAC الآن نقل الإطار الصالح إلى ذاكرة الوصول العشوائي (RAM).
الوصول المباشر للذاكرة (DMA): تدفع بطاقة NIC الإطار عبر ناقل PCIe مباشرةً إلى RX Ring Buffer في Host RAM.
مقاطعات الأجهزة (Hardware Interrupts): ترسل بطاقة NIC مقاطعة (مثل MSI-X) إلى الـ CPU للإشارة لوجود بيانات.
استطلاع NAPI: لمنع عاصفة المقاطعات، تقوم أنظمة Linux بتعطيل المقاطعات بعد الأولى وتدخل في وضع الاستطلاع (polling mode) لتفريغ الحزم بسرعة.

The DMA and Kernel Receive Stack. Source: edu-search-genmedia
يمرر الـ driver البيانات إلى مكدس الشبكة في النواة.
الطبقة 3 (IP): تُزال ترويسة Ethernet وتُفحص ترويسة IP للتأكد من الوجهة.
الطبقة 4 (TCP/UDP): بالنسبة لـ UDP، تُوجه الحزمة فوراً. أما لـ TCP، تضع النواة الـ segment في طابور إعادة التجميع وتُنشئ حزمة ACK. (تساعد ميزات مثل LRO في دمج مقاطع TCP متعددة لتقليل العبء).
البيانات الآن عبارة عن تدفق مرتب في ذاكرة النواة.
Socket Buffers: تقوم النواة بتعيين منفذ الوجهة (مثلاً Port 443) إلى الـ Receive Socket Buffer الخاص بالتطبيق.
Context Switch: ينفذ التطبيق استدعاء نظام مثل read() أو يتم إيقاظه بواسطة أنظمة مثل epoll.
نسخ الذاكرة والتنفيذ: تنسخ الـ CPU الحمولة من مساحة النواة إلى ذاكرة User Space، ليتولى التطبيق تحليل ترويسات HTTP، أو فك تشفير TLS ciphertext، أو تنفيذ الاستعلام.
كن أول من يقيّم هذا المقال

تعرّف على Containers as a Service (CaaS)، وكيف تعمل الحاويات وإدارة التطبيقات والتوسع التلقائي، وما الفرق بين CaaS وIaaS وPaaS وFaaS.

تعرف كيف تتيح الواجهة الخلفية كخدمة للمطورين الاستفادة من خدمات Backend جاهزة وتسريع الانتقال من الفكرة إلى التطبيق.

تُعد الحاويات كخدمة (CaaS) نموذجاً متقدماً للحوسبة السحابية تتيح هذه التقنية للمطورين وفرق العمليات نشر وتسيير التطبيقات المعبأة في حاويات باستخدام أدوات البناء الشهيرة مثل دوكر (Docker). كما تعتمد على محركات تنسيق وأتمتة متقدمة مثل كوبرنيتس (Kubernetes) لإدارة تلك الحاويات ومجموعاتها (Clusters) وتوسيعها تلقائياً حسب الحاجة وبهذا تُعفي المنصة المؤسسات من تعقيدات إدارة البنية التحتية المادية، وتمكنها من التركيز كلياً على تطوير البرمجيات بكفاءة وأمان