السلاح السري لـ TCP: التحكم في تدفق الشبكة والتحكم في ازدحام الشبكة

نقل موثوقية TCP
نحن جميعًا على دراية ببروتوكول TCP باعتباره بروتوكول نقل موثوقًا، ولكن كيف يضمن موثوقية النقل؟

لتحقيق نقل موثوق، يجب مراعاة عوامل عديدة، مثل تلف البيانات، والفقد، والتكرار، واختلال ترتيب الشظايا. إذا لم تُحل هذه المشاكل، فلن يتحقق نقل موثوق.

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

في هذه الورقة، سنركز على نافذة الانزلاق، والتحكم في التدفق، والتحكم في الازدحام في بروتوكول TCP. سيتم تناول آلية إعادة الإرسال بشكل منفصل في القسم التالي.

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

لمعالجة هذه الظاهرة، يوفر بروتوكول TCP آليةً تُمكّن المُرسِل من التحكم في كمية البيانات المُرسَلة بناءً على سعة الاستقبال الفعلية للمُستقبِل، وتُعرف هذه الآلية باسم التحكم في التدفق. يحتفظ المُستقبِل بنافذة استقبال، بينما يحتفظ المُرسِل بنافذة إرسال. تجدر الإشارة إلى أن هذه النوافذ مُخصصة لاتصال TCP واحد فقط، وليست جميع الاتصالات تتشارك نافذةً واحدة.

يوفر بروتوكول TCP التحكم في التدفق باستخدام متغير لنافذة الاستقبال. تُعطي نافذة الاستقبال المُرسِل مؤشرًا على مقدار مساحة التخزين المؤقت المتبقية. يتحكم المُرسِل في كمية البيانات المُرسَلة وفقًا لسعة الاستلام الفعلية للمُستقبِل.

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

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

فيما يلي رسم تخطيطي للتحكم في تدفق الشبكة:

مراقبة حركة المرور

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

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

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

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

لذلك، يُقترح التحكم في الازدحام، بهدف تجنب ملء الشبكة بأكملها ببيانات المرسل. لتنظيم كمية البيانات التي يجب على المرسل إرسالها، يُعرّف بروتوكول التحكم في الإرسال (TCP) مفهومًا يُسمى نافذة الازدحام. تُعدّل خوارزمية التحكم في الازدحام حجم نافذة الازدحام وفقًا لدرجة ازدحام الشبكة، وذلك للتحكم في كمية البيانات التي يرسلها المرسل.

ما هي نافذة الازدحام؟ وما علاقتها بنافذة الإرسال؟

نافذة الازدحام هي متغير حالة يُديره المُرسِل، ويُحدد كمية البيانات التي يُمكنه إرسالها. تتغير نافذة الازدحام ديناميكيًا وفقًا لمستوى ازدحام الشبكة.

نافذة الإرسال هي حجم نافذة متفق عليه بين المرسل والمستقبل، يُشير إلى كمية البيانات التي يمكن للمستقبل استقبالها. ترتبط نافذة الازدحام بنافذة الإرسال؛ فعادةً ما تكون نافذة الإرسال مساوية للحد الأدنى لنافذتي الازدحام والاستقبال، أي swnd = min(cwnd, rwnd).

تتغير نافذة الازدحام على النحو التالي:

إذا لم يكن هناك ازدحام في الشبكة، أي لم يحدث توقف مؤقت لإعادة الإرسال، تزداد نافذة الازدحام.

في حالة وجود ازدحام في الشبكة، تقل نافذة الازدحام.

يحدد المُرسِل ما إذا كانت الشبكة مُزدحمة بمراقبة استلام حزمة الإقرار خلال الوقت المُحدد. إذا لم يستلم المُرسِل حزمة الإقرار خلال الوقت المُحدد، تُعتبر الشبكة مُزدحمة.

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

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

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

في عملية البدء البطيء، تُهيأ قيمة نافذة الازدحام cwnd إلى MSS واحد، وفي كل مرة يتم فيها تأكيد استلام جزء الحزمة المُرسَل، تُزاد قيمة cwnd بمقدار MSS واحد، أي تصبح قيمة cwnd 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 واحد لكل إقرار زائد مُستقبَل، أي إقرار لا يصل بالتسلسل. ويهدف ذلك إلى الاستفادة من أجزاء الحزم التي تم إرسالها بنجاح عبر الشبكة لتحسين كفاءة الإرسال قدر الإمكان.

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

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

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

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


وقت النشر: ٢٤ فبراير ٢٠٢٥