ipv6(7)

الاسم
ipv6 - تنفيذ بروتوكول IPv6 في لينكس

موجز
#include <sys/socket.h>
#include <netinet/in.h>

tcp6_socket = socket(AF_INET6, SOCK_STREAM, 0);
raw6_socket = socket(AF_INET6, SOCK_RAW, protocol);
udp6_socket = socket(AF_INET6, SOCK_DGRAM, protocol);

الوصف
ينفذ لينكس 2.2 بروتوكول الإنترنت، الإصدار 6، اختيارياً. تحتوي صفحة الدليل هذه على وصف لواجهة برمجة التطبيقات الأساسية لـ IPv6 كما ينفذها نواة لينكس و glibc 2.1. تعتمد الواجهة على واجهة مقابس BSD؛ انظر socket(7).

تهدف واجهة برمجة تطبيقات IPv6 إلى أن تكون متوافقة إلى حد كبير مع واجهة برمجة تطبيقات IPv4 (انظر ip(7)). تُوصف الاختلافات فقط في صفحة الدليل هذه.

لربط مقبس AF_INET6 بأي عملية، يجب نسخ العنوان المحلي من المتغير in6addr_any الذي له نوع in6_addr. في التهيئات الثابتة، يمكن أيضًا استخدام IN6ADDR_ANY_INIT، والذي يتوسع إلى تعبير ثابت. كلاهما بترتيب بايت الشبكة.

عنوان الاسترجاع IPv6 (::1) متاح في المتغير العام in6addr_loopback. للتهيئات، يجب استخدام IN6ADDR_LOOPBACK_INIT.

يمكن معالجة اتصالات IPv4 باستخدام واجهة برمجة تطبيقات v6 عن طريق استخدام نوع العنوان v4 المُعيّن على v6؛ وبالتالي يحتاج البرنامج إلى دعم نوع واجهة برمجة التطبيقات هذا فقط لدعم كلا البروتوكولين. يُعالج هذا بشفافية بواسطة دوال معالجة العناوين في مكتبة C.

تشارك IPv4 و IPv6 مساحة المنفذ المحلي. عندما تحصل على اتصال IPv4 أو حزمة إلى مقبس IPv6، سيُعيّن عنوان مصدره إلى v6.

  تنسيق العنوان
    struct sockaddr_in6 {
        sa_family_t     sin6_family;   /* AF_INET6 */
        in_port_t       sin6_port;     /* port number */
        uint32_t        sin6_flowinfo; /* IPv6 flow information */
        struct in6_addr sin6_addr;     /* IPv6 address */
        uint32_t        sin6_scope_id; /* Scope ID (new in Linux 2.4) */
    };

    struct in6_addr {
        unsigned char   s6_addr[16];   /* IPv6 address */
    };

يُضبط sin6_family دائماً على AF_INET6؛ sin6_port هو منفذ البروتوكول (انظر sin_port في ip(7))؛ sin6_flowinfo هو معرف تدفق IPv6؛ sin6_addr هو عنوان IPv6 ذو 128 بت. sin6_scope_id هو معرف يعتمد على نطاق العنوان. إنه جديد في لينكس 2.4. يدعمه لينكس فقط للعناوين المحلية للرابط، في هذه الحالة يحتوي sin6_scope_id على فهرس الواجهة (انظر netdevice(7))

يدعم IPv6 عدة أنواع من العناوين: أحادي الإرسال لعنونة مضيف واحد، متعدد الإرسال لعنونة مجموعة من المضيفين، أي إرسال لعنونة أقرب عضو في مجموعة من المضيفين (غير منفذ في لينكس)، IPv4 على IPv6 لعنونة مضيف IPv4، وأنواع عناوين محجوزة أخرى.

ترميز العنوان لـ IPv6 هو مجموعة من 8 أرقام سداسية عشرية مكونة من 4 أرقام، مفصولة بـ ':'. "::" يرمز إلى سلسلة من 0 بت. العناوين الخاصة هي ::1 للاسترجاع و ::FFFF:<عنوان IPv4> لـ IPv4 المُعيّن على IPv6.

مساحة المنفذ لـ IPv6 مشتركة مع IPv4.

  خيارات المقبس
انظر IPPROTO_IPV6(2const).

الأخطاء

ENODEV
    حاول المستخدم bind(2) إلى عنوان IPv6 محلي للرابط، لكن sin6_scope_id في بنية sockaddr_in6 المقدمة ليس فهرس واجهة صالحاً.

الإصدارات
سيكسر لينكس 2.4 التوافق الثنائي لـ sockaddr_in6 للمضيفات ذات 64 بت عن طريق تغيير محاذاة in6_addr وإضافة حقل sin6_scope_id إضافي. تبقى واجهات النواة متوافقة، لكن البرنامج الذي يتضمن sockaddr_in6 أو in6_addr في بنى أخرى قد لا يكون كذلك. هذه ليست مشكلة للمضيفات ذات 32 بت مثل i386.

حقل sin6_flowinfo جديد في لينكس 2.4. يُمرر/يُقرأ بشفافية بواسطة النواة عندما يحتوي طول العنوان المُمرر عليه. بعض البرامج التي تمرر مخزناً عنوانياً أطول ثم تتحقق من طول العنوان الصادر قد تتعطل.

ملاحظات
بنية sockaddr_in6 أكبر من sockaddr العام. البرامج التي تفترض أن جميع أنواع العناوين يمكن تخزينها بأمان في struct sockaddr تحتاج إلى التغيير لاستخدام struct sockaddr_storage بدلاً من ذلك.

خيارات المقبس SOL_IP، SOL_IPV6، SOL_ICMPV6، وغيرها من SOL_* هي متغيرات غير محمولة من IPPROTO_*. انظر أيضًا ip(7).

العلل
واجهة برمجة تطبيقات IPv6 الموسعة كما في RFC 2292 منفذة جزئياً فقط حالياً؛ على الرغم من أن نواة 2.2 لديها دعم شبه كامل لاستقبال الخيارات، فإن وحدات الماكرو لتوليد خيارات IPv6 مفقودة في glibc 2.1.

دعم IPSec لرؤوس EH و AH مفقود.

إدارة تسمية التدفق غير مكتملة وغير موثقة هنا.

صفحة الدليل هذه غير مكتملة.

انظر أيضًا
IPPROTO_IPV6(2const), ip(7)

RFC 2553: واجهة برمجة تطبيقات IPv6 الأساسية؛ يحاول لينكس أن يكون متوافقاً مع هذا. RFC 2460: مواصفات IPv6.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.