أساسيات الشبكات لـ DevOps

TCP/IP والطبقات التي تهم

18 دقيقة الدرس 1 من 30

TCP/IP والطبقات التي تهم

كل حادثة إنتاجية تتعلق بالاتصال — حاوية Pod لا تستطيع الوصول إلى قاعدة البيانات، موازن تحميل يصل إلى حد الزمن، أو خدمة مصغرة تُرجع Connection refused — تعود إلى إحدى أربع طبقات مفاهيمية. قبل أن تتناول tcpdump أو تفتح قاعدة جدار حماية، تحتاج إلى نموذج ذهني دقيق يُحدد أين تقع المشكلة في المكدس. هذا النموذج هو مكدس TCP/IP المكون من أربع طبقات.

لماذا أربع طبقات لا سبع؟ يحتوي نموذج OSI على سبع طبقات وهو مفيد للغاية للمورّدين الذين يبيعون الأجهزة. يُدمج نموذج TCP/IP تلك الطبقات في أربع تتناسب مباشرة مع النواة وواجهة برمجة المقابس والأدوات التي تستخدمها يومياً. في بيئة الإنتاج، لا أحد يصحح "الطبقة السادسة — العرض"؛ بل يصحح مصافحات TLS، وهي الطبقة الرابعة في نموذج TCP/IP.

الطبقات الأربع

تضيف كل طبقة رأساً (وأحياناً ذيلاً) إلى الحمولة التي تستلمها من الطبقة الأعلى. تُسمى هذه العملية التغليف (Encapsulation). على الجانب المستقبل، تقشر كل طبقة رأسها الخاص وتُمرر الباقي إلى الأعلى — وهو ما يُسمى إزالة التغليف (Decapsulation).

TCP/IP Four-Layer Model with encapsulation Layer 4 — Application HTTP, gRPC, DNS, SSH, SMTP — your app logic Data / Message (e.g. HTTP request) Layer 3 — Transport TCP (reliable, ordered) · UDP (fire-and-forget) · ports TCP/UDP header Data Layer 2 — Internet IP (addressing, routing) · ICMP · packet forwarding IP header TCP/UDP hdr + Data Layer 1 — Network Access Ethernet, Wi-Fi, VXLAN, physical NIC · MAC addresses Frame header IP hdr + TCP/UDP hdr + Data ← Encapsulation (sender, top to bottom) Decapsulation (receiver, bottom to top) →
نموذج TCP/IP المكون من أربع طبقات. تُغلف كل طبقة الطبقة الأعلى منها داخل رأسها الخاص، لتبني إطار البيانات بحلول وصوله إلى الشبكة.

الطبقة الأولى — الوصول إلى الشبكة (طبقة الرابط)

تتعامل هذه الطبقة مع الإرسال المادي بين عقدتين متصلتين مباشرة — مُشغّل بطاقة الشبكة NIC، وإطارات Ethernet، وعناوين MAC، وشبكات VLAN. في بيئات السحابة، الوسيط "المادي" هو افتراضي: أنفاق VXLAN (المستخدمة في إضافات CNI لـ Kubernetes مثل Flannel وCalico) تُغلف حزم IP داخل مخططات UDP حتى تمتد الشبكات المتراكبة عبر مضيفين فيزيائيين متعددين.

نادراً ما يُهيئ مهندسو DevOps هذه الطبقة مباشرة، لكن أعطالها تظهر باستمرار: تعارضات MTU تُسبب إسقاط حزم غامضاً يبدو كانقطاع مهلة التطبيق. تحقق من MTU باستخدام:

# عرض MTU لجميع الواجهات ip link show # التأكد من MTU المسار الفعلي لمضيف (مسح ICMP) tracepath -n 10.0.0.1 # في Kubernetes: تستخدم Pods افتراضياً MTU المضيف ناقصاً عبء النفق # Flannel VXLAN يطرح 50 بايت؛ إذا كان MTU المضيف 1500، اضبط MTU البود على 1450 # في ConfigMap لـ flannel: # "Backend": {"Type": "vxlan", "MTU": 1450}

الطبقة الثانية — الإنترنت (طبقة الشبكة)

IP هو الغراء الشامل. تحمل كل حزمة IP المصدر، وIP الوجهة، وTTL (وقت البقاء، يُخفَّض بواحد عند كل قفزة موجّه)، وحقل البروتوكول (6 = TCP، 17 = UDP، 1 = ICMP). قرارات التوجيه تحدث هنا — تستشير النواة جدول التوجيه وتُسلّم محلياً أو تُعيد التوجيه إلى بوابة.

# عرض جدول التوجيه المحلي ip route show # مثال على الناتج: # default via 10.0.0.1 dev eth0 # 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.42 # 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 # تتبع القفزات إلى وجهة (يستخدم مسوحات TTL=1,2,3,...) traceroute -n api.internal.example.com # فحص سريع لإمكانية الوصول عبر ICMP ping -c 4 -W 2 10.0.0.1
نصيحة إنتاجية — TTL كإشارة تشخيصية. ردّ ICMP "Time Exceeded" (انتهت صلاحية TTL) يُخبرك أين في المسار تموت الحزم. إذا توقف 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 التي تستمع مع العملية المالكة ss -tlnp # عرض الاتصالات المُنشأة على المنفذ 5432 (Postgres) ss -tnp state established '( dport = :5432 )' # التحقق من نطاق المنافذ المؤقتة في نواتك cat /proc/sys/net/ipv4/ip_local_port_range # ناتج نموذجي: 32768 60999 # توسيعه للخوادم عالية الإنتاجية (أضف إلى /etc/sysctl.conf) # net.ipv4.ip_local_port_range = 1024 65535

الطبقة الرابعة — التطبيق

كل ما يقع فوق TCP/UDP هو طبقة التطبيق: HTTP، وTLS (يُعامَل كمسألة على مستوى التطبيق في هذا النموذج)، وDNS، وSSH، وgRPC، وخدماتك المصغرة الخاصة. هنا تعيش توجيه الطلبات والمصادقة ومنطق الأعمال.

أين تعيش مشاكل DevOps؟ تجريبياً، يتوزع الإنتاج تقريباً هكذا: ~50% من مشاكل الاتصال تقع في الطبقتين 3/4 (قاعدة جدار حماية خاطئة، مجموعة أمان مفقودة، منفذ لا يستمع)، ~30% سوء تهيئة التوجيه/NAT في الطبقة 2، ~15% إخفاقات DNS (مشاكل تطبيق الطبقة 4 تبدو كمشاكل الطبقة 2)، و~5% مشاكل MTU أو مُشغّل بطاقة الشبكة الفعلية. النموذج الطبقي يمنحك ترتيب فرز منهجياً: ابدأ من الطبقة 1 صاعداً، أو من الطبقة 4 نازلاً — حسب الأعراض.

التغليف عملياً: طلب HTTP حقيقي

عندما يستدعي تطبيقك POST https://api.example.com/orders، إليك ما يحدث فعلاً عند كل طبقة على جهاز الإرسال:

  1. التطبيق: تُسلسل مكتبة HTTP الرؤوس وجسم JSON إلى بايتات.
  2. النقل: تُغلف طبقة TCP في النواة البيانات في قطعة TCP مع منافذ المصدر/الوجهة ورقم التسلسل والأعلام.
  3. الإنترنت: تُسبق طبقة IP رأس IP مع عناوين IP المصدر/الوجهة وTTL.
  4. الوصول إلى الشبكة: يُغلف مُشغّل بطاقة الشبكة البيانات في إطار Ethernet مع عناوين MAC المصدر/الوجهة ويرسلها على الشبكة (أو نفق VXLAN في السحابة).

على الخادم المستقبل، تقشر كل طبقة رأسها، وتتحقق من مجاميع التحقق، وتُمرر الحمولة إلى الأعلى. تصل الحمولة النهائية — بيانات HTTP — إلى مخزن مقبس عملية الخادم.

التقاط الحزم عبر الطبقات

# الالتقاط على واجهة محددة؛ -n يتخطى دقة DNS؛ -v يعرض TTL/البروتوكول tcpdump -i eth0 -n -v 'host 10.0.0.42 and port 443' # فك شفرة مصافحة TCP (SYN, SYN-ACK, ACK) tcpdump -i eth0 -n 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0 and host 10.0.0.42' # كتابة pcap للتحليل لاحقاً في Wireshark tcpdump -i eth0 -n -w /tmp/capture.pcap 'host 10.0.0.42'
تحذير إنتاجي: تشغيل 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).