الخلاصة

  • وثّق RFC 5393 كيف يمكن لأقل من عشر رسائل SIP صحيحة أن تهيئ شجرة محتملة من 2^71 رسالة؛ وفي بناء متعدد عناوين AOR يبقى المرور أكبر من N! قبل تكرار الهوية، حتى مع كشف الحلقات في كل وكيل.
  • يحد Max-Breadth الفروع غير المكتملة في الوقت نفسه، لكنه يعيد الرصيد بعد الاستجابة النهائية. يخفض الذروة، بينما يصرح RFC بأنه لا يخفض المرور الإجمالي للهجوم.
  • رسم التسجيل، وتاريخ Via، وحكم الحلقة أو الحلزون، والذروة المتزامنة، وعدد الفروع التراكمي، والتاريخ العابر للبوابات أو B2BUA هي إيصالات منفصلة.

الرصيد تفويض مؤقت لا قسيمة مستهلكة

يعرّف RFC لكل سياق استجابة Incoming Max-Breadth بوصفه الرصيد الوارد، وOutgoing Max-Breadth بوصفه مجموع الأرصدة الممنوحة للطلبات التي لم تتلق استجابة نهائية. لا يجوز للمجموع الصادر أن يتجاوز الوارد.

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

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

من هنا لا تكفي عبارة «الحد أربعة». هل المقصود أربعة فروع حية، أم أربعة أهداف طوال العمر، أم أربعة قفزات؟ يضمن البروتوكول المعنى الأول فقط.

العلاقات الصحيحة صنعت شجرة مضاعفة

في السيناريو الأبسط توجد خدمتا proxy/registrar وأربعة عناوين AOR. يسجل كل عنوان في P1 عنواني P2 كجهتي اتصال، ويفعل P2 العكس. يتحول INVITE واحد إلى طلبين، ثم أربعة، ثم ثمانية.

ليست الرسائل مضطرة لأن تكون مشوهة. ينشأ المضاعف من تركيب روابط صحيحة. يستمر الانتشار حتى يصل Max-Forwards إلى الصفر؛ وعند القيمة الموصى بها 70 تحتوي الشجرة الثنائية على 2^71 - 1 طلباً. وإذا تجاوز التنفيذ Timer C، تضيف 408 وCANCEL مزيداً من المرور والحالة.

يسجل RFC تجربة في SIPit مع أكثر من وكيل وحد أقصى للقفزات يبلغ 20. استمر القصف المتبادل ساعات، وقدّر النص أن INVITE الأصلي سيحتاج أقل بقليل من عشرة أيام ليكتمل. عادت بعض الوكلاء بعد إعادة التشغيل لأن حالة التسجيل بقيت.

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

كشف الحلقة يحتاج هوية لم تتعرض للمحو

في البناء الثنائي البسيط، يوقف كشف الحلقة التضخيم سريعاً. يذكر RFC أن التنفيذ في كل الوكلاء يخفض السيناريو الأول إلى 14 رسالة، ومتغير الخادم الواحد إلى 10. لذلك يجب على الوكيل الذي يفرّع إلى أكثر من موقع أن يتحقق من أنه لا يعيد معالجة الحالة نفسها.

يعتمد الجزء الثاني من قيمة branch في Via على Request-URI وRoute وكل مدخل تستخدمه خدمة الموقع. إذا عاد الطلب وأنتج القيمة نفسها، فهذه حلقة وتستحق 482. وإذا تغيرت المدخلات، فالمسار حلزوني في سياق توجيه جديد ويمكن أن يستمر.

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

أما بناء N من عناوين AOR، حيث يفرع كل عنوان إلى المجموعة كلها، فينتج جميع تبديلات N-1 قبل أول تكرار. يضيف التفرع الأخير N طلبات لكل مسار، أي N! في تلك الطبقة وحدها. يعطي الجدول 64 لأربعة عناوين، و1,956 لستة، و109,600 لثمانية، و9,864,100 لعشرة.

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

العمق والعرض والمجموع ثلاث سلطات

يحد Max-Forwards عدد القفزات. ويحد Max-Breadth الفروع النشطة. ويحظر RFC إنقاص العرض عند كل قفزة كي لا يتحول إلى عداد مسافة ثان. ويبقى إجمالي الفروع عبر العمر محوراً ثالثاً.

تعني 440 Max-Breadth Exceeded أن خطة التفرع المتوازي لا تناسب الرصيد وأن الوكيل لا يريد التسلسل أو إعادة التوجيه. لا تعني انتهاء كل محاولة لاحقة. فالقيمة واحد تسمح بالتفرع التسلسلي.

يقول قسم الأمن صراحة إن Max-Breadth لا يخفض المرور الإجمالي؛ بل يوزعه على زمن أطول. ويمكن لطلبات جذرية متعددة أن تراكم حملاً غير معقول. المنفعة هي بقاء النظام حياً بما يكفي لرصد المعاملات المعلقة وتعطيل المورد المتورط مؤقتاً.

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

حدود B2BUA قد تمنح الطلب ماضياً جديداً

ينهي B2BUA ساق SIP عند جهة UAS وينشئ طلباً جديداً عند UAC. وقد يرغب في إخفاء الطوبولوجيا، لكن محو Via أو القيم الحدية يقطع التاريخ الذي تحتاجه الحماية الموزعة. حذر RFC 5393 من أن وجود عنصرين كهذين قد يمنع كلاً منهما من اكتشاف الدائرة.

ألزم RFC 7332 لاحقاً B2BUA بنسخ Max-Forwards وإنقاصه، ونقل Max-Breadth وتطبيقه، وأوصى بكشف الحلقة وفق RFC 5393. كما جعل المقايضة بين الإخفاء وكشف الحلقة قراراً ظاهراً.

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

حدود الدليل

تثبت المصادر نصوص RFC، وتجربة SIPit كما رويت، والحسابات والقواعد. لا تثبت تبني منتج حالي أو معدل هجوم أو سبب انقطاع. يجب أن تبقى 2^71 وN! و9,864,100 مرتبطة بفرضياتها.

الخلاصة العملية: التزامن صورة للحظة، والعمل التراكمي دفتر حسابات. الأمان يحتاج الصورة والدفتر، واسم من قرر إنفاق كل رصيد عاد.