أسرار أساسية في اتصالات TCP عبر وسيط حزم الشبكة: تبسيط الحاجة إلى المصافحة الثلاثية

إعداد اتصال TCP
عندما نتصفح الإنترنت، أو نرسل بريدًا إلكترونيًا، أو نلعب لعبةً عبر الإنترنت، غالبًا ما نغفل عن تعقيدات الاتصال الشبكي الذي يقف وراء ذلك. مع ذلك، فإن هذه الخطوات التي تبدو صغيرة هي التي تضمن اتصالًا مستقرًا بيننا وبين الخادم. ومن أهم هذه الخطوات إعداد اتصال TCP، وجوهره هو المصافحة الثلاثية.

ستتناول هذه المقالة بالتفصيل مبدأ عملية المصافحة الثلاثية، وآلية عملها، وأهميتها. سنشرح خطوة بخطوة سبب الحاجة إلى المصافحة الثلاثية، وكيف تضمن استقرار الاتصال وموثوقيته، ومدى أهميتها لنقل البيانات. من خلال فهم أعمق للمصافحة الثلاثية، سنكتسب فهمًا أفضل للآليات الأساسية للاتصال الشبكي، ورؤية أوضح لموثوقية اتصالات بروتوكول التحكم بالنقل (TCP).

عملية المصافحة الثلاثية لبروتوكول TCP وانتقالات الحالة
بروتوكول TCP هو بروتوكول نقل بيانات موجه نحو الاتصال، ويتطلب إنشاء اتصال قبل إرسال البيانات. تتم عملية إنشاء هذا الاتصال من خلال مصافحة ثلاثية الأطراف.

 مصافحة TCP ثلاثية الاتجاه

دعونا نلقي نظرة فاحصة على حزم TCP التي يتم إرسالها في كل اتصال.

في البداية، يكون كل من العميل والخادم في حالة "مغلق". يستمع الخادم أولاً بنشاط على منفذ معين ويكون في حالة "الاستماع"، مما يعني أنه يجب تشغيله. بعد ذلك، يكون العميل جاهزًا لبدء الوصول إلى صفحة الويب، ويحتاج إلى إنشاء اتصال مع الخادم. يكون تنسيق حزمة الاتصال الأولى كما يلي:

 حزمة SYN

عندما يبدأ العميل اتصالاً، فإنه يُنشئ رقم تسلسل أولي عشوائي (client_isn) ويضعه في حقل "رقم التسلسل" في رأس TCP. في الوقت نفسه، يُعيّن العميل علامة SYN إلى 1 للإشارة إلى أن الحزمة الصادرة هي حزمة SYN. ​​يُشير العميل إلى رغبته في إنشاء اتصال مع الخادم عن طريق إرسال أول حزمة SYN إليه. لا تحتوي هذه الحزمة على بيانات طبقة التطبيق (أي لا تحتوي على بيانات مُرسلة). عند هذه النقطة، تُصنّف حالة العميل على أنها SYN-SENT.

حزمة SYN+ACK

عندما يستقبل الخادم حزمة SYN من العميل، يقوم بتهيئة رقمه التسلسلي (server_isn) عشوائيًا، ثم يضع هذا الرقم في حقل "الرقم التسلسلي" في رأس TCP. بعد ذلك، يُدخل الخادم client_isn + 1 في حقل "رقم التأكيد"، ويُعيّن بتّي SYN وACK إلى 1. أخيرًا، يُرسل الخادم الحزمة إلى العميل، وهي لا تحتوي على أي بيانات من طبقة التطبيق (ولا تحتوي على أي بيانات ليرسلها الخادم). في هذه الحالة، يكون الخادم في حالة SYN-RCVD.

حزمة تأكيد الاستلام

بمجرد أن يستلم العميل الحزمة من الخادم، يحتاج إلى إجراء التحسينات التالية للاستجابة لحزمة الرد النهائية: أولًا، يقوم العميل بتعيين بت التأكيد (ACK) في رأس TCP لحزمة الرد إلى 1؛ ثانيًا، يُدخل العميل القيمة server_isn + 1 في حقل "رقم تأكيد الرد"؛ أخيرًا، يُرسل العميل الحزمة إلى الخادم. تحمل هذه الحزمة البيانات من العميل إلى الخادم. عند اكتمال هذه العمليات، يدخل العميل في حالة ESTABLISHED.

بمجرد أن يتلقى الخادم حزمة الرد من العميل، فإنه ينتقل أيضًا إلى حالة ESTABLISHED.

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

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

يمكن للمصافحة الثلاثية أن تتجنب بشكل فعال بدء الاتصالات المتكررة تاريخياً (السبب الرئيسي).
تضمن عملية المصافحة الثلاثية أن كلا الطرفين قد تلقيا رقم تسلسل أولي موثوق به.
تساهم المصافحة الثلاثية في تجنب إهدار الموارد.

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

المصافحة الثلاثية تتجنب الاتصالات المكررة التاريخية

عندما يرسل العميل عدة حزم لإنشاء اتصال SYN على التوالي، في حالات مثل ازدحام الشبكة، قد يحدث ما يلي:

1- تصل حزم SYN القديمة إلى الخادم قبل أحدث حزم SYN.
2- سيرد الخادم بحزمة SYN + ACK إلى العميل بعد استلام حزمة SYN القديمة.
3- عندما يستقبل العميل حزمة SYN + ACK، فإنه يحدد أن الاتصال هو اتصال تاريخي (انتهت صلاحية رقم التسلسل أو المهلة) وفقًا لسياقه الخاص، ثم يرسل حزمة RST إلى الخادم لإلغاء الاتصال.

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

1- إذا كان اتصالاً تاريخياً (انتهت صلاحية رقم التسلسل أو المهلة)، فإن الحزمة المرسلة بواسطة المصافحة الثالثة هي حزمة RST لإلغاء الاتصال التاريخي.
2- إذا لم يكن اتصالاً تاريخياً، فإن الحزمة المرسلة للمرة الثالثة هي حزمة تأكيد الاستلام، وقد نجح الطرفان المتصلان في إنشاء الاتصال.

لذلك، فإن السبب الرئيسي لاستخدام بروتوكول TCP للمصافحة الثلاثية هو أنه يقوم بتهيئة الاتصال لمنع الاتصالات السابقة.

السبب الثاني: لمزامنة أرقام التسلسل الأولية لكلا الطرفين
يجب على طرفي بروتوكول TCP الاحتفاظ برقم تسلسلي، وهو عامل أساسي لضمان نقل البيانات بشكل موثوق. تلعب الأرقام التسلسلية دورًا هامًا في اتصالات TCP، حيث تقوم بما يلي:

يستطيع جهاز الاستقبال إزالة البيانات المكررة وضمان دقة البيانات.

يمكن لجهاز الاستقبال استقبال الحزم بترتيب رقم التسلسل لضمان سلامة البيانات.

● يمكن لرقم التسلسل تحديد حزمة البيانات التي تم استلامها من قبل الطرف الآخر، مما يتيح نقل البيانات بشكل موثوق.

لذا، عند إنشاء اتصال TCP، يرسل العميل حزم SYN مع رقم التسلسل الأولي، ويطلب من الخادم الرد بحزمة ACK تُشير إلى استلام حزمة SYN بنجاح. بعد ذلك، يُرسل الخادم حزمة SYN مع رقم التسلسل الأولي إلى العميل، وينتظر رد العميل نهائيًا لضمان تزامن أرقام التسلسل الأولية بشكل موثوق.

قم بمزامنة الأرقام التسلسلية الأولية لكلا الطرفين

على الرغم من إمكانية استخدام المصافحة الرباعية لمزامنة أرقام التسلسل الأولية للطرفين بشكل موثوق، إلا أنه يمكن دمج الخطوتين الثانية والثالثة في خطوة واحدة، ما ينتج عنه مصافحة ثلاثية. مع ذلك، تضمن المصافحتان فقط استلام الطرف الآخر لرقم التسلسل الأولي لأحد الطرفين بنجاح، دون ضمان تأكيد رقم التسلسل الأولي لكلا الطرفين. لذا، تُعد المصافحة الثلاثية الخيار الأمثل لضمان استقرار وموثوقية اتصالات TCP.

السبب الثالث: تجنب إهدار الموارد
في حال وجود عملية مصافحة ثنائية فقط، فعندما يُحظر طلب SYN من العميل في الشبكة، لا يستطيع العميل استلام حزمة ACK المرسلة من الخادم، وبالتالي يُعاد إرسال طلب SYN. ​​ومع ذلك، ولعدم وجود مصافحة ثالثة، لا يستطيع الخادم تحديد ما إذا كان العميل قد استلم تأكيد ACK لإنشاء الاتصال. لذلك، لا يستطيع الخادم إنشاء اتصال استباقيًا إلا بعد استلام كل طلب SYN. ​​وهذا يؤدي إلى ما يلي:

هدر الموارد: إذا تم حظر طلب SYN الخاص بالعميل، مما يؤدي إلى إرسال حزم SYN متعددة بشكل متكرر، فسيقوم الخادم بإنشاء اتصالات زائدة وغير صالحة بعد استلام الطلب. وهذا يؤدي إلى هدر غير ضروري لموارد الخادم.

احتفاظ الرسائل: نظرًا لعدم وجود مصافحة ثالثة، لا يستطيع الخادم التأكد من استلام العميل لتأكيد الاستلام (ACK) بشكل صحيح لإنشاء الاتصال. ونتيجةً لذلك، إذا علقت الرسائل في الشبكة، سيستمر العميل في إرسال طلبات SYN بشكل متكرر، مما يُجبر الخادم على إنشاء اتصالات جديدة باستمرار. وهذا بدوره يزيد من ازدحام الشبكة وتأخيرها، ويؤثر سلبًا على أداء الشبكة بشكل عام.

تجنب إهدار الموارد

لذلك، ولضمان استقرار وموثوقية اتصال الشبكة، يستخدم بروتوكول TCP المصافحة الثلاثية لإنشاء الاتصال لتجنب حدوث هذه المشاكل.

ملخص
الوسيط حزم الشبكةيتم إنشاء اتصال TCP من خلال عملية مصافحة ثلاثية. خلال هذه العملية، يرسل العميل أولاً حزمة بيانات تحمل علامة SYN إلى الخادم، مُشيرًا إلى رغبته في إنشاء اتصال. بعد استلام طلب العميل، يرد الخادم بحزمة بيانات تحمل علامتي SYN وACK، مُشيرًا إلى قبول طلب الاتصال، ويرسل رقم تسلسله الأولي. أخيرًا، يرد العميل بعلامة ACK إلى الخادم مُشيرًا إلى نجاح إنشاء الاتصال. وبذلك، يكون الطرفان في حالة ESTABLISHED، ويمكنهما البدء في تبادل البيانات.

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


تاريخ النشر: 8 يناير 2025