الخلاصة

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

صنع الصمتان الصحيحان مأزقاً دائماً

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

يشدد RFC 1122 على أن ACK الخالي من البيانات لا يُنقل بموثوقية البيانات. لم يخطئ أي طرف، لكن الوصلة قد تتوقف إلى الأبد. ما ضاع لم يكن حمولة، بل الإذن بتجديدها.

وصفت النافذة السعة لا سبب غيابها

فرّق RFC 813 بين النافذة المعروضة من المستقبِل والنافذة القابلة للاستخدام بعد خصم البيانات غير المُقرّة. إنها أداة لضبط التدفق.

لا يقول الصفر إن العملية تعطلت. المثال التاريخي طابعة نفد ورقها؛ قد ينتظر البرنامج دقائق أو أياماً بينما يبقى المضيف والمسار سليمين. لو أغلق النقل الوصلة لفسّر حالة تطبيقية لا يراها.

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

طرح بايت استثنائي سؤالاً جديداً

وضع RFC 793 الآلية، ويحفظها RFC 9293. حتى عند الصفر يرسل المرسِل دورياً بايتاً جديداً واحداً على الأقل إن وُجد، أو يعيد الإرسال، كي يفحص النافذة. ويرد المستقبِل برقم التسلسل المتوقع والنافذة الحالية.

لا تتجاوز النبضة المنع. إنها سؤال محدود: الصفر في الرد يؤكد استمرار الوقف، والقيمة الموجبة تعيد إيصال الإذن المفقود.

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

الصفر المؤكَّد ليس غياباً للرد

يسمح RFC 1122 للمستقبِل بإغلاق نافذته إلى أجل غير محدد. وطالما يقر بالنبضات يجب أن يبقي TCP المرسِل الوصلة مفتوحة.

يثبت ACK أن TCP البعيد ومسار عودة قدّما تقريراً حالياً. لا يثبت سلامة التطبيق ولا قرب استئنافه ولا جدوى حفظ الذاكرة المحلية. لكنه يختلف عن الصمت: عدم الرد يترك شكاً في الطرف أو الطريق، أما الصفر المقرّ فهو دليل حضور مع حجب السعة.

لم تمنح الاستمرارية الطرف الآخر ملكية الذاكرة

أسيء فهم «إلى أجل غير محدد» كأنه حظر لتحرير الموارد. أوضح RFC 6429 أن TCP لا يغلق من تلقاء نفسه لمجرد persist، لكن التطبيق أو النظام يستطيع طلب الإنهاء وعلى TCP التنفيذ.

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

لا يميّز مؤقت نقل واحد بين طباعة مشروعة واحتجاز عدائي. الطبقة التي تعرف العميل والعقد والكلفة والمهلة هي التي تقرر. يحفظ TCP الحقيقة المشتركة؛ وتحمي السياسة المحلية الموارد المحلية.

فتح النافذة بفتات صنع تدهوراً آخر

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

يستطيع المستقبِل تأجيل إعلان المساحات الضئيلة حتى تتجمع سعة نافعة، ويرفض المرسِل الاستجابة لكل حركة صغيرة. يطلب RFC 9293 الوقاية في الجانبين، ويفصلها عن خوارزمية Nagle المكملة التي تعالج كتابات التطبيق الصغيرة.

يضمن persist ألا تضيع إعادة فتح مهمة، وتمنع الوقاية من SWS أن تصبح كل فسحة صغيرة إذناً غير كفؤ. موثوقية الإذن وحجمه عقد واحد.

بقي تقسيم السلطة لا رقم المؤقت

تمر السلسلة من RFC 793 إلى تحليل RFC 813 ومتطلبات RFC 1122 وتوضيح RFC 6429 وتجميع RFC 9293. يتحكم المستقبِل في سعته الحالية. يحافظ TCP المرسِل على سؤال مقتصد. ويختار التطبيق والنظام مقدار الوقت والذاكرة اللذين يتحملانهما.

الصبر عند الصفر يحمي احتمال الاستمرار. لا يمنح حقاً غير محدود في موارد الطرف الآخر.

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

الحزمة المغلقة هي RFC 793 وRFC 813 وRFC 1122 وRFC 6429 وRFC 9293. لا تثبت مؤقتات كل نظام حالي ولا انتشار الهجمات ولا صحة تطبيق بعينه.