الخلاصة

  • ضمن RFC 3525 كانت أوامر المعاملة الواحدة تُنفذ تباعاً، بينما جاز تنفيذ معاملات مختلفة بأي ترتيب أو في الوقت نفسه.
  • أثبت TransactionPending وإعادة الإرسال وإقرار الرد وآلية التنفيذ مرة واحدة على الأكثر حقائق نقل محدودة؛ ولم يثبت أي منها تسلسلاً سببياً بين المعاملات أو نتيجة الوسائط.

أوضح مثال هو Subtract. سمح النص بإرساله في أي وقت. لذلك قد يعالج Media Gateway أمراً من نوع Modify بعد أن يكون Subtract قد أزال الـ Termination المقصودة. عندها ينبغي تجاهل Modify وإرجاع خطأ، حتى لو كان المتحكم قد أرسله أولاً.

هذا السلوك نابع من تصميم بوابة متعددة الوسائط مفككة مادياً. كان Media Gateway Controller يحتفظ بمنطق التحكم، بينما يحتفظ Media Gateway بحالة الوسائط ومواردها. وكان البروتوكول بحاجة إلى التوازي بين الموارد المستقلة من غير ادعاء ساعة عالمية واحدة.

قسّم RFC 3525 البنية إلى Message تحمل Transactions، وكل Transaction تحمل Actions، وكل Action تعمل داخل Context واحد وتضم Commands. لكن حدود الحاويات لم تكن كلها حدود ترتيب.

الضمان الصريح وُجد داخل Transaction واحدة. تُنفذ Commands على التوالي. وعند أول Command غير Optional يفشل، يتوقف تنفيذ ما بعده. أما فشل Command موسوم Optional فيمكن تجاوزه والاستمرار.

خارج هذا الحد لم يضمن البروتوكول ترتيب Transactions. جاز تنفيذها بأي تسلسل أو بالتزامن. وحتى جمعها في Message واحدة لم يحوّلها إلى دفعة ذرية؛ فالـ Message مجرد وسيلة نقل ولا تملك إقراراً تطبيقياً موحداً.

قد تحمل Message الطلبات A وB وC، ثم يأتي Reply لـ A وC معاً، ويصل Reply لـ B لاحقاً. ترتيب البايتات عند الإرسال لا يكشف ترتيب العمل داخل البوابة.

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

عندما توجد تبعية، يتحمل MGC مسؤولية التعبير عنها. أوصى النص بأن يبقى عادة أمر واحد فقط من Add أو Modify أو Move قيد الانتظار على Termination واحدة، إلا إذا كانت الأوامر في Transaction نفسها. من يحتاج Add قبل Modify يضعهما معاً أو ينتظر إيصال الأول.

واجه Notify سباقاً مشابهاً. قد يتأخر إخطار مرتبط بـ EventsDescriptor قديم حتى بعد إرسال Descriptor جديد. وعلى UDP، حيث لا يوجد ضمان ترتيب، ينبغي عادة ألا يبقى أكثر من Notify واحد قيد الانتظار لكل Termination. يصبح RequestID وهوية الحالة أهم من موضع الحزمة.

ولم تكن كلمة Transaction وعداً بتراجع شامل مثل قاعدة البيانات. إذا فشل Command، فعلى MG أن يعيد، قدر الإمكان، الحالة التي سبقت محاولة ذلك Command. لم يقل النص إن كل Command سابق نجح يجب إلغاؤه.

لذلك تحمل TransactionReply قيم Commands الناجحة ووصف خطأ Command الفاشل. النتيجة قد تكون جزئية: تغير حدث، ومحاولة أخفقت، وذيل لم يبدأ. اختزالها في علامة فشل واحدة يمحو ما يحتاجه القرار التالي.

يزيد TerminationID ذو المحرف العام هذا الوضوح. تُجرَّب Command على كل تطابق ويعود رد لكل واحد. إذا أخفق أحد التطابقات، لا تُجرّب Commands اللاحقة. وقد تجتمع نجاحات متعددة وخطأ وعمل غير منفذ داخل Transaction واحدة.

أما TransactionPending فيقول إن المعالجة لم تنته لكنها نشطة، ويعيد تشغيل مؤقت التطبيق. لا يحدد Command الذي وصل إليه التنفيذ، ولا يوقف Transactions الأخرى، ولا يعد بالنجاح النهائي.

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

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

ويبقى نجاح البروتوكول دون نتيجة الإنسان. Reply يثبت معالجة Command، وAudit يستطيع قراءة خصائص Context أو Termination. مرور الحزم وفك الصوت وسماعه يحتاج إلى أدلة منفصلة.

تاريخ الوثيقة نفسه يتطلب الدقة. حل RFC 3525 محل RFC 3015 عام 2003 ضمن تعاون IETF Megaco وITU-T. ثم جعل RFC 5125 الوثيقة Historic في 2008 لأن ITU-T واصل تطوير H.248.1. لذا فهي دليل على آلية تاريخية، لا وصف لكل نشر حالي.

ما زال سجل IANA الخاص بـ Megaco/H.248 ينسق أسماء الحزم والأخطاء والأسباب والملفات التعريفية بمراجع أحدث. استمرار السجل يثبت استمرار القاموس، لا إصدار الجهاز ولا ترتيب معاملاته.

الدرس الباقي هو وضع الترتيب في أصغر نطاق يملك التبعية. تعمل Terminations المستقلة بالتوازي، بينما تُجمع Commands المترابطة في Transaction أو تنتظر إيصالاً واضحاً. الحاوية تنسق التعبير؛ والكود العامل وحده يكشف الواقع.

Sources