بروتوكول نقل موثوقية TCP
نحن جميعًا على دراية ببروتوكول TCP كبروتوكول نقل موثوق، ولكن كيف يضمن موثوقية النقل؟
لتحقيق نقل موثوق للبيانات، يجب مراعاة العديد من العوامل، مثل تلف البيانات وفقدانها وتكرارها وتجزئة البيانات بشكل غير مرتب. إذا لم تُحل هذه المشكلات، فلن يتحقق النقل الموثوق.
لذلك، يستخدم بروتوكول TCP آليات مثل رقم التسلسل، والرد بالإقرار، والتحكم في إعادة الإرسال، وإدارة الاتصال، والتحكم في النافذة لتحقيق نقل موثوق.
سنركز في هذه الورقة على آلية النافذة المنزلقة، والتحكم في التدفق، والتحكم في الازدحام في بروتوكول TCP. أما آلية إعادة الإرسال فسيتم تناولها بشكل منفصل في القسم التالي.
التحكم في تدفق الشبكة
يُعدّ التحكم في تدفق الشبكة، أو ما يُعرف أيضًا بالتحكم في حركة مرور الشبكة، تجسيدًا للعلاقة الدقيقة بين المنتجين والمستهلكين. ربما صادفت هذا السيناريو كثيرًا في العمل أو في المقابلات. إذا تجاوزت قدرة المنتج على الإنتاج قدرة المستهلك على الاستهلاك بشكل كبير، فسيؤدي ذلك إلى نمو قائمة الانتظار بشكل غير محدود. في حالة أكثر خطورة، قد تعلم أنه عندما تتراكم رسائل RabbitMQ بشكل مفرط، يمكن أن يتسبب ذلك في تدهور أداء خادم MQ بأكمله. وينطبق الأمر نفسه على بروتوكول TCP؛ فإذا تُرك دون رقابة، سيتم وضع عدد كبير جدًا من الرسائل في الشبكة، وسيتجاوز المستهلكون قدرتهم الاستيعابية، بينما سيستمر المنتجون في إرسال رسائل مكررة، مما سيؤثر بشكل كبير على أداء الشبكة.
لمعالجة هذه الظاهرة، يوفر بروتوكول TCP آليةً للمرسل للتحكم في كمية البيانات المرسلة بناءً على سعة الاستقبال الفعلية للمستقبل، وهو ما يُعرف بالتحكم في التدفق. يحتفظ المستقبل بنافذة استقبال، بينما يحتفظ المرسل بنافذة إرسال. تجدر الإشارة إلى أن هذه النوافذ مخصصة لاتصال TCP واحد فقط، ولا تشترك جميع الاتصالات في نافذة واحدة.
يُوفر بروتوكول TCP التحكم في تدفق البيانات باستخدام متغير لنافذة الاستقبال. تُعطي نافذة الاستقبال للمرسل مؤشرًا على مقدار مساحة التخزين المؤقت المتاحة. ويتحكم المرسل في كمية البيانات المُرسلة وفقًا لسعة الاستقبال الفعلية للمستقبل.
يُبلغ جهاز الاستقبال المُرسِل بحجم البيانات التي يمكنه استقبالها، ويرسل المُرسِل البيانات حتى هذا الحد. هذا الحد هو حجم النافذة، هل تتذكر رأس بروتوكول TCP؟ يوجد حقل نافذة الاستقبال، والذي يُستخدم للإشارة إلى عدد البايتات التي يستطيع أو يرغب جهاز الاستقبال في استقبالها.
يقوم المضيف المُرسِل بإرسال حزمة فحص دورية، تُستخدم للكشف عما إذا كان المضيف المُستقبِل لا يزال قادرًا على استقبال البيانات. عندما يكون مخزن المُستقبِل مُعرَّضًا لخطر الامتلاء، يتم ضبط حجم النافذة على قيمة أصغر لتوجيه المُرسِل للتحكم في كمية البيانات المُرسَلة.
إليكم مخطط التحكم في تدفق الشبكة:
التحكم في ازدحام الشبكة
قبل الخوض في آلية التحكم في الازدحام، يجب أن نفهم أنه بالإضافة إلى نافذة الاستقبال ونافذة الإرسال، توجد أيضًا نافذة الازدحام، والتي تُستخدم أساسًا لتحديد معدل بدء إرسال البيانات إلى نافذة الاستقبال. لذا، يتولى مُرسِل بروتوكول TCP أيضًا إدارة نافذة الازدحام. نحتاج إلى خوارزمية لتحديد كمية البيانات المناسبة للإرسال، إذ أن إرسال كمية قليلة جدًا أو كثيرة جدًا من البيانات ليس مثاليًا، ومن هنا جاء مفهوم نافذة الازدحام.
في نظام التحكم السابق في تدفق البيانات عبر الشبكة، كنا نتجنب قيام المرسل بملء ذاكرة التخزين المؤقت للمستقبل بالبيانات، لكننا لم نكن على دراية بما يحدث داخل الشبكة. عادةً ما تكون شبكات الحاسوب في بيئة مشتركة، مما قد يؤدي إلى ازدحام الشبكة نتيجةً للاتصالات بين الأجهزة المضيفة الأخرى.
عندما تكون الشبكة مزدحمة، فإن استمرار إرسال عدد كبير من الحزم قد يتسبب في مشاكل مثل التأخير وفقدان الحزم. في هذه الحالة، يعيد بروتوكول TCP إرسال البيانات، لكن إعادة الإرسال هذه تزيد من الضغط على الشبكة، مما يؤدي إلى تأخيرات أكبر وفقدان المزيد من الحزم. وقد يؤدي هذا إلى حلقة مفرغة تتفاقم باستمرار.
لذا، لا يمكن لبروتوكول TCP تجاهل ما يحدث على الشبكة. فعندما تكون الشبكة مزدحمة، يضحي بروتوكول TCP بنفسه عن طريق تقليل كمية البيانات التي يرسلها.
لذا، يُقترح التحكم في الازدحام، والذي يهدف إلى تجنب إغراق الشبكة بأكملها ببيانات المرسل. ولتنظيم كمية البيانات التي يجب على المرسل إرسالها، يُعرّف بروتوكول TCP مفهومًا يُسمى نافذة الازدحام. تقوم خوارزمية التحكم في الازدحام بتعديل حجم نافذة الازدحام وفقًا لدرجة ازدحام الشبكة، وذلك للتحكم في كمية البيانات المرسلة.
ما هي نافذة الازدحام؟ وما علاقتها بنافذة الإرسال؟
نافذة الازدحام هي متغير حالة يحتفظ به المرسل، ويحدد مقدار البيانات التي يمكنه إرسالها. وتتغير نافذة الازدحام ديناميكيًا وفقًا لمستوى ازدحام الشبكة.
نافذة الإرسال هي حجم نافذة متفق عليه بين المرسل والمستقبل، يشير إلى كمية البيانات التي يمكن للمستقبل استقبالها. ترتبط نافذة الازدحام بنافذة الإرسال؛ وعادةً ما تكون نافذة الإرسال مساوية لأصغر حجم بين نافذتي الازدحام والاستقبال، أي swnd = min(cwnd, rwnd).
تتغير نافذة الازدحام (cwnd) على النحو التالي:
إذا لم يكن هناك ازدحام في الشبكة، أي لم يحدث انقطاع في مهلة إعادة الإرسال، فإن نافذة الازدحام تزداد.
إذا كان هناك ازدحام في الشبكة، فإن نافذة الازدحام تتقلص.
يحدد المرسل ما إذا كانت الشبكة مزدحمة من خلال مراقبة استلام حزمة تأكيد الاستلام (ACK) خلال الوقت المحدد. إذا لم يستلم المرسل حزمة تأكيد الاستلام خلال الوقت المحدد، يُعتبر أن الشبكة مزدحمة.
بالإضافة إلى نافذة الازدحام، حان الوقت لمناقشة خوارزمية التحكم في ازدحام بروتوكول TCP. تتكون خوارزمية التحكم في ازدحام بروتوكول TCP من ثلاثة أجزاء رئيسية:
بداية بطيئة:في البداية، تكون نافذة الازدحام cwnd صغيرة نسبيًا، ويقوم المرسل بزيادة نافذة الازدحام بشكل كبير للتكيف بسرعة مع سعة الشبكة.
تجنب الازدحام:بعد أن تتجاوز نافذة الازدحام عتبة معينة، يقوم المرسل بزيادة نافذة الازدحام بطريقة خطية لإبطاء معدل نمو نافذة الازدحام وتجنب تحميل الشبكة فوق طاقتها.
التعافي السريع:في حالة حدوث ازدحام، يقوم المرسل بتقليص نافذة الازدحام إلى النصف ويدخل في حالة الاسترداد السريع لتحديد موقع استعادة الشبكة من خلال إشعارات التأكيد المكررة المستلمة، ثم يستمر في زيادة نافذة الازدحام.
بداية بطيئة
عند إنشاء اتصال TCP، يتم ضبط نافذة الازدحام (cwnd) مبدئيًا على قيمة دنيا لحجم القطعة القصوى (MSS). وبهذه الطريقة، يكون معدل الإرسال الأولي حوالي MSS/RTT بايت/ثانية. عادةً ما يكون عرض النطاق الترددي المتاح فعليًا أكبر بكثير من MSS/RTT، لذا يسعى بروتوكول TCP إلى إيجاد معدل الإرسال الأمثل، والذي يمكن تحقيقه باستخدام آلية البدء البطيء.
في عملية بدء التشغيل البطيء، تُهيأ قيمة نافذة الازدحام (cwnd) إلى 1 MSS، وفي كل مرة يتم فيها تأكيد استلام جزء من الحزمة المرسلة، تزداد قيمة cwnd بمقدار 1 MSS، أي تصبح 2 MSS. بعد ذلك، تتضاعف قيمة cwnd مع كل عملية إرسال ناجحة لجزء من الحزمة، وهكذا. يوضح الشكل التالي عملية النمو بالتفصيل.
مع ذلك، لا يمكن لمعدل الإرسال أن ينمو باستمرار؛ إذ لا بد أن يتوقف النمو في وقت ما. إذن، متى يتوقف ارتفاع معدل الإرسال؟ عادةً ما يوقف البدء البطيء ارتفاع معدل الإرسال بإحدى الطرق التالية:
تتمثل الطريقة الأولى في حالة فقدان الحزم أثناء عملية الإرسال في بدء التشغيل البطيء. عند حدوث فقدان حزمة، يقوم بروتوكول TCP بتعيين نافذة الازدحام (cwnd) الخاصة بالمرسل إلى 1، ثم يعيد تشغيل عملية بدء التشغيل البطيء. عند هذه النقطة، يُطرح مفهوم عتبة بدء التشغيل البطيء (ssthresh)، والتي تكون قيمتها الأولية نصف قيمة نافذة الازدحام (cwnd) التي تُسبب فقدان الحزم. أي أنه عند اكتشاف الازدحام، تكون قيمة عتبة بدء التشغيل البطيء (ssthresh) نصف قيمة نافذة الازدحام.
الطريقة الثانية هي الربط المباشر بقيمة عتبة بدء التشغيل البطيء (ssthresh). بما أن قيمة ssthresh تساوي نصف قيمة نافذة الشبكة عند اكتشاف الازدحام، فقد يحدث فقدان للحزم مع كل مضاعفة عندما تكون قيمة نافذة الشبكة (cwnd) أكبر من ssthresh. لذلك، من الأفضل ضبط قيمة cwnd على ssthresh، مما سيؤدي إلى تحويل بروتوكول TCP إلى وضع التحكم في الازدحام وإنهاء بدء التشغيل البطيء.
أما الطريقة الأخيرة لإنهاء بدء التشغيل البطيء فهي في حال اكتشاف ثلاث حزم تأكيد زائدة، حيث يقوم بروتوكول TCP بإعادة إرسال سريعة ويدخل في حالة الاسترداد. (إذا لم يكن واضحًا سبب وجود ثلاث حزم تأكيد، فسيتم شرح ذلك بشكل منفصل في آلية إعادة الإرسال).
تجنب الازدحام
عندما يدخل بروتوكول TCP في حالة التحكم بالازدحام، يتم ضبط قيمة cwnd على نصف قيمة عتبة الازدحام ssthresh. هذا يعني أنه لا يمكن مضاعفة قيمة cwnd مع كل حزمة بيانات يتم استلامها. بدلاً من ذلك، يُعتمد نهج متحفظ نسبيًا، حيث تزداد قيمة cwnd بمقدار MSS واحد فقط (الحد الأقصى لطول حزمة البيانات) بعد اكتمال كل عملية إرسال. على سبيل المثال، حتى في حال استلام 10 حزم بيانات، ستزداد قيمة cwnd بمقدار MSS واحد فقط. هذا نموذج نمو خطي، وله حد أقصى للنمو. عند حدوث فقدان في الحزم، تتغير قيمة cwnd إلى MSS، وتُضبط قيمة ssthresh على نصف قيمة cwnd. أو يتوقف نمو MSS عند استلام 3 استجابات ACK زائدة. إذا استمر استلام ثلاث استجابات ACK زائدة بعد خفض قيمة cwnd إلى النصف، تُسجل قيمة ssthresh على أنها نصف قيمة cwnd، ويتم الدخول في حالة الاسترداد السريع.
تعافي سريع
في حالة الاسترداد السريع، تزداد قيمة نافذة الازدحام (cwnd) بمقدار وحدة واحدة من حجم مقطع الحزمة (MSS) لكل إشعار تأكيد زائد (ACK) يتم استلامه، أي إشعار تأكيد لا يصل بالتسلسل. يهدف هذا إلى الاستفادة من أجزاء الحزم التي تم إرسالها بنجاح في الشبكة لتحسين كفاءة الإرسال قدر الإمكان.
عند وصول إشعار تأكيد (ACK) لجزء الحزمة المفقودة، يُقلل بروتوكول TCP قيمة نافذة الازدحام (cwnd) ثم يدخل في حالة تجنب الازدحام. يهدف هذا إلى التحكم في حجم نافذة الازدحام وتجنب زيادة ازدحام الشبكة.
في حال حدوث مهلة بعد انتهاء حالة التحكم في الازدحام، تتفاقم حالة الشبكة، وينتقل بروتوكول TCP من حالة تجنب الازدحام إلى حالة بدء التشغيل البطيء. في هذه الحالة، تُضبط قيمة نافذة الازدحام (cwnd) على 1 MSS، وهو الحد الأقصى لطول مقطع الحزمة، وتُضبط قيمة عتبة بدء التشغيل البطيء (ssthresh) على نصف قيمة cwnd. والهدف من ذلك هو زيادة حجم نافذة الازدحام تدريجيًا بعد تعافي الشبكة لتحقيق التوازن بين معدل الإرسال ودرجة ازدحام الشبكة.
ملخص
يُعدّ بروتوكول TCP بروتوكول نقل موثوقًا، إذ يُطبّق نقلًا موثوقًا من خلال أرقام التسلسل، والإقرار، والتحكم في إعادة الإرسال، وإدارة الاتصال، والتحكم في نافذة الإرسال. ومن بين هذه الآليات، تتحكم آلية التحكم في التدفق في كمية البيانات المُرسلة من قِبل المُرسِل وفقًا لسعة الاستقبال الفعلية للمُستقبِل، مما يُجنّب مشاكل ازدحام الشبكة وتدهور الأداء. أما آلية التحكم في الازدحام، فتتجنّب حدوث ازدحام الشبكة عن طريق تعديل كمية البيانات المُرسلة من قِبل المُرسِل. يرتبط مفهوما نافذة الازدحام ونافذة الإرسال ارتباطًا وثيقًا، ويتم التحكم في كمية البيانات لدى المُرسِل من خلال تعديل حجم نافذة الازدحام ديناميكيًا. وتُشكّل البداية البطيئة، وتجنّب الازدحام، والتعافي السريع الأجزاء الرئيسية الثلاثة لخوارزمية التحكم في ازدحام TCP، والتي تُعدّل حجم نافذة الازدحام من خلال استراتيجيات مختلفة للتكيّف مع سعة الشبكة ودرجة ازدحامها.
في القسم التالي، سنتناول آلية إعادة الإرسال في بروتوكول TCP بالتفصيل. تُعدّ آلية إعادة الإرسال جزءًا أساسيًا من بروتوكول TCP لضمان نقل البيانات بشكل موثوق. فهي تضمن نقل البيانات بشكل موثوق من خلال إعادة إرسال البيانات المفقودة أو التالفة أو المتأخرة. سنشرح مبدأ عمل آلية إعادة الإرسال واستراتيجيتها ونحللها بالتفصيل في القسم التالي. تابعونا!
تاريخ النشر: 24 فبراير 2025

