إعداد اتصال TCP
عندما نتصفح الإنترنت، أو نرسل بريدًا إلكترونيًا، أو نلعب ألعابًا على الإنترنت، غالبًا ما نغفل عن تعقيدات اتصال الشبكة. ومع ذلك، فإن هذه الخطوات البسيطة هي التي تضمن اتصالًا مستقرًا بيننا وبين الخادم. من أهم هذه الخطوات إعداد اتصال TCP، وجوهرها هو المصافحة الثلاثية.
ستناقش هذه المقالة مبدأ وعملية وأهمية المصافحة الثلاثية بالتفصيل. سنشرح خطوة بخطوة أهمية المصافحة الثلاثية، وكيف تضمن استقرار الاتصال وموثوقيته، وأهميتها لنقل البيانات. بفهم أعمق للمصافحة الثلاثية، سنكتسب فهمًا أفضل للآليات الأساسية لاتصالات الشبكة، ورؤية أوضح لموثوقية اتصالات TCP.
عملية المصافحة ثلاثية الاتجاهات في بروتوكول TCP وانتقالات الحالة
بروتوكول TCP هو بروتوكول نقل قائم على الاتصال، ويتطلب إنشاء اتصال قبل نقل البيانات. تتم عملية إنشاء الاتصال هذه عبر مصافحة ثلاثية.
دعونا نلقي نظرة عن كثب على حزم TCP التي يتم إرسالها في كل اتصال.
في البداية، يكون كلٌّ من العميل والخادم مغلقين. أولًا، يُنصت الخادم بنشاط على منفذ ويكون في حالة استماع، مما يعني ضرورة تشغيل الخادم. بعد ذلك، يكون العميل جاهزًا لبدء الوصول إلى صفحة الويب، ويحتاج إلى إنشاء اتصال بالخادم. يكون تنسيق حزمة الاتصال الأولى كما يلي:
عندما يبدأ العميل اتصالاً، يُولّد رقم تسلسل ابتدائي عشوائي (client_isn) ويضعه في حقل "رقم التسلسل" في رأس TCP. في الوقت نفسه، يُعيّن العميل وضع علامة SYN إلى 1 للإشارة إلى أن الحزمة الصادرة هي حزمة SYN. يُشير العميل إلى رغبته في إنشاء اتصال مع الخادم بإرسال أول حزمة SYN إليه. لا تحتوي هذه الحزمة على بيانات طبقة التطبيق (أي البيانات المُرسلة). عند هذه النقطة، تُعلّم حالة العميل بأنها SYN-SENT.
عندما يستقبل الخادم حزمة SYN من عميل، فإنه يُهيئ رقمه التسلسلي (server_isn) عشوائيًا، ثم يُدخله في حقل "الرقم التسلسلي" في رأس TCP. بعد ذلك، يُدخل الخادم client_isn + 1 في حقل "رقم الإقرار" ويُعيّن كلاً من بتات SYN وACK إلى 1. أخيرًا، يُرسل الخادم الحزمة إلى العميل، والتي لا تحتوي على أي بيانات من طبقة التطبيق (ولا بيانات ليُرسلها الخادم). في هذه الحالة، يكون الخادم في حالة SYN-RCVD.
بمجرد استلام العميل للحزمة من الخادم، عليه إجراء التحسينات التالية للرد على حزمة الرد النهائية: أولاً، يُعيّن العميل بت الإقرار (ACK bit) لرأس TCP لحزمة الرد إلى 1؛ ثانياً، يُدخل العميل القيمة server_isn + 1 في حقل "تأكيد رقم الإجابة". أخيراً، يُرسل العميل الحزمة إلى الخادم. يمكن لهذه الحزمة نقل البيانات من العميل إلى الخادم. بعد إتمام هذه العمليات، يدخل العميل في حالة التأسيس (ESTABLISHID).
بمجرد أن يتلقى الخادم حزمة الرد من العميل، فإنه يتحول أيضًا إلى الحالة ESTABLISHED.
كما يتضح من العملية السابقة، عند إجراء مصافحة ثلاثية، يُسمح للمصافحة الثالثة بنقل البيانات، بينما لا يُسمح للمصافحتين الأوليين بذلك. هذا سؤال يُطرح كثيرًا في المقابلات. بمجرد اكتمال المصافحة الثلاثية، يدخل كلا الطرفين في حالة "التأسيس"، مما يشير إلى نجاح إنشاء الاتصال، وعندها يمكن للعميل والخادم بدء إرسال البيانات إلى بعضهما البعض.
لماذا ثلاث مصافحات؟ ليس مرتين، بل أربع مرات؟
الإجابة الشائعة هي: "لأن المصافحة الثلاثية تضمن القدرة على الاستقبال والإرسال". هذه الإجابة صحيحة، لكنها مجرد سبب ظاهري، ولا تُبرز السبب الرئيسي. فيما يلي، سأحلل أسباب المصافحة الثلاثية من ثلاثة جوانب لتعميق فهمنا لهذه المسألة.
يمكن أن يؤدي المصافحة الثلاثية إلى تجنب تهيئة الاتصالات المتكررة تاريخيًا بشكل فعال (السبب الرئيسي)
تضمن المصافحة الثلاثية أن كلا الطرفين قد حصلا على رقم تسلسلي أولي موثوق به.
تتجنب المصافحة الثلاثية إهدار الموارد.
السبب الأول: تجنب الانضمامات المكررة التاريخية
باختصار، يكمن السبب الرئيسي للمصافحة الثلاثية في تجنب الارتباك الناتج عن تهيئة الاتصال المكررة القديمة. ففي بيئة الشبكة المعقدة، لا تُرسَل حزم البيانات المرسلة دائمًا إلى المضيف الوجهة في الوقت المحدد، وقد تصل حزم البيانات القديمة إلى المضيف الوجهة أولاً بسبب ازدحام الشبكة وأسباب أخرى. لتجنب ذلك، يستخدم بروتوكول TCP مصافحة ثلاثية لإنشاء الاتصال.
عندما يرسل العميل حزم إنشاء اتصال SYN متعددة على التوالي، في مواقف مثل ازدحام الشبكة، قد يحدث ما يلي:
1- تصل حزم SYN القديمة إلى الخادم قبل حزم SYN الأحدث.
2- سيقوم الخادم بالرد بحزمة SYN + ACK إلى العميل بعد استلام حزمة SYN القديمة.
3- عندما يستقبل العميل حزمة SYN + ACK، فإنه يحدد أن الاتصال هو اتصال تاريخي (انتهى رقم التسلسل أو انتهت صلاحيته) وفقًا لسياقه الخاص، ثم يرسل حزمة RST إلى الخادم لإلغاء الاتصال.
في اتصال المصافحة الثنائية، لا يمكن تحديد ما إذا كان الاتصال الحالي اتصالاً تاريخياً. أما المصافحة الثلاثية فتتيح للعميل تحديد ما إذا كان الاتصال الحالي اتصالاً تاريخياً بناءً على السياق عندما يكون جاهزاً لإرسال الحزمة الثالثة:
1- إذا كان اتصال تاريخي (انتهى الرقم التسلسلي أو انتهت مهلة الاتصال)، فإن الحزمة المرسلة بواسطة المصافحة الثالثة هي حزمة RST لإلغاء الاتصال التاريخي.
2- إذا لم يكن اتصالاً تاريخياً، فإن الحزمة المرسلة للمرة الثالثة هي حزمة ACK، ويقوم الطرفان المتصلان بإنشاء الاتصال بنجاح.
لذلك، فإن السبب الرئيسي وراء استخدام TCP للمصافحة الثلاثية هو أنه يقوم بتهيئة الاتصال لمنع الاتصالات التاريخية.
السبب الثاني: مزامنة أرقام التسلسل الأولية لكلا الطرفين
يجب على كلا جانبي بروتوكول TCP الحفاظ على رقم تسلسلي، وهو عامل أساسي لضمان موثوقية الإرسال. تلعب أرقام التسلسل دورًا هامًا في اتصالات TCP، وهي تؤدي الوظائف التالية:
يمكن للمستقبل التخلص من البيانات المكررة وضمان دقة البيانات.
يمكن للمستقبل استقبال الحزم حسب ترتيب الرقم التسلسلي لضمان سلامة البيانات.
● يمكن للرقم التسلسلي تحديد حزمة البيانات التي تلقاها الطرف الآخر، مما يتيح نقل البيانات بشكل موثوق.
لذلك، عند إنشاء اتصال TCP، يُرسل العميل حزم SYN برقم التسلسل الأولي، ويطلب من الخادم الرد بحزمة ACK تُشير إلى استلام حزمة SYN بنجاح. بعد ذلك، يُرسل الخادم حزمة SYN برقم التسلسل الأولي إلى العميل، وينتظر رده النهائي لضمان مزامنة أرقام التسلسل الأولية بشكل موثوق.
على الرغم من إمكانية مزامنة أرقام التسلسل الأولية لكلا الطرفين بشكل موثوق عبر المصافحة الرباعية، إلا أنه يمكن دمج الخطوتين الثانية والثالثة في خطوة واحدة، مما ينتج عنه مصافحة ثلاثية. مع ذلك، تضمن المصافحتان فقط استلام الطرف الآخر لرقم التسلسل الأولي لأحد الطرفين بنجاح، ولكن لا يوجد ضمان لتأكيد رقم التسلسل الأولي لكلا الطرفين. لذلك، تُعد المصافحة الثلاثية الخيار الأمثل لضمان استقرار وموثوقية اتصالات TCP.
السبب الثالث: تجنب إهدار الموارد
في حال وجود "مصافحة ثنائية" فقط، عند حظر طلب SYN للعميل في الشبكة، لا يتمكن العميل من استلام حزمة الإقرار المرسلة من الخادم، وبالتالي يُعاد إرسال SYN. مع ذلك، نظرًا لعدم وجود مصافحة ثالثة، لا يستطيع الخادم تحديد ما إذا كان العميل قد تلقى إشعار ACK لإنشاء الاتصال. لذلك، لا يمكن للخادم إنشاء اتصال إلا بشكل استباقي بعد استلام كل طلب SYN. وهذا يؤدي إلى ما يلي:
إهدار الموارد: إذا حُظر طلب SYN الخاص بالعميل، مما أدى إلى إرسال متكرر لحزم SYN متعددة، فسيُنشئ الخادم اتصالات متكررة غير صالحة بعد استلام الطلب. هذا يؤدي إلى إهدار غير ضروري لموارد الخادم.
الاحتفاظ بالرسائل: بسبب عدم وجود مصافحة ثالثة، لا يستطيع الخادم معرفة ما إذا كان العميل قد استلم إشعار الإقرار بشكل صحيح لإنشاء الاتصال. نتيجةً لذلك، إذا علقت الرسائل في الشبكة، فسيستمر العميل في إرسال طلبات SYN مرارًا وتكرارًا، مما يدفع الخادم إلى إنشاء اتصالات جديدة باستمرار. سيؤدي هذا إلى زيادة ازدحام الشبكة وتأخيرها، ويؤثر سلبًا على الأداء العام للشبكة.
لذلك، ولضمان استقرار وموثوقية اتصال الشبكة، يستخدم TCP المصافحة ثلاثية الاتجاهات لإنشاء الاتصال لتجنب حدوث هذه المشكلات.
ملخص
الوسيط حزم الشبكةيتم إنشاء اتصال TCP عبر مصافحة ثلاثية. خلال هذه المصافحة، يُرسل العميل أولاً حزمةً تحمل علامة SYN إلى الخادم، مُشيرًا إلى رغبته في إنشاء اتصال. بعد استلام الطلب من العميل، يُرسل الخادم حزمةً تحمل علامتي SYN وACK إلى العميل، مُشيرًا إلى قبول طلب الاتصال، ويُرسل رقمه التسلسلي الأولي. وأخيرًا، يُرسل العميل علامة ACK إلى الخادم مُشيرًا إلى نجاح إنشاء الاتصال. وهكذا، يكون الطرفان في حالة التأسيس (ESTABLISHID) ويمكنهما بدء إرسال البيانات إلى بعضهما البعض.
بشكل عام، تم تصميم عملية المصافحة الثلاثية لإنشاء اتصال TCP لضمان استقرار الاتصال وموثوقيته، وتجنب الارتباك وإهدار الموارد على الاتصالات التاريخية، وضمان قدرة كلا الطرفين على تلقي البيانات وإرسالها.
وقت النشر: ٨ يناير ٢٠٢٥