الخلاصة

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

تحولت الحماية إلى مصنع للحزم

تحدد نافذة الاستقبال مقدار فضاء التسلسل الإضافي الذي يسمح للمرسل باستخدامه. إنها سقف لا أمرا بإنفاق كل بايت موجب لحظة ظهوره.

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

سمت RFC 813 هذا النمط المستقر Silly Window Syndrome. لم تكن قيمة التشخيص في الاسم، بل في إثبات أن قرارين محليين صحيحين قد يصنعان فشلا على مستوى النظام. ظل حساب البايتات دقيقا، بينما انهار الحجم المفيد للتبادل.

توقف المستقبل عن نشر كل حقيقة هامشية

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

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

توقف المرسل عن اعتبار السقف أمرا

لا يمكن افتراض أن كل مستقبل سيضبط إعلاناته، لذلك يحتفظ المرسل بقرار مستقل. تحظر النافذة تجاوز الحد، لكنها لا تفرض ملء كل مساحة موجبة فورا.

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

تفصل RFC 9293 بين آليتي المرسل والمستقبل في قسمين. هذا الفصل هو لب التصميم: يقرر المستقبل متى تصبح سعته عرضا، ويقرر المرسل متى يستحق العرض إرسال قطعة، من دون أن يدير أحدهما ذاكرة الآخر.

عالج Nagle تقطيرا آخر

قد تظهر القطع الصغيرة حتى مع نافذة واسعة إذا سلم التطبيق البيانات حرفا حرفا. وصفت RFC 896 كلفة حمل بايت مفيد واحد مع نحو أربعين بايتا من رؤوس TCP/IP في ذلك الوقت.

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

يختلف مصدر الإشارة. يستجيب Nagle لبيانات تصل من التطبيق على دفعات صغيرة، بينما يستجيب تجنب المتلازمة لفرص نافذة تصل من النظير على دفعات صغيرة. قد يعطل تطبيق حساس للزمن Nagle، لكن ذلك لا يلغي مشكلة النافذة الضيقة.

احتاج ضبط النفس إلى مخرج

يوفر الانتظار الموارد، لكن الانتظار بلا حد فشل آخر. يحفظ المؤقت الاحتياطي طريق التقدم. يملك المستقبل قرار إعلان مخزنه، ويملك المرسل قرار استخدام الفرصة، ويملك التطبيق قرار مقايضة التجميع بالزمن. سلطات ضيقة ومخارج صريحة صنعت تنسيقا بلا مجدول مركزي.

المصادر والحدود

يوثق التصميم كل من RFC 793 وRFC 813 وRFC 896 وRFC 1122 وRFC 9293. تثبت هذه النصوص تاريخ الآلية، لا معدل ظهورها اليوم في كل نظام. كما تختلف المتلازمة عن التحكم في نافذة الازدحام أو فقد الحزم.