الخلاصة

  • تفرض RFC 9844 على واجهة المستخدم التي تقبل عنوان IPv6 غير global أن تتيح أيضاً عنواناً link-local أو scoped multicast مع اختيار zone identifier، وغالباً يكون اسم interface يحدده نظام التشغيل.
  • يُحوَّل النص الذي يقرأه الإنسان إلى interface index رقمي خاص بالمضيف لاستعماله في socket؛ هو ضروري للفعل المحلي، بلا معنى متفق عليه لدى عقدة أخرى، ولا يجوز إرساله على السلك.
  • لذلك يحتفظ الإيصال الموثوق بالإدخال والتحقق والتحويل ودورة حياة الواجهة والنتيجة داخل العقدة، ويثبت بصورة منفصلة أن الحزمة خرجت من دون الوسم المحلي.

كان العنوان صحيحاً، لكن السؤال التشغيلي لم يُجب بعد: عبر أي رابط ينبغي أن تتحرك الحزمة؟

إذا كان للمضيف واجهتان، فقد يُفسَّر النص link-local نفسه داخل منطقتين محليتين. نموذج يقبل العنوان وحده يحذف قرار المسار. إضافة اسم الواجهة تستعيد القرار، لكن نسخ السلسلة بعد ذلك إلى مضيف آخر يخلق الخطأ المعاكس. الاسم نفسه قد يدل هناك على شبكة مختلفة أو لا يدل على شيء.

ترسم RFC 9844 هذه الحدود. يبين السجل والنص ومصدر XML أنها وثيقة Standards Track نُشرت في أغسطس 2025، أبطلت RFC 6874 وحدّثت RFC 4007 و7622 و8089. النشر يثبت وجود حد أدنى عام، ولا يثبت دعم منتج بعينه أو صحة الجهاز الذي وصل إليه المشغّل.

العنوان لا يختار الرابط

تحدد RFC 4291 بنية IPv6، وتوصي RFC 5952 بطريقة كتابة العنوان. نطاق link-local محدود عمداً. حين ترتبط العقدة بأكثر من zone من النطاق نفسه، لا تكفي بتات العنوان لاختيار واجهة الخروج.

تضيف RFC 4007 zone index إلى الاستعمال الداخلي. ويظهر للبشر عادة في صورة zone identifier: اسم interface أو رقم عشري. لاحقة مثل %eth0 ليست جزءاً جديداً من IPv6 header، بل تعليمة إلى جدول المضيف المحلي.

اختيار الواجهة سلطة تشغيلية. قد يذهب ping أو أمر إعداد أو التقاط حركة إلى الرابط الخطأ مع بقاء الصياغة صحيحة. وبالعكس، قد تجعل أداة لا تقبل zone جهازاً يعتمد link-local فقط غير قابل للإدارة. تسجل RFC 9844 حالات للتشخيص والإعداد والمراقبة والطباعة الافتراضية والشبكات البحرية. تقدم RFC 6991 سياق YANG، وتوضح RFC 8925 لماذا يقل مخرج IPv4 في بيئات IPv6-mostly.

النسخ واللصق يقللان أخطاء السلاسل الطويلة، لكن المنقول نص لا جدول interfaces. لا تسافر معه العلاقة التي صنعت المعنى.

التحويل هو العقد الحقيقي

تطلب RFC 9844 إدخال العنوان غير global مع zone. تفضل صيغة RFC 4007 الكاملة، وتسمح عند الضرورة بفاصل بديل أو حقلين أو قائمة zones نشطة أو معامل مستقل في command line. تختلف الواجهات، ويبقى invariant واحد: العنوان والمنطقة مدخلان منفصلان حتى يتحولا إلى index رقمي.

لا يستطيع inet_pton() تحويل fe80::1%eth0 مباشرة. يمكن استخدام getaddrinfo()، أو فصل الجزأين ثم الجمع بين inet_pton() وif_nametoindex(). تخصص RFC 3493 الحقل sin6_scope_id في بنية socket الخاصة بـIPv6، بينما تترك معنى ربطه بالواجهات للتنفيذ.

لا يكفي أن يقول السجل «قُبل النموذج». ينبغي حفظ bytes الإدخال، وإصدار parser والسياسة، وفحوص الطول والمحارف، والـindex الناتج، وهوية الواجهة في تلك اللحظة، والوجهة scoped، ونتيجة بناء socket، والملاحظة النهائية. إذا اختفت الواجهة بين العرض والاستعمال، يجب إظهار السباق والفشل؛ لا تُلصق موافقة قديمة بجسم جديد.

يفصل running code أربع دعاوى: قُبل النص، حُل الاسم، أُرسلت الحزمة، وأجاب الجهاز المقصود. علامة نجاح واحدة لا تكفي.

تنتهي سلطة الوسم عند العقدة

قاعدة الأمن واضحة: zone identifier ذو دلالة محلية فقط ولا يجب إرساله على السلك. والبرنامج الذي يحصل عليه من UI لا ينبغي أن يعيد نقله. تحذر RFC 4007 أيضاً من الثقة في عنوان non-global نصي يصل كبيانات، لأن الطرف البعيد لا يملك سلطة تعريف zones لدى المستقبل.

إزالة الوسم ليست حذفاً للمحاسبة. داخل المضيف تشرح علاقة الاسم بالـindex اختيار المسار. عند حد الشبكة تفقد هذه العلاقة صلاحيتها. تحمل الحزمة العنوان scoped ولا تحمل مفردات الواجهة المحلية. وإذا عرض sniffer الـzone كتعليق محلي، فعلى الدليل أن يميز metadata عن bytes المرسلة.

يمنع ذلك أيضاً وهْم reproducibility. نسخ eth0 بين الأجهزة لا ينسخ الكابل أو network namespace. يمكن إعادة استعمال الاسم، كما يمكن تدوير الرقم بعد reboot. يحتاج السجل التاريخي إلى host ووقت وسياق lifecycle، ومع ذلك لا يدعي إلا أن هذا المضيف حل هذا النص بهذه الصورة في هذه اللحظة.

الحقل المفتوح يحتاج تحققاً حسب البيئة

لا تحدد RFC 4007 طولاً أقصى أو character set موحداً. توصي RFC 9844 بحد يتناسب مع النظام، وغالباً حد أسماء interfaces، وبفحوص محارف محلية. يجب رفض ASCII NUL كي لا تختلف المراحل اللاحقة حول نهاية السلسلة.

تشمل المخاطر double decoding للفاصل، وnormalization، ومحارف shell، واختلاف عرض log، وقائمة interfaces التي تصبح قديمة قبل التنفيذ. لا تعالج regex واحدة كل المنصات. المسار الآمن يحفظ الإدخال الدقيق، يتحقق وفق النظام وطريقة الاستدعاء، يحل الاسم قرب الاستعمال، ويسجل التمثيل والنتيجة.

أظهرت تجربة URI أين لا توجد الإجابة

حاولت RFC 6874 وضع zone داخل IPv6 literal في URI. يسجل وضعها الآن إبطالها. تقول RFC 9844 إن مطوري browsers وجدوا النهج غير عملي، فتتراجع عن تعديل RFC 3986 وتستبدله بمتطلب UI عام، وتحذف المراجع من RFC 7622 وRFC 8089.

هذا تضييق صحي للمعيار أمام واقع التنفيذ. وتصرح RFC 9844 بأنها لا تحل نموذج HTTP origin في RFC 6454، وأن أحكامها لا تنطبق على URI يجلبها browser. لا يتجاوز هذا التقرير ذلك النطاق.

اختبر الظهور ثم الاختفاء

يبدأ الاختبار بواجهتين تفسران النص link-local نفسه، ويتحقق من الاختيار الصريح ورفض zone المجهولة وعدم fallback العشوائي. ثم تُعاد تسمية الواجهة أو إزالتها بين الاختيار والاستعمال، ويُختبر تدوير index بعد reboot، وتُرسل قيم طويلة وNUL وفواصل وUnicode ومحارف ذات معنى للـshell أو log.

بعد ذلك تُقارن الطبقات. يظهر الإيصال المحلي الـindex المستخدم، وتثبت packet capture غياب الاسم. لا يمنح نص بعيد سلطة zone محلية. فشل التحويل إيقاف واضح، لا إذن باختيار أية واجهة.

وفي النهاية يرى المشغّل حالات accepted وresolved وsent وanswered منفصلة. يضع المعيار الحد الأدنى، ويحتفظ المشغّل المحلي بالسياسة والاحتفاظ والrollback، ويقدم الكود الجاري الدليل.

حدود الدليل

لم يُختبر نظام تشغيل أو browser أو router أو طابعة أو sniffer أو عميل YANG أو شبكة بحرية. لم تُقَس معدلات الدعم أو الانتشار أو الأخطاء أو الحوادث. أمثلة RFC شرح للآلية وليست شهادة لإصدارات حالية.

النتيجة الثابتة بنيوية: قد تكون المعلومة ضرورية للفعل وغير صالحة كهوية مشتركة في الوقت نفسه. حفظها في الداخل ومنعها في الخارج تحكم واحد بوجهين.

المصادر