أساسيات Linux والشبكات
أساسيات الشبكات: TCP/IP وDNS
4 دقيقة للقراءة
أسئلة الشبكات تظهر في 100% من مقابلات DevOps/SRE. أتقن هذه المفاهيم وستتعامل مع أي شيء يطرحونه عليك.
أساسيات TCP/IP
مصافحة TCP الثلاثية
العميل الخادم
| |
|-------- SYN ------------>|
| |
|<------- SYN-ACK ---------|
| |
|-------- ACK ------------>|
| |
| تم إنشاء الاتصال |
سؤال مقابلة: "ماذا يحدث إذا ضاع ACK الأخير؟"
الجواب: الخادم يعيد إرسال SYN-ACK حتى يستلم ACK أو ينتهي الوقت. الاتصال سيُنشأ في النهاية أو يفشل بعد المحاولات.
TCP مقابل UDP
| الميزة | TCP | UDP |
|---|---|---|
| الاتصال | موجه للاتصال | بدون اتصال |
| الموثوقية | تسليم مضمون | أفضل جهد |
| الترتيب | مرتب | بدون ترتيب |
| السرعة | أبطأ (حمل زائد) | أسرع |
| حالات الاستخدام | HTTP، SSH، قواعد البيانات | DNS، الفيديو، الألعاب |
حالات TCP الرئيسية
# عرض اتصالات TCP وحالاتها
netstat -an | grep tcp
ss -tan
# الحالات الشائعة:
# LISTEN - ينتظر الاتصالات
# ESTABLISHED - اتصال نشط
# TIME_WAIT - ينتظر بعد الإغلاق (2x MSL)
# CLOSE_WAIT - استلم FIN، ينتظر التطبيق
# FIN_WAIT_1/2 - أرسل FIN، ينتظر ACK/FIN
سؤال مقابلة: "ترى آلاف اتصالات TIME_WAIT. هل هذه مشكلة؟"
الجواب: TIME_WAIT طبيعي—يمنع الخلط بين الحزم القديمة والاتصالات الجديدة. لكن كثرتها قد تستنفد المنافذ العابرة. الحلول:
- فعّل
tcp_tw_reuseللاتصالات الصادرة- زد نطاق المنافذ العابرة:
net.ipv4.ip_local_port_range- استخدم تجميع الاتصالات
الغوص العميق في DNS
عملية حل DNS
1. المتصفح يتحقق من الذاكرة المؤقتة
2. نظام التشغيل يتحقق من /etc/hosts، ثم nsswitch.conf
3. استعلام المحلل المحلي (من /etc/resolv.conf)
4. المحلل يتحقق من الذاكرة المؤقتة
5. إذا لم يكن مخزناً مؤقتاً، المحلل يستعلم:
خوادم الجذر → خوادم TLD → الخوادم الموثوقة
6. الإجابة تُخزن مؤقتاً وتُرجع
أنواع سجلات DNS
| السجل | الغرض | مثال |
|---|---|---|
| A | عنوان IPv4 | example.com → 93.184.216.34 |
| AAAA | عنوان IPv6 | example.com → 2606:2800:... |
| CNAME | الاسم المستعار | www → example.com |
| MX | خادم البريد | @ → mail.example.com |
| TXT | بيانات نصية | SPF، DKIM، التحقق |
| NS | خادم الأسماء | @ → ns1.example.com |
| PTR | البحث العكسي | IP → اسم المضيف |
| SRV | موقع الخدمة | _http._tcp → ... |
استكشاف أخطاء DNS
# بحث أساسي
dig example.com
# استعلام نوع سجل محدد
dig example.com MX
# استعلام خادم DNS محدد
dig @8.8.8.8 example.com
# تتبع مسار الحل الكامل
dig +trace example.com
# تحقق من TTL
dig example.com | grep -E "^example.com"
# بحث عكسي
dig -x 93.184.216.34
مفاهيم موازنة الحمل
الطبقة 4 مقابل الطبقة 7
| الجانب | الطبقة 4 (TCP/UDP) | الطبقة 7 (HTTP) |
|---|---|---|
| السرعة | أسرع | أبطأ |
| الذكاء | IP/المنفذ فقط | واعي بالمحتوى |
| إنهاء SSL | لا | نعم |
| الجلسات اللاصقة | تجزئة IP المصدر | الكوكيز |
| حالة الاستخدام | إنتاجية عالية | تطبيقات الويب |
خوارزميات موازنة الحمل
| الخوارزمية | السلوك | الأفضل لـ |
|---|---|---|
| Round Robin | التدوير عبر الخوادم | خوادم بسعة متساوية |
| Least Connections | الإرسال للأقل انشغالاً | أوقات طلب متفاوتة |
| IP Hash | نفس العميل → نفس الخادم | استمرار الجلسة |
| Weighted | تفضيل السعة الأعلى | مواصفات خوادم مختلطة |
| Random | اختيار عشوائي | بسيط، توزيع متساوي |
أوامر الشبكة الأساسية
# تحقق من الاتصال
ping -c 4 host
traceroute host # أو tracepath
# بحث DNS
nslookup host
host domain
dig domain
# فحص المنافذ والاتصال
nc -zv host port
telnet host port
# إحصائيات الشبكة
netstat -tulpn # المنافذ المستمعة
ss -tulpn # بديل أسرع
# التقاط الحزم
tcpdump -i eth0 port 80
tcpdump -i any host 10.0.0.1
# واجهات الشبكة
ip addr
ip route
تمرين المقابلة
س: "خدمة لا تستطيع الاتصال بقاعدة البيانات. كيف تستكشف الأخطاء؟"
# 1. تحقق إذا كان DNS يحل
dig db.internal
# 2. تحقق إذا كان المضيف قابل للوصول
ping db.internal
# 3. تحقق إذا كان المنفذ مفتوحاً
nc -zv db.internal 5432
# 4. تحقق من الجدار الناري المحلي
iptables -L -n
# أو firewalld
firewall-cmd --list-all
# 5. تحقق إذا كانت الخدمة تستمع على الهدف
ssh db.internal "ss -tlnp | grep 5432"
# 6. تحقق من مشاكل مسار الشبكة
traceroute db.internal
mtr db.internal
التالي، سنجمع كل شيء معاً مع سيناريوهات استكشاف الأخطاء الحقيقية. :::