الخلاصة

  • احتفظت دوال المقابس الأساسية بصيغتها لأنها تمرر مؤشراً معتماً إلى العنوان وطوله. ومع ذلك استلزم IPv6 عائلة PF_INET6 وبنية sockaddr_in6 وأدوات جديدة لتحويل العناوين وحل الأسماء.
  • استمرار برامج PF_INET القديمة مع أقران IPv4 يختلف عن تمثيل برنامج PF_INET6 الجديد لقرين IPv4 بعنوان IPv6 معيّن. ولا تثبت أي من الحالتين نجاح خدمة IPv6.

تظهر المشكلة بوضوح عند تسليم مقبس مفتوح إلى برنامج آخر. يعرف المستقبِل كيف يستدعي getpeername()، لكنه قد يقرأ القيمة المعادة كبنية sockaddr_in بينما هي sockaddr_in6. بقي فعل الاستدعاء مألوفاً وتغير معنى البايتات. ناقش RFC 2133 هذا المشهد في أبريل 1997. وهو نص معلوماتي أبطله لاحقاً RFC 2553، لذا قيمته هنا تاريخية لا بوصفه دليلاً حاضراً للبرمجة.

كان حجم العنوان أول حد فاصل: 32 بت في IPv4 و128 بت في IPv6. حملت دوال المقابس العنوان عبر مؤشر وطول مستقل، فأمكن الإبقاء على صيغة bind() وconnect() وsendto(). لكن الفراغ في sockaddr_in لم يكف لعنوان IPv6 كاملاً مع العائلة والمنفذ. لذلك عرّف النص AF_INET6 وPF_INET6 وبنية sockaddr_in6، وأضاف آليات أسماء وتحويل بين الشكل الثنائي والنصي. حتى نسختا BSD 4.3 و4.4 اختلفتا في ترتيب حقلي الطول والعائلة. ثبات اسم الدالة لا يصلح مخزناً ثابت الحجم ولا افتراضاً قديماً بشأن ترتيب الحقول.

حمل الوعد الأول عبء الماضي: على النظام الموسع أن يبقي PF_INET وsockaddr_in صالحين، بحيث تواصل البرامج القديمة، مصدراً وملفاً تنفيذياً، الحديث مع عقد IPv4. لم يعد ذلك الملف يفهم IPv6 تلقائياً. أما الوعد الثاني فخُصص للبرامج الجديدة: يستطيع مقبس PF_INET6 حمل عنوان قرين IPv4 في sockaddr_in6 على صورة ::FFFF:<عنوان IPv4>. هذه صيغة تمثيل داخل واجهة التطبيق؛ لا تُثبت أن القرين أو الحزم استخدمت IPv6 على الشبكة.

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

وكانت IPV6_ADDRFORM محاولة تاريخية لمعالجة تسليم المقبس بين العمليات. تسمح بتغيير الصورة التي تعرض بها الاستدعاءات اللاحقة عنوان مقبس مفتوح بوصفه PF_INET أو PF_INET6. لا يجوز التخفيض إلى PF_INET إلا إذا كانت جميع العناوين غير العامة المرتبطة به عناوين IPv4 معيّنة. إذن حالة النواة الفعلية تقيد التغيير؛ ليست المسألة إعادة تسمية. وبما أن المواصفة أصبحت متقادمة، فلا ينبغي افتراض توافر هذا الخيار بالطريقة نفسها في الأنظمة الحديثة.

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

تساعد مقالة Lu Heng عن أولوية الشيفرة العاملة على صياغة السؤال التحريري عن الدليل التشغيلي، لكنها ليست مصدراً للوقائع التقنية في هذا الموضوع. يسندها نص RFC وسجل حالته.

المصادر: RFC 2133، سجل RFC Editor، وRFC 2553.