إعداد اتصال 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 لرأس TCP لحزمة الرد على 1؛ ثانياً: يقوم العميل بإدخال القيمة server_isn + 1 في حقل "تأكيد رقم الإجابة"؛ وأخيرًا، يرسل العميل الحزمة إلى الخادم. يمكن لهذه الحزمة نقل البيانات من العميل إلى الخادم. عند الانتهاء من هذه العمليات، سيدخل العميل إلى الحالة المنشأة.
بمجرد أن يتلقى الخادم حزمة الرد من العميل، فإنه يتحول أيضًا إلى الحالة المؤسسة.
كما ترون من العملية المذكورة أعلاه، عند إجراء مصافحة ثلاثية، يُسمح للمصافحة الثالثة بحمل البيانات، ولكن لا يُسمح بذلك في المصافحة الأولى والثانية. هذا هو السؤال الذي كثيرا ما يطرح في المقابلات. بمجرد اكتمال المصافحة الثلاثية، يدخل كلا الطرفين في حالة ESTABLISHED، مما يشير إلى أن الاتصال قد تم تأسيسه بنجاح، وعند هذه النقطة يمكن للعميل والخادم البدء في إرسال البيانات إلى بعضهما البعض.
لماذا ثلاث مصافحات؟ ليس مرتين، أربع مرات؟
الجواب الشائع هو "لأن المصافحة الثلاثية تضمن إمكانية الاستقبال والإرسال". هذه الإجابة صحيحة، لكنها السبب السطحي فقط، ولا تطرح السبب الرئيسي. وفيما يلي سأقوم بتحليل أسباب المصافحة الثلاثية من ثلاثة جوانب لتعميق فهمنا لهذه القضية.
يمكن للمصافحة الثلاثية أن تتجنب بشكل فعال تهيئة الاتصالات المتكررة تاريخياً (السبب الرئيسي)
تضمن المصافحة الثلاثية حصول كلا الطرفين على رقم تسلسلي أولي موثوق.
المصافحة الثلاثية تتجنب إهدار الموارد.
السبب 1: تجنب عمليات الانضمام المكررة التاريخية
باختصار، السبب الرئيسي للمصافحة الثلاثية هو تجنب الارتباك الناجم عن تهيئة الاتصال المكرر القديم. في بيئة شبكة معقدة، لا يتم دائمًا إرسال حزم البيانات إلى المضيف الوجهة وفقًا للوقت المحدد، وقد تصل حزم البيانات القديمة إلى المضيف الوجهة أولاً بسبب ازدحام الشبكة وأسباب أخرى. ولتجنب ذلك، يستخدم بروتوكول TCP مصافحة ثلاثية لتأسيس الاتصال.
عندما يرسل العميل عدة حزم إنشاء اتصال SYN بالتتابع، في حالات مثل ازدحام الشبكة، قد يحدث ما يلي:
1- تصل حزم SYN القديمة إلى الخادم قبل حزم SYN الأحدث.
2- سيقوم الخادم بالرد على العميل بحزمة SYN + ACK بعد استلام حزمة SYN القديمة.
3- عندما يستقبل العميل حزمة SYN + ACK، فإنه يحدد أن الاتصال هو اتصال تاريخي (رقم تسلسلي منتهي الصلاحية أو مهلة) وفقًا للسياق الخاص به، ثم يرسل حزمة RST إلى الخادم لإحباط الاتصال.
مع اتصال المصافحة، لا توجد طريقة لتحديد ما إذا كان الاتصال الحالي هو اتصال تاريخي. تسمح المصافحة الثلاثية للعميل بتحديد ما إذا كان الاتصال الحالي هو اتصال تاريخي بناءً على السياق عندما يكون جاهزًا لإرسال الحزمة الثالثة:
1- إذا كان اتصالاً تاريخيًا (انتهى الرقم التسلسلي أو انتهت المهلة)، فإن الحزمة المرسلة بواسطة المصافحة الثالثة هي حزمة RST لإحباط الاتصال التاريخي.
2- إذا لم يكن اتصالاً تاريخيًا، فإن الحزمة المرسلة للمرة الثالثة هي حزمة ACK، ويقوم الطرفان المتصلان بإنشاء الاتصال بنجاح.
ولذلك، فإن السبب الرئيسي وراء استخدام TCP للمصافحة الثلاثية هو أنه يقوم بتهيئة الاتصال لمنع الاتصالات التاريخية.
السبب 2: لمزامنة الأرقام التسلسلية الأولية لكلا الطرفين
يجب أن يحتفظ كلا طرفي بروتوكول TCP برقم تسلسلي، وهو عامل رئيسي لضمان الإرسال الموثوق. تلعب الأرقام التسلسلية دورًا مهمًا في اتصالات TCP. فهي تقوم بما يلي:
يمكن للمتلقي التخلص من البيانات المكررة والتأكد من دقة البيانات.
يمكن لجهاز الاستقبال استقبال الحزم بترتيب الرقم التسلسلي لضمان سلامة البيانات.
● يمكن للرقم التسلسلي تحديد حزمة البيانات التي تم استلامها من قبل الطرف الآخر، مما يتيح نقل البيانات بشكل موثوق.
لذلك، عند إنشاء اتصال TCP، يرسل العميل حزم SYN برقم التسلسل الأولي ويطلب من الخادم الرد بحزمة ACK تشير إلى الاستقبال الناجح لحزمة SYN الخاصة بالعميل. بعد ذلك، يرسل الخادم حزمة SYN مع رقم التسلسل الأولي إلى العميل وينتظر رد العميل، مرة واحدة وإلى الأبد، للتأكد من مزامنة أرقام التسلسل الأولية بشكل موثوق.
على الرغم من أنه من الممكن أيضًا إجراء مصافحة رباعية الاتجاهات لمزامنة أرقام التسلسل الأولية لكلا الطرفين بشكل موثوق، إلا أنه يمكن دمج الخطوتين الثانية والثالثة في خطوة واحدة، مما يؤدي إلى مصافحة ثلاثية الاتجاهات. ومع ذلك، فإن المصافحتين يمكن أن تضمن فقط أن الرقم التسلسلي الأولي لأحد الطرفين قد تم استلامه بنجاح من قبل الطرف الآخر، ولكن لا يوجد ضمان بإمكانية تأكيد الرقم التسلسلي الأولي لكلا الطرفين. ولذلك، فإن المصافحة الثلاثية هي الخيار الأفضل الذي يجب اتخاذه لضمان استقرار وموثوقية اتصالات TCP.
السبب 3: تجنب إهدار الموارد
إذا لم يكن هناك سوى "مصافحة ثنائية"، فعند حظر طلب SYN للعميل في الشبكة، لن يتمكن العميل من تلقي حزمة ACK المرسلة من الخادم، لذلك ستتم إعادة إرسال SYN. ومع ذلك، نظرًا لعدم وجود مصافحة ثالثة، لا يمكن للخادم تحديد ما إذا كان العميل قد تلقى إقرار ACK لتأسيس الاتصال. لذلك، لا يمكن للخادم إنشاء اتصال بشكل استباقي إلا بعد تلقي كل طلب SYN. وهذا يؤدي إلى ما يلي:
إهدار الموارد: إذا تم حظر طلب SYN الخاص بالعميل، مما أدى إلى تكرار إرسال حزم SYN المتعددة، فسيقوم الخادم بإنشاء اتصالات غير صالحة متعددة زائدة عن الحاجة بعد تلقي الطلب. وهذا يؤدي إلى إهدار غير ضروري لموارد الخادم.
الاحتفاظ بالرسالة: نظرًا لعدم وجود مصافحة ثالثة، لا يوجد لدى الخادم طريقة لمعرفة ما إذا كان العميل قد تلقى إقرار ACK بشكل صحيح لتأسيس الاتصال. ونتيجة لذلك، إذا تعطلت الرسائل في الشبكة، فسيستمر العميل في إرسال طلبات SYN مرارًا وتكرارًا، مما يتسبب في قيام الخادم بإنشاء اتصالات جديدة باستمرار. سيؤدي ذلك إلى زيادة ازدحام الشبكة وتأخيرها ويؤثر سلبًا على أداء الشبكة بشكل عام.
لذلك، من أجل ضمان استقرار وموثوقية اتصال الشبكة، يستخدم TCP المصافحة الثلاثية لتأسيس الاتصال لتجنب حدوث هذه المشكلات.
ملخص
الوسيط حزم الشبكةيتم إنشاء اتصال TCP من خلال مصافحة ثلاثية. أثناء المصافحة الثلاثية، يرسل العميل أولاً حزمة مع علامة SYN إلى الخادم، للإشارة إلى أنه يريد إنشاء اتصال. بعد تلقي الطلب من العميل، يقوم الخادم بالرد على العميل بحزمة تحتوي على علامتي SYN وACK، للإشارة إلى قبول طلب الاتصال، وإرسال رقم التسلسل الأولي الخاص به. وأخيرًا، يرد العميل بعلامة ACK على الخادم للإشارة إلى أن الاتصال قد تم تأسيسه بنجاح. وبالتالي، يكون الطرفان في حالة التأسيس ويمكنهما البدء في إرسال البيانات لبعضهما البعض.
بشكل عام، تم تصميم عملية المصافحة ثلاثية الاتجاهات لإنشاء اتصال TCP لضمان استقرار الاتصال وموثوقيته، وتجنب الارتباك وإهدار الموارد عبر الاتصالات التاريخية، والتأكد من قدرة كلا الطرفين على تلقي البيانات وإرسالها.
وقت النشر: 08 يناير 2025