Scroll to navigation

ipv6(7) Miscellaneous Information Manual 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.

خيارات المقبس

يدعم IPv6 بعض خيارات المقبس الخاصة بالبروتوكول التي يمكن ضبطها باستخدام setsockopt(2) وقراءتها باستخدام getsockopt(2). مستوى خيار المقبس لـ IPv6 هو IPPROTO_IPV6. علامة عدد صحيح منطقي هي صفر عندما تكون خاطئة، وإلا فهي صحيحة.

تحويل مقبس AF_INET6 إلى مقبس من عائلة عناوين مختلفة. يُدعم AF_INET فقط حاليًا لذلك. يُسمح به فقط لمقابس IPv6 المتصلة والمرتبطة بعنوان v4 مُخطط على v6. الوسيطة هي مؤشر لعدد صحيح يحتوي على AF_INET. هذا مفيد لتمرير مقابس v4 المُخططة كواصفات ملفات إلى برامج لا تعرف كيفية التعامل مع واجهة برمجة تطبيقات IPv6.
التحكم في العضوية في مجموعات الإرسال المتعدد. الوسيطة هي مؤشر إلى struct ipv6_mreq.
getsockopt(): استرداد MTU المسار الحالي المعروف للمقبس الحالي. صالح فقط عندما يكون المقبس متصلاً. يُرجع عددًا صحيحًا.
setsockopt(): تعيين MTU لاستخدامه للمقبس. يُحد MTU بواسطة MTU الجهاز أو MTU المسار عند تمكين اكتشاف MTU المسار. الوسيطة هي مؤشر لعدد صحيح.
التحكم في اكتشاف MTU المسار على المقبس. انظر IP_MTU_DISCOVER في ip(7) للتفاصيل.
تعيين حد القفز للإرسال المتعدد للمقبس. الوسيطة هي مؤشر لعدد صحيح. -1 في القيمة يعني استخدام المبدئي للمسار، وإلا يجب أن يكون بين 0 و255.
تعيين الجهاز لحزم الإرسال المتعدد الصادرة على المقبس. يُسمح بهذا فقط لمقبس SOCK_DGRAM ومقبس SOCK_RAW. الوسيطة هي مؤشر لفهرس واجهة (انظر netdevice(7)) في عدد صحيح.
التحكم في ما إذا كان المقبس يرى حزم الإرسال المتعدد التي أرسلها بنفسه. الوسيطة هي مؤشر لمنطقي.
تعيين تسليم رسالة التحكم IPV6_PKTINFO على مخططات البيانات الواردة. تحتوي رسائل التحكم هذه على struct in6_pktinfo، وفقًا لـ RFC 3542. يُسمح به فقط لمقابس SOCK_DGRAM أو SOCK_RAW. الوسيطة هي مؤشر لقيمة منطقية في عدد صحيح.
تعيين تسليم رسائل التحكم لمخططات البيانات الواردة التي تحتوي على رؤوس تمديد من الحزمة المستلمة. يُسلم IPV6_RTHDR رأس التوجيه، ويُسلم IPV6_AUTHHDR رأس الاستيثاق، ويُسلم IPV6_DSTOPTS خيارات الوجهة، ويُسلم IPV6_HOPOPTS خيارات القفز، ويُسلم IPV6_FLOWINFO عددًا صحيحًا يحتوي على معرف التدفق، ويُسلم IPV6_HOPLIMIT عددًا صحيحًا يحتوي على عدد قفزات الحزمة. تحتوي رسائل التحكم على نفس نوع خيار المقبس. يمكن أيضًا تعيين كل خيارات الرأس هذه للحزم الصادرة بوضع رسالة التحكم المناسبة في مخزن التحكم لـ sendmsg(2). يُسمح به فقط لمقابس SOCK_DGRAM أو SOCK_RAW. الوسيطة هي مؤشر لقيمة منطقية.
التحكم في استلام خيارات الأخطاء غير المتزامنة. انظر IP_RECVERR في ip(7) للتفاصيل. الوسيطة هي مؤشر لمنطقي.
تمرير الحزم المُعاد توجيهها التي تحتوي على خيار تنبيه الموجه قفزة بقفزة إلى هذا المقبس. يُسمح به فقط لمقابس SOCK_RAW. لا تُعيد النواة توجيه الحزم المُستخلصة، وتقع مسؤولية إرسالها مرة أخرى على عاتق المستخدم. الوسيطة هي مؤشر لعدد صحيح. يشير عدد صحيح موجب إلى قيمة خيار تنبيه الموجه لاعتراضها. تُسلم الحزم التي تحمل خيار تنبيه الموجه مع حقل قيمة يحتوي على هذا العدد الصحيح إلى المقبس. يُعطل عدد صحيح سالب تسليم الحزم مع خيارات تنبيه الموجه إلى هذا المقبس.
تعيين حد القفز الأحادي للمقبس. الوسيطة هي مؤشر لعدد صحيح. -1 في القيمة يعني استخدام المبدئي للمسار، وإلا يجب أن يكون بين 0 و255.
إذا ضُبطت هذه العلامة على صحيح (غير صفري)، يُقيد المقبس بإرسال واستقبال حزم IPv6 فقط. في هذه الحالة، يمكن لتطبيق IPv4 وتطبيق IPv6 الربط بمنفذ واحد في نفس الوقت.
إذا ضُبطت هذه العلامة على خطأ (صفر)، يمكن استخدام المقبس لإرسال واستقبال حزم من وإلى عنوان IPv6 أو عنوان IPv6 مُخطط لـ IPv4.
الوسيطة هي مؤشر إلى قيمة منطقية في عدد صحيح.
القيمة المبدئية لهذه العلامة تُعرّف بمحتويات الملف /proc/sys/net/ipv6/bindv6only. القيمة المبدئية لذلك الملف هي 0 (خطأ).

الأخطاء

حاول المستخدم 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 مفقود.

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

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

انظر أيضًا

cmsg(3), ip(7)

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

ترجمة

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

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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

2 مايو 2024 صفحات دليل لينكس 6.9.1