قبل أن يرسل TCP بيانات التطبيق، عليه إنشاء حالة على طرفي الاتصال. عملية الإعداد هذه هي مصافحة TCP ثلاثية الاتجاهات. يحدث ذلك بسرعة كبيرة لدرجة أن معظم المستخدمين لا يلاحظون ذلك أبدًا، ولكن عندما تشعر مواقع الويب بالبطء، أو تظهر المنافذ مغلقة، أو تقوم جدران الحماية بتعطيل التطبيقات بطرق غريبة، فغالبًا ما تبدأ القصة عند المصافحة.
المصافحة الثلاثية لـ TCP
الحزم الثلاث هي:
- SYN من العميل
- SYN-ACK من الخادم
- أك من العميل
بعد ذلك يتم إنشاء الاتصال ويبدأ النقل العادي للبيانات.
شرح خطوة بخطوة
1. يرسل العميل SYN
يقول العميل، في الواقع، "أريد أن أبدأ اتصالاً، وهذا هو الرقم التسلسلي الأولي الخاص بي."
2. يرد الخادم بـ SYN-ACK
يتعرف الخادم على الرقم التسلسلي للعميل ويرسل الرقم التسلسلي الأولي الخاص به مرة أخرى.
3. يرسل العميل ACK
يتعرف العميل على الرقم التسلسلي للخادم. عند هذه النقطة يتفق الجانبان على الحالة الأساسية اللازمة لتبادل البيانات بشكل موثوق.
لماذا يحتاج TCP إلى المصافحة
المصافحة ليست مجرد حفل. إنه يحل مشاكل البروتوكول الحقيقية:
- يؤكد أن كلا نقطتي النهاية يمكنهما الإرسال والاستقبال
- يتفاوض على تتبع التسلسل الأولي
- يمنع الخلط بين الحزم المتأخرة من الجلسات القديمة وحركة المرور الحالية
- يحدد الحالة اللازمة للتسليم الموثوق
بدون هذا الإعداد، لم يتمكن TCP من توفير سلوك التدفق المطلوب والموثوق الذي تتوقعه التطبيقات.
لماذا يستخدم TCP ثلاث خطوات بدلاً من خطوتين
لن يثبت التبادل المكون من خطوتين بشكل كامل أن كلا الجانبين على استعداد لإرسال الأرقام التسلسلية الخاصة بكل منهما والاعتراف بها. تؤكد الحزمة الثالثة أنه تم استلام رد الخادم وأن حالة الاتصال متزامنة في كلا الاتجاهين.
لهذا السبب تكون المصافحة "ثلاثية" وليست مجرد زوج من الطلب والاستجابة.
ماذا يحدث عندما تفشل المصافحة
عادةً ما تقع حالات فشل المصافحة في بضعة أنماط يمكن التعرف عليها.
تم إرسال SYN، لا يوجد رد
الأسباب المحتملة:
- مضيف الوجهة معطل
- جدار الحماية يسقط الحزم بصمت
- عنوان IP أو منفذ خاطئ
- مشكلة في التوجيه في المسار
الأعراض الشائعة:
- مهلة الاتصال
- المتصفح يدور لفترة ثم يتعطل
telnetأو توقف تطبيق العميل قبل الاستسلام
تم إرسال SYN، وتم إرجاع RST
الأسباب المحتملة:
- المنفذ مغلق
- الخدمة لا تستمع
- تم تكوين جدار الحماية للرفض بدلاً من الإفلات
الأعراض الشائعة:
- فوري "تم رفض الاتصال"
تظهر SYN وSYN-ACK، ثم تنتهي الجلسة
الأسباب المحتملة:
- التوجيه غير المتماثل
- مشكلة جدار الحماية
- جهاز NAT معطل
- خطأ في تكوين موازن التحميل
- تداخل منتج الأمان المعتمد على المضيف بعد القبول الأولي
كيف تبدو المصافحة في Wireshark
إذا قمت بالتقاط حركة المرور في Wireshark، فعادةً ما تبدو بداية TCP السليمة كما يلي:
SYNSYN, ACKACK
إذا رأيت فقط حزم SYN يتم إعادة إرسالها بشكل متكرر، فلن يعود رد الخادم أبدًا. إذا رأيت RST، فهذا يعني أن الهدف رفض الاتصال بشكل نشط. هذه الرؤية هي السبب في أن التقاط الحزم مفيد جدًا لاستكشاف أخطاء الشبكة وإصلاحها.
لماذا المصافحة مهمة للأداء
يبدأ كل اتصال TCP برحلة واحدة على الأقل ذهابًا وإيابًا قبل بدء تدفق البيانات.
إذا كان الكمون 100 مللي ثانية:
- تكلفة المصافحة حوالي رحلة واحدة ذهاباً وإياباً
- يضيف TLS المزيد من المفاوضات بعد ذلك
- الاتصالات قصيرة العمر تبدو أبطأ بشكل ملحوظ
هذا هو أحد أسباب اهتمام ضبط الأداء الحديث بإعادة استخدام الاتصال، وسلوك استمرارية HTTP، وشبكات CDN، والبروتوكولات مثل HTTP/2 وHTTP/3.
مصافحة TCP وTLS ليسا نفس الشيء
هذا مصدر شائع للارتباك.
- مصافحة TCP يؤسس اتصال النقل.
- مصافحة TLS يتفاوض على التشفير والثقة بالشهادة فوق هذا الاتصال.
لذلك عند فتح موقع HTTPS، يقوم النظام عادةً بما يلي:
- مصافحة TCP
- مصافحة TLS
- طلب واستجابة HTTP
إذا كان الموقع بطيئًا في "بدء التحميل"، فقد يكون التأخير في إحدى طبقات المصافحة.
العلاقة بمسح المنافذ
تعتمد العديد من الماسحات الضوئية على سلوك المصافحة:
- SYN-ACK غالبًا ما يعني أن المنفذ مفتوح
- بتوقيت جرينتش عادة ما يعني مغلق
- لا يوجد رد غالبا ما تعني التصفية أو السقوط
وهذا يجعل المصافحة مركزية ليس فقط في الشبكات، ولكن أيضًا في التعداد واختبار الأمان.
هجمات الفيضانات SYN
يسيء فيضان SYN المصافحة عن طريق إرسال أعداد كبيرة من حزم SYN دون إكمال ACK النهائي. يخصص الخادم الموارد للعديد من الجلسات نصف المفتوحة ويمكن أن يصبح مرهقًا.
وسائل التخفيف الشائعة:
- ملفات تعريف الارتباط SYN
- الحد من المعدل
- التصفية المنبع
- جدار الحماية
- ضبط موازن التحميل
تمزيق الاتصال مختلف
بدء الجلسة يستخدم المصافحة الثلاثية. عادةً ما يستخدم إغلاقه عملية مختلفة تتضمن حزم FIN وACK في كلا الاتجاهين.
هذا التفكيك مهم عند تصحيح أخطاء المقابس TIME_WAIT أو CLOSE_WAIT، لكنه منفصل عن مصافحة الاتصال الأولي.
خلاصة القول
مصافحة TCP هي بداية من ثلاث خطوات لاتصال TCP موثوق:
- SYN
- SYN-ACK
- أك
إنه مهم لأن كل طلب ويب، أو جلسة SSH، أو اتصال بقاعدة البيانات، أو استدعاء API مبني على TCP يعتمد عليه. إذا انتهت مهلة الاتصال، أو تم رفضه، أو بدا بطيئًا قبل نقل أي بيانات، فإن المصافحة هي أحد الأماكن الأولى التي يجب التحقيق فيها.