الخلاصة

  • عرّف IPv4 رسالة Parameter Problem بحيث تُسقط الحزمة غير القابلة للمعالجة، بينما يحدد مؤشر من ثمانية بتات البايت الذي اكتُشف عنده الخطأ في الترويسة.
  • وسّع ICMPv6 المؤشر إلى 32 بتاً، وفصل بين حقل خاطئ وNext Header غير معروف وخيار IPv6 غير معروف على امتداد سلسلة ترويسات الإضافة.
  • قد يشير المؤشر إلى موضع يقع بعد نهاية البايتات المقتبسة في الرد. الموقع الدقيق ليس توثيقاً للمرسل ولا إثباتاً للسبب الجذري ولا إذناً بالقراءة خارج الذاكرة المستلمة.

حين صار للفشل عنوان داخل الحزمة

تناول RFC 792 في سبتمبر 1981 حالة لا يستطيع فيها مضيف أو بوابة IPv4 إكمال معالجة ترويسة الداتاغرام. كان لا بد من إسقاط الحزمة. وإذا كان خلل المعلمة هو الذي فرض الإسقاط، أمكن إرسال ICMP من النوع 12، Parameter Problem، إلى المصدر.

حمل الرد حقلاً صغيراً اسمه Pointer. عندما يكون الرمز صفراً، تعني قيمته ذات الثمانية بتات إزاحة البايت في ترويسة IPv4 الأصلية حيث اكتُشف الخطأ. يمكن للقيمة 1 أن تشير إلى حقل Type of Service القديم، ويمكن للقيمة 20، عند وجود خيارات، أن تشير إلى نوع الخيار الأول. وقد يقع المؤشر في وسط خيار.

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

أرفق RFC 792 أيضاً ترويسة الإنترنت وأول 64 بتاً من البيانات الأصلية. كانت هذه الثمانية بايتات تحتوي غالباً منافذ TCP أو UDP، فتساعد على ربط الخطأ بالعملية المعنية. الاقتباس يعرّف سياق الإرسال؛ أما المؤشر فيحدد مكان توقف المحلل.

لم يجعل ذلك IP موثوقاً. أوضح المعيار أن ICMP يقدم تغذية راجعة ولا يضمن وصول كل داتاغرام أو عودة رسالة لكل إسقاط. قد تُحجب الرسالة أو تضيع أو تمنعها قواعد توليد الأخطاء. لذا لا يثبت الصمت قبول الحزمة.

واجب الإبلاغ لا يعني سلطة إنهاء الاتصال

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

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

طبّق RFC 1812 هذا الانضباط على موجّهات IPv4. تُسقط الداتاغرامات غير الصالحة، ويمكن في حالات قابلة للقراءة جزئياً أن يعود Pointer إلى Internet Header Length أو Total Length. إلا أن الفشل في هذا الموضع قد ينتج من قطع في طبقة الوصلة أو تلف عابر أو إصدار آخر من IP أو بناء غير قانوني عند المصدر. تحدد الإزاحة موضع فشل الفحص، لا القصة السببية وحدها.

وسمح معيار الموجّهات باقتباس أكبر قدر ممكن من الحزمة الأصلية شرط ألا تتجاوز رسالة ICMP حد إعادة التجميع الأدنى في IPv4، أي 576 بايتاً. تحسن السياق من غير أن يتحول التشخيص إلى تضخيم غير محدود.

احتاج IPv6 إلى مؤشر يسير مع السلسلة

لا تتجاوز ترويسة IPv4 مع خياراتها 60 بايتاً، لذلك تكفي ثمانية بتات. أما IPv6 فيضع بعد ترويسة أساسية من 40 بايتاً سلسلة مرتبة من ترويسات الإضافة. يقود كل Next Header إلى العنصر التالي، وقد يظهر العجز بعيداً عن البداية.

عرّف RFC 2463 في 1998 رسالة ICMPv6 Parameter Problem بالنوع 4 ومؤشر 32 بتاً. أصبحت القيمة إزاحة بالبايت من بداية الحزمة التي سببت الخطأ. يعني الرمز 0 حقلاً خاطئاً، والرمز 1 نوع Next Header غير معروف، والرمز 2 خيار IPv6 غير معروف. أبقى RFC 4443 هذا البناء في 2006.

يوضح المثال قيمة المؤشر: الرمز 1 مع Pointer يساوي 40 يعني أن القيمة التي تلي ترويسة IPv6 الأساسية مباشرة لم تكن معروفة. ليست الأربعون عدد القفزات أو درجة الخطر أو رقم بروتوكول؛ إنها موضع داخل الحزمة.

يربط RFC 8200 الموضع بترتيب المعالجة. لا يجوز للقارئ القفز فوق انتقال مجهول بحثاً عن ترويسة مألوفة لاحقة. إذا وجب عليه المتابعة ولم يفهم Next Header الحالي، يسقط الحزمة ويشير إلى القيمة نفسها. وقد تطلب بعض فئات الخيارات المجهولة الرمز 2؛ أما بتات أفعال الخيارات فآلية أخرى لا يعيد هذا المقال سردها.

يثبت المؤشر أن محللاً وصل إلى ذلك الموضع. لا يثبت أنه قرأ ما بعده، ولا أن بقية السلسلة خالية من خلل ثانٍ.

الموقع معروف والبايت غير موجود في الرد

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

لا يزوّر RFC 4443 الموضع كي يلائم الاقتباس. يمكن للمؤشر ذي 32 بتاً أن يتجاوز نهاية بايتات الحزمة الأصلية الموجودة فعلاً في رسالة ICMPv6. يعرف المصدر أن العقدة المبلغة توقفت عند الإزاحة N، لكنه لا يملك في هذا الرد البايت الموجود عند N.

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

لا يجوز للبرنامج استخدام Pointer مباشرة كفهرس في الذاكرة. قد يكون صالحاً في فضاء الحزمة الكاملة وغير صالح في المخزن المحلي. أكد RFC 8883 لاحقاً ضرورة التحقق من أن القيمة أصغر من طول البيانات المقتبسة قبل أي قراءة.

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

لم يعد كل رفض دليلاً على صيغة فاسدة

أضاف RFC 8883 في 2020 الرموز من 5 إلى 10. تشمل Next Header مجهولاً عند عقدة وسيطة، وترويسة إضافة أكبر من حد المعالجة، وسلسلة طويلة جداً، وعدداً زائداً من الترويسات أو الخيارات، وخياراً أكبر من الحد. يحدد المؤشر بحسب الحالة القيمة المجهولة أو أول بايت أو عنصر تجاوز السقف المحلي.

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

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

الدقة لا تمنح التقرير سلطة تلقائية

لا تكون رسائل ICMP العادية موثقة افتراضياً. يناقش RFC 4443 انتحال المصدر وتغيير الحقول وحجب الخدمة واستغلال رد فعل الطبقات العليا. ينبغي ربط التقرير بالعناوين والبروتوكول والمنافذ والحزم التي أُرسلت فعلاً قبل تغيير أي حالة.

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

قسّم Parameter Problem الفشل إلى وقائع مستقلة: إسقاط، وفئة سبب، وموضع، وسياق مقتبس إلى حد معلوم. جاءت فائدته من صراحة هذه الحدود، لا من ادعاء معرفة كاملة.

المصادر