TCP/IP والطبقات التي تهم
TCP/IP والطبقات التي تهم
كل حادثة إنتاجية تتعلق بالاتصال — حاوية Pod لا تستطيع الوصول إلى قاعدة البيانات، موازن تحميل يصل إلى حد الزمن، أو خدمة مصغرة تُرجع Connection refused — تعود إلى إحدى أربع طبقات مفاهيمية. قبل أن تتناول tcpdump أو تفتح قاعدة جدار حماية، تحتاج إلى نموذج ذهني دقيق يُحدد أين تقع المشكلة في المكدس. هذا النموذج هو مكدس TCP/IP المكون من أربع طبقات.
الطبقات الأربع
تضيف كل طبقة رأساً (وأحياناً ذيلاً) إلى الحمولة التي تستلمها من الطبقة الأعلى. تُسمى هذه العملية التغليف (Encapsulation). على الجانب المستقبل، تقشر كل طبقة رأسها الخاص وتُمرر الباقي إلى الأعلى — وهو ما يُسمى إزالة التغليف (Decapsulation).
الطبقة الأولى — الوصول إلى الشبكة (طبقة الرابط)
تتعامل هذه الطبقة مع الإرسال المادي بين عقدتين متصلتين مباشرة — مُشغّل بطاقة الشبكة NIC، وإطارات Ethernet، وعناوين MAC، وشبكات VLAN. في بيئات السحابة، الوسيط "المادي" هو افتراضي: أنفاق VXLAN (المستخدمة في إضافات CNI لـ Kubernetes مثل Flannel وCalico) تُغلف حزم IP داخل مخططات UDP حتى تمتد الشبكات المتراكبة عبر مضيفين فيزيائيين متعددين.
نادراً ما يُهيئ مهندسو DevOps هذه الطبقة مباشرة، لكن أعطالها تظهر باستمرار: تعارضات MTU تُسبب إسقاط حزم غامضاً يبدو كانقطاع مهلة التطبيق. تحقق من MTU باستخدام:
الطبقة الثانية — الإنترنت (طبقة الشبكة)
IP هو الغراء الشامل. تحمل كل حزمة IP المصدر، وIP الوجهة، وTTL (وقت البقاء، يُخفَّض بواحد عند كل قفزة موجّه)، وحقل البروتوكول (6 = TCP، 17 = UDP، 1 = ICMP). قرارات التوجيه تحدث هنا — تستشير النواة جدول التوجيه وتُسلّم محلياً أو تُعيد التوجيه إلى بوابة.
traceroute عند القفزة الخامسة، فهناك جدار حماية أو مسار أسود هناك. أما إذا وصل TTL إلى الوجهة لكن الاتصالات لا تزال تفشل، فالمشكلة في الطبقة الثالثة (النقل) أو أعلى.
الطبقة الثالثة — النقل
تضيف طبقة النقل دلالات التسليم من طرف إلى طرف. البروتوكولان الأبرز:
- TCP — موجّه بالاتصال، موثوق، مرتّب. يستخدم مصافحة ثلاثية الاتجاهات (SYN / SYN-ACK / ACK) قبل تدفق البيانات. يُعيد إرسال الأجزاء المفقودة. يستخدمه HTTP/1.1 وHTTP/2 وgRPC وPostgreSQL وRedis.
- UDP — بلا اتصال، غير موثوق، ذو تأخير منخفض. لا مصافحة، لا إعادة إرسال. يستخدمه DNS وQUIC/HTTP/3 والاتصال الصوتي وبعض عوامل المراقبة.
تنتمي المنافذ (Ports) إلى هذه الطبقة. يُعرَّف المقبس (Socket) بالرباعية: (IP المصدر، منفذ المصدر، IP الوجهة، منفذ الوجهة). يستخدم نظام التشغيل هذه الرباعية لتوزيع الأجزاء الواردة على العملية الصحيحة. المنافذ المؤقتة (عادةً 32768–60999 على Linux) يُسندها النواة للاتصالات الصادرة.
الطبقة الرابعة — التطبيق
كل ما يقع فوق TCP/UDP هو طبقة التطبيق: HTTP، وTLS (يُعامَل كمسألة على مستوى التطبيق في هذا النموذج)، وDNS، وSSH، وgRPC، وخدماتك المصغرة الخاصة. هنا تعيش توجيه الطلبات والمصادقة ومنطق الأعمال.
التغليف عملياً: طلب HTTP حقيقي
عندما يستدعي تطبيقك POST https://api.example.com/orders، إليك ما يحدث فعلاً عند كل طبقة على جهاز الإرسال:
- التطبيق: تُسلسل مكتبة HTTP الرؤوس وجسم JSON إلى بايتات.
- النقل: تُغلف طبقة TCP في النواة البيانات في قطعة TCP مع منافذ المصدر/الوجهة ورقم التسلسل والأعلام.
- الإنترنت: تُسبق طبقة IP رأس IP مع عناوين IP المصدر/الوجهة وTTL.
- الوصول إلى الشبكة: يُغلف مُشغّل بطاقة الشبكة البيانات في إطار Ethernet مع عناوين MAC المصدر/الوجهة ويرسلها على الشبكة (أو نفق VXLAN في السحابة).
على الخادم المستقبل، تقشر كل طبقة رأسها، وتتحقق من مجاميع التحقق، وتُمرر الحمولة إلى الأعلى. تصل الحمولة النهائية — بيانات HTTP — إلى مخزن مقبس عملية الخادم.
التقاط الحزم عبر الطبقات
tcpdump على واجهة مزدحمة بدون فلتر قد يُنتج مئات الميغابايت من المخرجات في الثانية ويُضغط على CPU المضيف. أضف دائماً فلتر host أو port، استخدم -c <count> للحد من التقاط الحزم، واكتب إلى ملف بـ-w بدلاً من الطباعة على الطرفية. في Kubernetes، استخدم kubectl debug مع حاوية مؤقتة تشغل tcpdump — لا تثبّت أدوات مباشرة في حاويات الإنتاج.
النقاط الرئيسية
- نموذج TCP/IP لديه أربع طبقات؛ كل منها تُضيف رأساً أثناء التغليف وتُزيله أثناء إزالة التغليف.
- الطبقة 1 (الوصول إلى الشبكة): التسليم المادي، عناوين MAC، MTU — VXLAN في تراكبات السحابة/Kubernetes.
- الطبقة 2 (الإنترنت): عناوين IP، جداول التوجيه، TTL، ICMP — حيث تعمل
ip routeوtraceroute. - الطبقة 3 (النقل): TCP (موثوق) مقابل UDP (تأخير منخفض)، المنافذ، معرّف مقبس الرباعية — حيث تعمل
ssوقواعد جدار الحماية. - الطبقة 4 (التطبيق): HTTP، DNS، TLS، gRPC — شفرتك ومعظم تهيئتك.
- افرز الحوادث حسب الطبقة: أكّد إمكانية الوصول المادي أولاً (
ping)، ثم التوجيه (traceroute)، ثم إمكانية الوصول إلى المنفذ (telnet/nc)، ثم بروتوكول التطبيق (curl -v).