النقل: TCP وUDP والمنافذ
درس 2 من 6
2النقل: TCP وUDP والمنافذ
الصورة الكبيرةعلى خادم واحد يعمل موقع وقاعدة بيانات وخدمة بريد في الوقت نفسه. حين تصله حزمة، كيف يعرف لمن هي؟ ومن يضمن أن صفحة من مئة قطعة وصلت كاملة ومرتبة رغم أن الإنترنت يضيّع حزمًا كل ثانية؟ هذا عمل طبقة النقل.
ماذا تشاهد في الرسم: المصافحة الثلاثية تفتح الاتصال وتتفق على أرقام التسلسل، ثم تمر البيانات بإقرارات، ثم يُغلق كل طرف جهته.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
TCP مثل البريد المسجّل: يتأكد أن كل ورقة وصلت وبالترتيب، ويعيد ما ضاع. أبطأ قليلًا لكنه مضمون، فيُستخدم للمواقع والملفات والبريد. UDP مثل البث الإذاعي: يرسل ولا ينتظر، وإن ضاعت كلمة لا يعيدها؛ مناسب للمكالمات والألعاب حيث التأخير أسوأ من ضياع جزء صغير. المنفذ رقم الشقة في العمارة: العمارة الجهاز، والشقة البرنامج.
TCP (RFC 9293) موجّه بالاتصال: مصافحة SYN وSYN-ACK وACK، أرقام تسلسل وإقرارات، إعادة إرسال، تحكم بالتدفق بالنافذة، وتحكم بالازدحام. ترويسته 20 إلى 60 بايت. UDP بلا اتصال بترويسة 8 بايت، والموثوقية مسؤولية التطبيق؛ QUIC الذي يحمل HTTP/3 مبني فوقه. المنافذ 0 إلى 1023 معروفة، و1024 إلى 49151 مسجّلة، و49152 إلى 65535 مؤقتة للعميل. الاتصال يُعرَّف بخمسة عناصر: IP وmنفذ للطرفين والبروتوكول.
قبل أن تبدأ
🏷️العناوين
تعرف أن IP يحدد الجهاز.
🧅الطبقات
النقل هو الطبقة 4، فوق IP.
الفكرة الجوهرية
1المنفذ: أي برنامج داخل الجهاز؟
كل برنامج يستمع على رقم منفذ. خادم الويب على 443، وSSH على 22، وقاعدة PostgreSQL على 5432. العنوان مع المنفذ يسمى مقبس (Socket)، ويُكتب 203.0.113.10:443. متصفحك أيضًا يفتح منفذًا مؤقتًا عشوائيًا لكل اتصال، فيعرف أي رد لأي تبويب.
| المنفذ | البروتوكول | النقل | الوظيفة |
|---|---|---|---|
22 | SSH · SFTP | TCP | دخول آمن ونقل ملفات مشفّر |
25 | SMTP | TCP | إرسال البريد بين الخوادم |
53 | DNS | UDP/TCP | تحويل الأسماء لعناوين |
67/68 | DHCP | UDP | توزيع العناوين تلقائيًا |
80 | HTTP | TCP | الويب غير المشفّر |
123 | NTP | UDP | مزامنة الوقت |
443 | HTTPS | TCP، وUDP لـ HTTP/3 | الويب المشفّر |
3389 | RDP | TCP | سطح المكتب البعيد |
2TCP: المصافحة والإقرارات
قبل أي بيانات يتبادل الطرفان ثلاث رسائل ليتفقا على أرقام البداية. بعدها كل قطعة لها رقم تسلسل، والمستقبل يرد بإقرار ACK يقول «وصلني حتى هنا». إن لم يصل الإقرار في الوقت المتوقع يعيد المرسل القطعة. لهذا تصل الصفحة كاملة حتى لو ضاعت حزم في الطريق.
محاكاة صغيرة لفكرة TCP: كل قطعة تُعاد حتى يصل إقرارها.
import random
random.seed(7) # same "lost packets" every run
pieces = ["<html>", "<head>", "<body>", "Hello", "</html>"]
received = {}
sends = 0
for seq, piece in enumerate(pieces):
while seq not in received:
sends += 1
if random.random() < 0.3: # the internet loses this one
print(f"seq {seq} lost -> no ACK -> resend")
continue
received[seq] = piece
print(f"seq {seq} ok -> ACK {seq + 1}")
print("page:", "".join(received[i] for i in sorted(received)))
print(f"{len(pieces)} pieces, {sends} sends")3UDP: سريع بلا وعود
في مكالمة فيديو، حزمة صوت ضاعت قبل نصف ثانية لا قيمة لها الآن؛ إعادة إرسالها تؤخر كل ما بعدها. لهذا تستخدم المكالمات والألعاب وDNS بروتوكول UDP: رسالة تذهب ولا تنتظر. وQUIC، أساس HTTP/3، يبني موثوقية ذكية فوق UDP بدل TCP ليتجنب انتظار حزمة واحدة ضائعة.
مثال محلول
المسألة: شغّلت ss -tn على خادم فرأيت ESTAB 10.0.0.5:443 198.51.100.20:51514. ماذا يعني؟ الحل: اتصال TCP قائم (ESTABLISHED) بين الخادم على المنفذ 443 (HTTPS) وعميل عنوانه 198.51.100.20 فتح منفذًا مؤقتًا 51514. العناصر الخمسة هي: العنوانان، والمنفذان، وTCP. لو فتح العميل تبويبًا آخر لرأيت سطرًا ثانيًا بمنفذ مؤقت مختلف.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| UDP غير موثوق فلا يُستخدم في شيء مهم. | DNS ومكالماتك وHTTP/3 كلها على UDP؛ الموثوقية تُبنى في التطبيق حين تلزم. |
| المنفذ مكان فعلي في الجهاز. | هو رقم في الترويسة فقط؛ لا علاقة له بمنافذ الكابلات. |
| كل اتصال يحتاج منفذًا مختلفًا على الخادم. | آلاف الاتصالات تشترك في 443؛ تُميَّز بعنوان العميل ومنفذه. |
أين تقابله في العمل
🔥جدار ناري
أغلب القواعد تُكتب بالمنافذ: اسمح بـ 443 وامنع 23.
🧑💻مطوّر
خطأ «Address already in use» يعني أن برنامجًا آخر يستمع على المنفذ.
🎮ألعاب وبث
UDP مع تصحيح في التطبيق لتقليل التأخير.
اختبر فهمك
ما ترتيب المصافحة الثلاثية؟
العميل يطلب، الخادم يوافق ويطلب، العميل يؤكد.
أي خدمة على UDP 53 عادة؟
DNS سؤال وجواب قصيران، فيناسبهما UDP.
لماذا تستخدم مكالمات الفيديو UDP؟
الصوت المتأخر بلا فائدة؛ الأفضل المضي قدمًا.
ما الذي يميز اتصالين من جهازك للخادم نفسه على 443؟
العناصر الخمسة تتشابه إلا منفذ المصدر.
أي منفذ يستخدمه HTTPS افتراضيًا؟
80 لـ HTTP، و22 لـ SSH، و53 لـ DNS.
مكالمة فيديو مباشرة تفضّل غالبًا:
إطار متأخر لا فائدة منه؛ السرعة أهم من إعادة الإرسال.
بطاقات مراجعة سريعة
تحقق من فهمك
ما فائدة أرقام التسلسل في TCP؟
ترتيب القطع ومعرفة الناقص منها لإعادته.
لماذا يُعدّ Telnet على 23 خطرًا؟
لأنه يرسل كل شيء بلا تشفير، حتى كلمة المرور. استخدم SSH على 22.
كم رحلة ذهاب وإياب تكلف مصافحة TCP قبل البيانات؟
رحلة كاملة واحدة.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
توثيق رسمي1
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.