الشبكات وVPN: من عنونة IP إلى أنفاق WireGuard وOpenVPN وIPsec
خروج

الدرس 1 من 13 · الأساسيات

نموذج OSI ونموذج TCP/IP، والتغليف والمنافذ

35 د Debian 12

الهدف

أن تعرف كيف تصف ما يحدث عندما يرسل حاسوب في وكالة طلباً إلى خادم المقر الرئيسي: ما الطبقات التي تتدخل، وما الذي يُضاف إلى الرسالة في كل مرحلة، وعلى أي منفذ يجيب الخادم. هذه هي المفردات الأساسية للتكوين كله.

أهم النقاط

  • نموذج OSI يقسّم الاتصال إلى 7 طبقات؛ أما نموذج TCP/IP، وهو الذي نستعمله فعلاً، فيقسّمه إلى 4.
  • كل طبقة تضيف ترويسة (en-tête) إلى رسالة الطبقة التي فوقها: هذا هو التغليف (encapsulation). وعند الوصول، تنزع كل طبقة ترويستها.
  • IP (الطبقة 3) يوجّه الحزم من جهاز إلى آخر؛ وTCP وUDP (الطبقة 4) يسلّمانها إلى التطبيق الصحيح بفضل المنفذ (port).
  • TCP موثوق ومرتَّب (اتصال، إشعارات استلام)؛ وUDP خفيف وبدون اتصال (DNS، DHCP، VoIP، WireGuard).
  • احفظ بعض المنافذ: 22 SSH، 53 DNS، 80/443 HTTP(S)، 25/587 SMTP، 67/68 DHCP، 3306 MySQL، 51820 WireGuard.

لماذا الطبقات؟

تخيّل بنك أطلس (Banque Atlas، بنك وهمي سيرافقنا طوال الدرس): مقر رئيسي في الدار البيضاء، ووكالات في فاس وطنجة، ومستشارون يعملون عن بُعد. عندما يطّلع موظف الشباك في فاس على حساب، تحدث أشياء كثيرة: المتصفح يُنشئ طلب HTTPS، والنظام يقطّعه، وبطاقة الشبكة تحوّله إلى إشارات كهربائية أو لاسلكية، وموجّهات (routeurs) المشغّل تنقله حتى الدار البيضاء…

لا أحد يستطيع تصميم كل هذا دفعة واحدة. لذلك قُسِّمت المسألة إلى طبقات: كل طبقة تقدّم خدمة للطبقة التي فوقها وتستعمل الطبقة التي تحتها، دون أن تعرف تفاصيل الطبقات الأخرى. المتصفح لا يعرف إن كان الربط يمرّ عبر الألياف البصرية أو 4G؛ وبطاقة Wi-Fi لا تعرف أنها تنقل HTTPS.

نموذج OSI (7 طبقات)

الرقم الطبقة الدور أمثلة وحدة البيانات
7 التطبيق (Application) الخدمة كما يراها المستخدم HTTP، DNS، SSH، SMTP رسالة
6 التقديم (Présentation) الصيغة، التشفير، الضغط TLS (جزئياً)، ترميز UTF-8 رسالة
5 الجلسة (Session) فتح حوار والحفاظ عليه وإغلاقه استئناف جلسة TLS رسالة
4 النقل (Transport) التسليم إلى التطبيق الصحيح، الموثوقية TCP، UDP مقطع segment (TCP)، مخطط بيانات datagramme (UDP)
3 الشبكة (Réseau) العنونة والتوجيه بين الشبكات IPv4، IPv6، ICMP حزمة (paquet)
2 الربط (Liaison) الإرسال داخل الشبكة المحلية نفسها Ethernet، Wi-Fi، VLAN 802.1Q إطار (trame)
1 الفيزيائية (Physique) الإشارات على الوسيط كابل نحاسي، ألياف بصرية، موجات راديو بِتّات (bits)

وسيلة للتذكّر بالفرنسية (من 1 إلى 7): « Pour Le Réseau, Tout Se Passe Automatiquement » (أي: في الشبكة، كل شيء يحدث تلقائياً).

الطبقتان 5 و6 موجودتان أساساً على الورق: في الواقع، يتكفّل بهما التطبيق نفسه. ومع ذلك يتحدث التقنيون كل يوم بأرقام الطبقات: « مشكلة في الطبقة 1 » (كابل منزوع)، « مبدّل (commutateur) من المستوى 3 » (يستطيع التوجيه أيضاً)، « موزّع حِمل من الطبقة 7 » (يقرأ عناوين URL).

نموذج TCP/IP (4 طبقات)

TCP/IP ما يقابله في OSI ما تقوم بإعداده
التطبيق (Application) 5، 6، 7 خادم الويب، DNS، SSH
النقل (Transport) 4 منافذ TCP/UDP، الجدار الناري (pare-feu)
الإنترنت (Internet) 3 عناوين IP، المسارات، البوابة
الوصول إلى الشبكة (Accès réseau) 1، 2 الواجهة، VLAN، Wi-Fi، الكابل

هذا هو النموذج الذي تتّبعه Linux وWindows والسحابة. ففي Azure مثلاً، تسمح لك الشبكة الافتراضية باختيار عناوين IP والشبكات الفرعية والمسارات (الطبقة 3) والتصفية حسب المنافذ (الطبقة 4)؛ أما الطبقة الفيزيائية فتديرها Microsoft بالكامل.

التغليف، خطوة بخطوة

يفتح موظف الشباك في فاس https://compte.atlas.lan. إليك كيف تنزل الرسالة عبر الطبقات:

[ Données HTTP chiffrées par TLS ]                                    couche 7
[ En-tête TCP | Données ]                    port source 51544 → port 443   couche 4
[ En-tête IP | En-tête TCP | Données ]       10.21.10.25 → 10.20.1.10        couche 3
[ En-tête Ethernet | IP | TCP | Données | FCS ]  MAC du poste → MAC du routeur   couche 2
0101100101…                                   signaux sur le câble          couche 1

في كل قفزة (موجّه الوكالة، شبكة المشغّل، موجّه المقر)، يُنزع الإطار (الطبقة 2) ثم يُعاد بناؤه للرابط التالي؛ أما حزمة IP (الطبقة 3) فتسافر من طرف إلى طرف. وعند الخادم، يجري المسار بالعكس: كل طبقة تقرأ ترويستها، وتنزعها، وتمرّر الباقي إلى الطبقة التي فوقها. هذا هو فكّ التغليف (désencapsulation).

أحجام يجب معرفتها

العنصر الحجم المعتاد
MTU في Ethernet (البيانات المفيدة في إطار) 1500 بايت
ترويسة IPv4 بدون خيارات 20 بايت
ترويسة IPv6 40 بايت
ترويسة TCP بدون خيارات 20 بايت
ترويسة UDP 8 بايت

أكبر قطعة من بيانات TCP تتّسع لها حزمة واحدة داخل إطار تسمّى MSS: 1500 − 20 − 20 = 1460 بايت في IPv4. ستعود هذه الحسابات مع الشبكات الافتراضية الخاصة (VPN): النفق يضيف ترويساته الخاصة، لذلك يجب تقليص MTU داخل النفق، وإلا جُزِّئت الحزم الكبيرة أو ضاعت. وتنشر السحابات العامة بالمناسبة توصياتها بشأن MTU للأجهزة الافتراضية.

TCP أم UDP؟

TCP UDP
الاتصال نعم: مصافحة SYN، SYN-ACK، ACK لا
الموثوقية إشعارات استلام، إعادة إرسال لا شيء: يتكفّل التطبيق بذلك عند الحاجة
الترتيب مضمون غير مضمون
الكلفة أثقل خفيف جداً
الاستعمالات الويب، SSH، البريد، قواعد البيانات DNS، DHCP، VoIP، الفيديو، WireGuard، IPsec NAT-T

مصافحة TCP الثلاثية:

Poste de Fès                       Serveur du siège
   SYN  (je veux parler, port 443)  ─────────►
        ◄─────────  SYN-ACK (d'accord)
   ACK  (c'est parti)               ─────────►
   … données …
   FIN / ACK pour fermer

(حاسوب فاس يرسل SYN: « أريد التحدث، المنفذ 443 »؛ خادم المقر يجيب SYN-ACK: « موافق »؛ ثم ACK: « لننطلق »؛ ثم البيانات؛ ثم FIN / ACK للإغلاق.)

لماذا يختار WireGuard بروتوكول UDP؟ لأنه ينقل هو نفسه حركة TCP: وضع TCP داخل TCP يسبّب إعادات إرسال متتالية بمجرد أن تفقد شبكة 4G لدى موظف يعمل عن بُعد بضع حزم.

المنافذ

عنوان IP يحدّد جهازاً؛ والمنفذ (من 0 إلى 65535) يحدّد تطبيقاً على هذا الجهاز. والثلاثي « عنوان IP + منفذ + بروتوكول » يسمّى مقبس (socket).

  • من 0 إلى 1023: منافذ معروفة، محجوزة للخدمات القياسية (يجب أن تكون root لفتحها في Linux).
  • من 1024 إلى 49151: منافذ مسجّلة (3306 MySQL، 5432 PostgreSQL، 1194 OpenVPN…).
  • من 49152 إلى 65535: منافذ عابرة (éphémères)، يختارها العميل عشوائياً لكل اتصال صادر.
المنفذ البروتوكول الخدمة
20/21 TCP FTP (يُستحسن تجنّبه: غير مشفّر)
22 TCP SSH، SFTP، SCP
25 / 587 / 465 TCP SMTP (إرسال البريد)
53 UDP (و TCP) DNS
67 / 68 UDP DHCP (الخادم / العميل)
80 / 443 TCP HTTP / HTTPS (443 أيضاً على UDP لـ HTTP/3)
123 UDP NTP (الوقت)
143 / 993 TCP IMAP / IMAPS
389 / 636 TCP LDAP / LDAPS
445 TCP مشاركة Windows (SMB)
500 / 4500 UDP IKE و IPsec NAT-T
1194 UDP OpenVPN
3389 TCP سطح المكتب البعيد لـ Windows (RDP)
3306 / 5432 TCP MySQL / PostgreSQL
51820 UDP WireGuard (القيمة المعتادة)

في نظام Linux، يعطي الملف /etc/services التطابق بين الاسم والرقم:

grep -w 443 /etc/services       # https 443/tcp
getent services ssh             # ssh 22/tcp

رؤية الطبقات على جهاز Linux

ip link show                    # الطبقة 2: الواجهات، عناوين MAC، MTU
ip address show                 # الطبقة 3: عناوين IP لكل واجهة
ip route show                   # الطبقة 3: من أين تخرج الحزم
ss -tulpn                       # الطبقة 4: منافذ TCP/UDP المُنصِتة والبرامج المرتبطة بها
curl -I https://exemple.ma      # الطبقة 7: طلب HTTP حقيقي

استكشاف الأعطال الفعّال يتّبع الطبقات من الأسفل إلى الأعلى: هل الكابل أو Wi-Fi متّصل (1-2)؟ هل للجهاز عنوان ومسار (3)؟ هل يجيب المنفذ (4)؟ هل تعمل الخدمة (7)؟ هذه الطريقة مفصّلة في الدرس 4.1.

تمرين موجَّه: تسمية الطبقات

لكل حالة من وكالة طنجة، اذكر الطبقة المعنية.

  1. انتُزع كابل حاسوب أمينة الصندوق بسبب كرسي. ← الطبقة 1.
  2. لجهازين عنوان IP نفسه. ← الطبقة 3.
  3. الجدار الناري يحجب المنفذ 3389. ← الطبقة 4.
  4. الموقع الداخلي يجيب « 404 page introuvable » (الصفحة غير موجودة). ← الطبقة 7.
  5. الحاسوب موصول بشبكة VLAN خاطئة في المبدّل. ← الطبقة 2.

البروتوكولات الشائعة في لمحة

البروتوكول الطبقة وظيفته أين ستصادفه
Ethernet 2 الإطارات على الشبكة المحلية السلكية كل مقبس RJ45 في الوكالة
Wi-Fi (802.11) 1-2 الشبكة المحلية اللاسلكية نقاط الوصول في البهو، Wi-Fi الزوار
ARP 2-3 إيجاد عنوان MAC الذي يحمل عنوان IP الدرس 2.1
IPv4 / IPv6 3 عنونة الحزم وتوجيهها الدرسان 1.2 و1.3
ICMP 3 رسائل الخطأ وping استكشاف الأعطال، الدرس 4.1
TCP / UDP 4 التسليم إلى التطبيقات الجدار الناري، الدرس 2.4
DHCP 7 (فوق UDP) توزيع العناوين الدرس 2.1
DNS 7 (فوق UDP/TCP) ترجمة الأسماء إلى عناوين الدرس 1.4
TLS 5-6 تشفير HTTPS وOpenVPN وLDAPS الدرس 3.3
IPsec 3 تشفير حزم IP كاملة الدرس 3.4

تمرين: قراءة حزمة

إليك، بشكل مبسّط، ما تعرضه أداة التقاط لحزمة التُقطت في المقر، أمام الخادم مباشرة:

Ethernet  src 52:54:00:aa:10:25  dst 52:54:00:bb:00:01
IPv4      src 10.21.10.25        dst 10.20.1.10       ttl 63  proto TCP
TCP       sport 51544            dport 443            flags [S]

أسئلة وأجوبة:

  1. أي جهاز أرسل الحزمة؟ ← 10.21.10.25 (حاسوب في الوكالة).
  2. ما الخدمة المطلوبة؟ ← منفذ الوجهة 443، إذن HTTPS.
  3. ماذا تعني الراية [S]؟ ← SYN: إنها الحزمة الأولى في مصافحة TCP.
  4. هل المنفذ 51544 خدمة؟ ← لا، إنه منفذ عابر اختاره العميل.
  5. قيمة TTL هي 63: ماذا حدث؟ ← أرسلها الحاسوب بقيمة TTL تساوي 64 (القيمة المعتادة في Linux)؛ وكل موجّه تعبره الحزمة يُنقص 1: إذن موجّه واحد قد مرّرها. وفي VPN، يكون المسار كله عند المشغّل مخفياً داخل النفق ولا يُحتسب.

أخطاء متكررة

  • الخلط بين العنوان والمنفذ: 10.20.1.10:443 يدلّ على خدمة HTTPS في الجهاز 10.20.1.10. فتح المنفذ في الجدار الناري لا يفيد شيئاً إذا لم تكن الخدمة مُنصِتة.
  • الاعتقاد أن DNS لا يستعمل إلا UDP: الأجوبة الكبيرة ونقل المناطق (transferts de zone) تمرّ عبر TCP 53. جدار ناري لا يسمح إلا بـ UDP 53 يسبّب أعطالاً غريبة.
  • نسيان MTU داخل نفق: الموقع يُفتح لكن الملفات الكبيرة تتعطّل. السبب دائماً تقريباً MTU أكبر من اللازم.
  • التفكير بـ « OSI » عند الإعداد: نستدلّ بنموذج OSI، لكننا نُعِدّ بنموذج TCP/IP (الواجهة، IP، المسار، المنفذ، الخدمة).

التطبيق العملي (Lab)

ستكتب بطاقات المراجعة الخاصة بك في /root/reseau: قائمة الطبقات السبع، والمنافذ التي يجب معرفتها، وحساب MSS انطلاقاً من MTU، ثم سكربت shell صغيراً يعطي طبقة بروتوكول ما. يُنفَّذ السكربت فعلاً أثناء التحقق: يجب أن يعرض الرقم الصحيح لكل بروتوكول.

اختبار قصير

  1. كم عدد طبقات نموذج OSI ونموذج TCP/IP؟
  2. في أي طبقة يعمل المبدّل التقليدي والموجّه؟
  3. ما هو التغليف؟
  4. لماذا يستعمل DNS بروتوكول UDP غالباً، وفي أي حالة ينتقل إلى TCP؟
  5. ما قيمة MSS المعتادة لاتصال TCP في IPv4 على Ethernet؟
الأجوبة
  1. 7 لنموذج OSI، و4 لنموذج TCP/IP.
  2. المبدّل في الطبقة 2 (يقرأ عناوين MAC)، والموجّه في الطبقة 3 (يقرأ عناوين IP).
  3. كل طبقة تضيف ترويستها الخاصة إلى بيانات الطبقة العليا قبل تمريرها إلى الطبقة السفلى؛ وعند الوصول، تنزع كل طبقة ترويستها.
  4. لأن السؤال وجوابه يتّسعان غالباً في حزمة صغيرة واحدة: UDP يتجنّب كلفة إنشاء اتصال. وينتقل إلى TCP للأجوبة الكبيرة جداً ولنقل المناطق.
  5. 1460 بايت (1500 لـ MTU − 20 لترويسة IPv4 − 20 لترويسة TCP).

المراجع: التوثيق الرسمي لـ Microsoft Learn (Windows Server، Azure) ولـ Red Hat. نص أصلي من MasterLinux.

تمارين تطبيقية

تُنجَز على Debian 12

الطرفية عبر الإنترنت قادمة قريبًا. في انتظار ذلك، أنجِز هذه المهام على جهازك بنظام لينكس أو على آلة افتراضية أو WSL.

  1. أنشئ الملف /root/reseau/couches.txt: سبعة أسطر، من الطبقة 1 إلى الطبقة 7، بالصيغة « الرقم الاسم » بدون حروف مُشكَّلة ولا حروف كبيرة: 1 physique، 2 liaison، 3 reseau، 4 transport، 5 session، 6 presentation، 7 application
    عرض تلميحmkdir -p /root/reseau ثم printf '%s\n' '1 physique' '2 liaison' … > /root/reseau/couches.txt
    عرض الحل
    mkdir -p /root/reseau && printf '%s\n' '1 physique' '2 liaison' '3 reseau' '4 transport' '5 session' '6 presentation' '7 application' > /root/reseau/couches.txt

    التحقق : f=/root/reseau/couches.txt; test -f $f && test $(grep -c . $f) -eq 7 && grep -qx '1 physique' $f && grep -qx '2 liaison' $f && grep -qx '3 reseau' $f && grep -qx '4 transport' $f && grep -qx '5 session' $f && grep -qx '6 presentation' $f && grep -qx '7 application' $f

  2. أنشئ الملف /root/reseau/ports.txt، سطراً لكل خدمة بالصيغة « الخدمة المنفذ/البروتوكول »: ssh 22/tcp، dns 53/udp، http 80/tcp، https 443/tcp، dhcp 67/udp، smtp 25/tcp
    عرض تلميحالطريقة نفسها: printf '%s\n' 'ssh 22/tcp' 'dns 53/udp' … > /root/reseau/ports.txt
    عرض الحل
    printf '%s\n' 'ssh 22/tcp' 'dns 53/udp' 'http 80/tcp' 'https 443/tcp' 'dhcp 67/udp' 'smtp 25/tcp' > /root/reseau/ports.txt

    التحقق : f=/root/reseau/ports.txt; grep -qx 'ssh 22/tcp' $f && grep -qx 'dns 53/udp' $f && grep -qx 'http 80/tcp' $f && grep -qx 'https 443/tcp' $f && grep -qx 'dhcp 67/udp' $f && grep -qx 'smtp 25/tcp' $f

  3. إطار Ethernet ينقل 1500 بايت على الأكثر (MTU). اكتب في الملف /root/reseau/mss.txt الحجم الأقصى لبيانات TCP في كل حزمة، في IPv4، بدون خيارات (ترويسة IPv4 = 20 بايت، ترويسة TCP = 20 بايت): الرقم فقط
    عرض تلميح1500 − 20 − 20. echo $((1500-20-20)) > /root/reseau/mss.txt
    عرض الحل
    echo $((1500-20-20)) > /root/reseau/mss.txt

    التحقق : grep -qx 1460 /root/reseau/mss.txt

  4. اكتب السكربت /root/reseau/couche.sh الذي يعرض رقم طبقة OSI للبروتوكول المُمرَّر كوسيط: ethernet → 2، ip → 3، icmp → 3، tcp → 4، udp → 4، http → 7، dns → 7 (الأمر sh couche.sh tcp يعرض 4)
    عرض تلميحاستعمل case "$1" in ethernet) echo 2 ;; ip|icmp) echo 3 ;; … esac، واكتبه سطراً بسطر باستعمال printf '%s\n'
    عرض الحل
    printf '%s\n' '#!/bin/sh' 'case "$1" in' '  ethernet|wifi) echo 2 ;;' '  ip|icmp|ipv6) echo 3 ;;' '  tcp|udp) echo 4 ;;' '  http|https|dns|ssh|smtp|dhcp) echo 7 ;;' '  *) echo inconnu ;;' 'esac' > /root/reseau/couche.sh && chmod +x /root/reseau/couche.sh

    التحقق : f=/root/reseau/couche.sh; test "$(sh $f ethernet)" = 2 && test "$(sh $f ip)" = 3 && test "$(sh $f icmp)" = 3 && test "$(sh $f tcp)" = 4 && test "$(sh $f udp)" = 4 && test "$(sh $f http)" = 7 && test "$(sh $f dns)" = 7

المراجع الرسمية المعتمدة: Networking documentation (Windows Server) — https://learn.microsoft.com/fr-fr/windows-server/networking/ ; Présentation du réseau virtuel Azure — https://learn.microsoft.com/fr-fr/azure/virtual-network/virtual-networks-overview ; Configurer MTU pour les machines virtuelles dans Azure — https://learn.microsoft.com/fr-fr/azure/virtual-network/how-to-virtual-machine-mtu ; RHEL 8 — Configuring and managing networking. نص أصلي من MasterLinux.