الخلاصة

  • الغرض التاريخي الأساسي للمصافحة الثلاثية هو منع SYN قديم مكرر من الظهور كطلب اتصال جديد.
  • يختار كل طرف رقم تسلسل أولياً. يجمع المجيب تأكيد رقم المبادر مع SYN الخاص به، ثم تثبت الرسالة الثالثة أن المبادر رأى تحدي هذه الجولة.
  • يعالج الصمت بعد فقدان الذاكرة وTIME-WAIT وأرقام ISN السرية وSYN cookies أخطاراً متجاورة، لكنها لا تثبت هوية إنسان أو مؤسسة.

قطعة من محادثة سابقة

تؤخر الإنترنت الرزم وتكررها وتبدل ترتيبها. وبعد إغلاق اتصال قد يعاد استخدام العنوانين والمنفذين نفسيهما بينما يبقى SYN قديم في الطريق. لا يحمل رأس القطعة تاريخاً موثوقاً يميّز القديم من الجديد.

وضع RFC 761 في يناير 1980 المسألة في فضاء التسلسل. يختار كل TCP رقمه الأولي ويتعلم رقم النظير. ولا تصبح الأرقام مفيدة للترتيب وإسقاط التكرار إلا بعد تحديد جيل الاتصال الذي تنتمي إليه.

أربع حقائق في ثلاث رسائل

يعلن A الرقم X، ويؤكده B؛ ثم يعلن B الرقم Y، ويؤكده A. يدمج TCP فعلي B في قطعة واحدة: SYN X ثم SYN Y, ACK X+1 ثم ACK Y+1.

يستهلك SYN موضعاً من التسلسل، لذلك يكون المتوقع X+1. أما ACK الخالص فلا يستهلك موضعاً، وإلا احتاج كل تأكيد إلى تأكيد لا ينتهي. ثبّت RFC 793 هذا التبادل وحالاته عام 1981.

لا يوجد سجل عالمي للجلسات. تتحول اختيارات محلية إلى حالة مشتركة لأن كل طرف يستلم اختيار الآخر وإقراراً باختياره هو.

الرسالة الثالثة تثبت الحاضر

عندما يرسل B رسالة SYN-ACK، يكون قد رأى SYN لكنه لا يعرف إن كان A الحالي ما زال يتذكره. ربما أيقظته نسخة من اتصال مات. يذكر ACK الأخير رقم Y الحالي، فيثبت أن حالة A الراهنة استلمت الرد.

سمّى RFC 761 ذلك مقايضة بين الذاكرة والرسائل: بدلاً من حفظ تاريخ كل رقم لكل نظير، يطلب المستقبل تحققاً إضافياً من الجولة الحالية.

الدليل محدود. يثبت مشاهدة أرقام TCP، لا هوية المستخدم ولا صلاحية التطبيق ولا غياب مهاجم يرى المسار.

تحتاج الأرقام القديمة إلى مهلة

يبعد التزامن SYN القديم، لكن بيانات وإقرارات الاتصال المغلق قد تبقى. افترضت المواصفات الأولى عمراً أقصى للقطعة قدره دقيقتان. وإذا فقد المضيف ذاكرة الأرقام عند الانهيار، وجب أن يصمت مدة MSL؛ وإذا احتفظ بها أمكنه المتابعة بعد المجال المستخدم.

تحجز TIME-WAIT الرباعية مدة ضعفي MSL بعد الإغلاق، كي تنقضي النسخ المتأخرة ويمكن تكرار ACK الأخير. الانتظار حالة تحمي المعنى، لا إجراء شكلياً.

يحافظ RFC 9293 على المنطق، لكنه يرى صمت إعادة التشغيل غير ضروري غالباً اليوم. عشوائية المنافذ وISN، وقصر العمر الفعلي، وطول الإقلاع تقلل التداخل. وعند السرعات العالية تساعد الطوابع الزمنية وPAWS على منع التفاف فضاء 32 بت.

اغتيال TIME-WAIT

وثّق RFC 1337 كيف تستفز قطعة قديمة ACK، فيرد الطرف الذي حذف حالته برسالة RST، ثم ينهي قبولها TIME-WAIT مبكراً. إذا أعيد فتح الرباعية فوراً، قد تدخل بيانات أو إقرارات قديمة نافذة الاتصال الجديد.

عرضت الوثيقة قبول بيانات خاطئة، واختلاف الحالة، وفشل الاتصال. المصافحة تحمي البداية، واختبارات النافذة تحمي الاتصال الحي، وTIME-WAIT تفصل جيلاً عن آخر. ليست هذه وظائف زائدة.

الرقم الحديث ليس هوية موثقة

سمحت أرقام ISN القابلة للتوقع لمهاجم خارج المسار بتخمين ACK الصحيح. يجمع RFC 6528 عداداً زمنياً مع دالة سرية للعناوين والمنافذ الأربعة. تنفصل فضاءات الاتصالات ظاهرياً مع بقاء التقدم الزمني.

يصعب ذلك التخمين الأعمى، لكنه لا يخفي التبادل عن مراقب المسار ولا يجيب عن هوية النظير. تحتاج الهوية إلى مصادقة تشفيرية منفصلة.

وضع الحالة داخل التحدي

قد يحجز الخادم ذاكرة عند أول SYN قبل أن يؤكد العميل شيئاً. تملأ SYNات المزورة طابور أنصاف الاتصالات. يسجل RFC 4987 ظهور SYN flood علناً عام 1996 ووسائل التخفيف الشائعة.

ترمّز SYN cookie الرباعية ورقم العميل والزمن وبعض المعلمات والسر في رقم SYN-ACK. لا يحتفظ الخادم بكتلة الحالة كاملة؛ وعندما يعود ACK الأخير يتحقق من القيمة ويعيد بناء ما يلزم.

تتأخر الكلفة إلى لحظة عودة الدليل. لكن البتات محدودة وقد تضيق تفاوض الخيارات، كما تختلف التطبيقات.

تكشف القصة توزيعاً للوظائف: الشبكة تنقل، والطرفان يختاران، والإقرار المتبادل يزامن، والزمن يبطل القديم، والسر يصعّب التخمين، والـcookie يؤجل الذاكرة. لا تمنح أي منها سلطة عامة على هوية الطرف الآخر.

المصادر وحدود الدليل

تثبت RFCs المواصفات وتحليلات محددة، لا تاريخ نشر موحداً في كل تطبيقات العالم. قراءة الدليل المتبادل بوصفه محولاً للاختيار المحلي إلى حالة مشتركة استنتاج معماري من الآليات.