الخلاصة

  • يعبّر STOP_SENDING عن عدم رغبة المستقبل في بيانات اتجاه وارد، لكنه لا يثبت تجاهل البايتات السابقة.
  • ينهي RESET_STREAM اتجاه الإرسال لدى الطرف المقابل فقط؛ أما final size فيسجل رصيد التحكم في التدفق المستهلك، لا العمل المنجز أو المعكوس.
  • يجب فصل وقائع النقل عن قبول التطبيق البعيد، وقبول الإلغاء، والآثار الدائمة، والتعويض، والنتيجة النهائية.

قد تنتهي مهلة العميل، فيقرر أنه لم يعد يريد الاستجابة، ثم يرسل STOP_SENDING ومعه رمز خطأ للتطبيق. هذه واقعة نقل واضحة: فهي تطلب من الطرف المقابل التوقف عن الإرسال في اتجاه واحد من دفق QUIC. لكنها لا تخبر سجل العمليات بأن طلبًا أو مهمة أو أمرًا بعيدًا قد أُلغي. فحالة البايتات ليست حالة العملية التجارية.

تسمح RFC 9000 للتطبيق الذي لم يعد مهتمًا بالبيانات التي يستقبلها على دفق بأن يوقف القراءة. وإذا كان الجزء المستقبل في Recv أو Size Known، فينبغي للنقل أن يرسل STOP_SENDING لتحفيز إغلاق الاتجاه المقابل. لكن النص يضع حدًا صريحًا: الإطار لا يضمن أن البيانات الواردة ستُتجاهل. ربما وصلت STREAM بايتات سابقة، أو سُلّمت إلى التطبيق، أو استُخدمت في معالجة. كما أن STREAM بايتات التي تصل بعد STOP_SENDING تظل محسوبة في التحكم بتدفق الدفق والاتصال، حتى لو أسقطها النقل عند الاستلام.

استجابة الطرف المقابل انتقال مستقل. فإذا كان جزء الإرسال لديه في Ready أو Send، فعليه إرسال RESET_STREAM. وفي Data Sent يمكنه تأجيل الإعادة إلى أن يجري تأكيد البيانات المعلقة أو إعلان فقدها. وإذا أُعلنت مفقودة، فينبغي له إرسال RESET_STREAM بدل إعادة إرسالها. ينبغي له نسخ رمز خطأ التطبيق من STOP_SENDING، لكنه يستطيع اختيار رمز مختلف. لذلك يجب تسجيل الرمزين كملاحظتين منفصلتين، ولا يجوز اعتبار أحدهما تفسيرًا للآخر.

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

final size دليل على التحكم في التدفق. إنه يعبّر عن مقدار بيانات الدفق الذي استهلك رصيد التحكم على مستوى الاتصال. وبعد معرفته لا يتغير، سواء انتهى الدفق طبيعيًا أو أُعيد ضبطه. لكنه لا يبين مقدار العمل الذي أنجزه التطبيق، ولا ما إذا قُبلت العملية البعيدة أو عُكست آثارها. بعد RESET_STREAM يتوقف الطرف عن إرسال وإعادة إرسال إطارات STREAM في ذلك الاتجاه؛ وهذه حقيقة عن النقل، لا عن استعادة حالة التطبيق.

للإشارات دورة موثوقية محدودة المعنى. لا يعيد QUIC إرسال الحزمة المفقودة كاملة، بل يرسل المعلومات اللازمة في إطارات جديدة. يستمر RESET_STREAM حتى تأكيده أو تأكيد كل بيانات الدفق. ويستمر STOP_SENDING حتى يصل الجزء المستقبل إلى Data Recvd أو Reset Recvd. تثبت الاستلامات والتأكيدات تقدم آلة حالات QUIC، لكنها لا تثبت أن الطرف لم يستهلك البايتات السابقة، أو ألغى العمل، أو تراجع عن الآثار، أو أنجز التعويض.

ينبغي أن يسجل دفتر الأدلة هوية الاتصال، وstream ID، والمبادر، ونوع الدفق، والاتجاه المتأثر. كما ينبغي فصل قرار التوقف المحلي، وإرسال STOP_SENDING وإعادة إرساله، ورموزه، واستلام RESET_STREAM ورمزه المستقل، وfinal size، وحساب التدفق، وأي STREAM بايتات لاحقة. ولا يثبت القبول أو الاستهلاك البعيد، أو قبول الإلغاء أو رفضه، أو الأثر الدائم، أو التراجع، أو التعويض، أو النتيجة إلا دليل تطبيقي مستقل.

تحمي هذه القاعدة التمييز عن الموضوعات المجاورة. يتناول TR-045 ACK ومعالجة الحزم؛ ويتناول TR-046 إذن التحكم في التدفق؛ ويتناول TR-052 حدود رسائل DATAGRAM وغياب ضمان التسليم؛ ويتناول TR-053 CONNECTION_CLOSE وإنهاء حالة النقل. أما STOP_SENDING فهو طلب لإيقاف اتجاه واحد من دفق محدد مع احتمال بقاء الاتصال قائمًا.