تحسينات نقل IPv6

Proposal 158
مغلق
Author zzz, orignal
Created 2021-03-19
Last Updated 2021-04-26
Target Version 0.9.50

ملاحظة

نشر الشبكة والاختبار قيد التقدم. عرضة لتعديلات طفيفة.

نظرة عامة

الغرض من هذه المقترح هو تنفيذ تحسينات على وسائل النقل SSU وNTCP2 لـ IPv6.

الدافع

مع نمو انتشار IPv6 حول العالم وزيادة انتشار إعدادات IPv6 فقط (خاصة على الأجهزة المحمولة)، نحتاج إلى تحسين دعمنا لـ IPv6 وإزالة الافتراضات بأن جميع الأجهزة الراوتير تدعم IPv4.

فحص الاتصال

عند اختيار الأقران لإنشاء الأنفاق، أو اختيار مسارات OBEP/IBGW لتوجيه الرسائل، يساعد ذلك في حساب ما إذا كان يمكن للموجه A الاتصال بالموجه B. بشكل عام، هذا يعني تحديد ما إذا كان A لديه القدرة على الإرسال الخارجي لنوع النقل والعنوان (IPv4/v6) الذي يطابق أحد العناوين الداخل المحددة من B.

ومع ذلك، في كثير من الحالات لا نعرف قدرات A وعلينا افتراضها. إذا كان A مخفياً أو خلف جدار ناري، فإن العناوين لا تُنشر، ولا نملك معرفة مباشرة - لذلك نفترض أنه يدعم IPv4 ولا يدعم IPv6. الحل هو إضافة “قدرات” أو قدرات جديدة في معلومات الموجه للإشارة إلى القدرة على الإرسال الخارجي لـ IPv4 وIPv6.

مقدمو IPv6

تحتوي مواصفاتنا SSU وSSU-SPEC على أخطاء وعدم تناسق بشأن ما إذا كانت دعم مقدمي IPv6 لمقدمات IPv4. على أي حال، لم يتم تنفيذ ذلك في Java I2P أو i2pd. يجب تصحيح هذا.

مقدمات IPv6

توضح مواصفاتنا SSU وSSU-SPEC بوضوح أن مقدمات IPv6 غير مدعومة. كان هذا تحت افتراض أن IPv6 ليس خلف جدار ناري. من الواضح أن هذا ليس صحيحًا، ونحتاج إلى تحسين دعم أجهزة التوجيه IPv6 الموجودة خلف جدار ناري.

مخططات المقدمة

الأسطورة: —– هو IPv4, ====== هو IPv6

حاليًا فقط IPv4:

      Alice                         Bob                  Charlie
  RelayRequest ---------------------->
       <-------------- RelayResponse    RelayIntro ----------->
       <-------------------------------------------- HolePunch
  SessionRequest -------------------------------------------->
       <-------------------------------------------- SessionCreated
  SessionConfirmed ------------------------------------------>
  Data <--------------------------------------------------> Data

تقديم IPv4، مقدم IPv6

Alice                         Bob                  Charlie
  RelayRequest ======================>
       <============== RelayResponse    RelayIntro ----------->
       <-------------------------------------------- HolePunch
  SessionRequest -------------------------------------------->
       <-------------------------------------------- SessionCreated
  SessionConfirmed ------------------------------------------>
  Data <--------------------------------------------------> Data

تقديم IPv6، مقدم IPv6

Alice                         Bob                  Charlie
  RelayRequest ======================>
       <============== RelayResponse    RelayIntro ===========>
       <============================================ HolePunch
  SessionRequest ============================================>
       <============================================ SessionCreated
  SessionConfirmed ==========================================>
  Data <==================================================> Data

تقديم IPv6، مقدم IPv4

Alice                         Bob                  Charlie
  RelayRequest ---------------------->
       <-------------- RelayResponse    RelayIntro ===========>
       <============================================ HolePunch
  SessionRequest ============================================>
       <============================================ SessionCreated
  SessionConfirmed ==========================================>
  Data <==================================================> Data

التصميم

هناك ثلاثة تغييرات يجب تنفيذها.

  • إضافة قدرات “4” و"6" إلى قدرات عنوان الموجه للإشارة إلى دعم الإرسال الخارجي لـ IPv4 وIPv6
  • إضافة دعم لمقدمات IPv4 عبر مقدمي IPv6
  • إضافة دعم لمقدمات IPv6 عبر مقدمي IPv4 وIPv6

المواصفات

قدرات 4/6

تم تنفيذ هذا في الأصل دون اقتراح رسمي، لكنه مطلوب لـ مقدمات IPv6، لذلك ندرجه هنا. انظر أيضًا CAPS.

تم تعريف قدرات “4” و"6" جديدة. ستتم إضافة هذه القدرات الجديدة إلى خاصية “caps” في عنوان الموجه، وليس في قدرات معلومات الموجه. حاليًا، ليس لدينا خاصية “caps” محددة لـ NTCP2. عنوان SSU مع مقدمي هو حاليًا، بتعريفه، IPv4. لا ندعم مقدمة IPv6 على الإطلاق. ومع ذلك، فإن هذا المقترح متوافق مع مقدمات IPv6. انظر بالأسفل.

بالإضافة إلى ذلك، قد يدعم الموجه الاتصال عبر شبكة تراكب مثل I2P-over-Yggdrasil، ولكن لا يرغب في نشر عنوان، أو أن هذا العنوان لا يحتوي على تنسيق IPv4 أو IPv6 قياسي. يجب أن يكون هذا النظام القدرات الجديد مرنًا بما يكفي لدعم هذه الشبكات أيضًا.

نقوم بتعريف التغييرات التالية:

NTCP2: إضافة خاصية “caps”

SSU: إضافة دعم لعنوان الموجه بدون مضيف أو مقدمي، للإشارة إلى دعم الإرسال الخارجي لـ IPv4 أو IPv6 أو كلاهما.

كلا النقلين: تعريف قيم القدرات الكمالية:

  • “4”: دعم IPv4
  • “6”: دعم IPv6

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

حالات الاستخدام والأمثلة

SSU:

SSU مع مضيف: 4/6 اختياري، ولا يتم تضمين أكثر من واحدة. مثال: SSU caps=“4” host=“1.2.3.4” key=… port=“1234”

SSU للإرسال الخارجي فقط لواحدة، الأخر منشور: قدرات فقط، 4/6. مثال: SSU caps=“6”

SSU مع مقدمي: لا يتم الدمج. 4 أو 6 مطلوب. مثال: SSU caps=“4” iexp0=… ihost0=… iport0=… itag0=… key=…

SSU مخفي: قدرات فقط، 4 أو 6 أو 46. متعدد مسموح. لا حاجة لعناوين اثنين واحد مع 4 وآخر مع 6. مثال: SSU caps=“46”

NTCP2:

NTCP2 مع مضيف: 4/6 اختياري، ولا يتم تضمين أكثر من واحدة. مثال: NTCP2 caps=“4” host=“1.2.3.4” i=… port=“1234” s=… v=“2”

NTCP2 للإرسال الخارجي فقط لواحدة، الأخرى منشورة: قدرات، s، v فقط، 4/6/y، مسموح متعدد. مثال: NTCP2 caps=“6” i=… s=… v=“2”

NTCP2 مخفي: قدرات، s، v فقط 4/6، متعدد مسموح لا حاجة لعناوين اثنين واحد مع 4 وآخر مع 6. مثال: NTCP2 caps=“46” i=… s=… v=“2”

مقدمي IPv6 لـ IPv4

التغييرات التالية مطلوبة لتصحيح الأخطاء وعدم الاتساق في المواصفات. لقد وصفنا ذلك أيضًا بـ “الجزء 1” من المقترح.

تغييرات المواصفات

SSU يقول حاليًا (ملاحظات IPv6):

يدعم IPv6 اعتبارًا من الإصدار 0.9.8. قد تكون عناوين النشر إما IPv4 أو IPv6، ويمكن أن يكون الاتصال بين Alice وBob عبر IPv4 أو IPv6.

إضافة ما يلي:

بينما تم تغيير المواصفات اعتبارًا من الإصدار 0.9.8، لم يكن الاتصال بين Alice وBob عبر IPv6 مدعومًا حتى الإصدار 0.9.50. نشرت الإصدارات الأقدم من أجهزة التوجيه جافا بطريقة خاطئة قدرات “C” لعناوين IPv6، حتى وإن لم تكن في الواقع تعمل كمقدم عبر IPv6. لذلك، يجب أن تثق أجهزة التوجيه فقط في قدرة “C” على عنوان IPv6 إذا كان إصدار الجهاز 0.9.50 أو أعلى.

SSU-SPEC يقول حاليًا (طلب التوجيه):

يتم تضمين عنوان IP فقط إذا كان مختلفًا عن عنوان المصدر ورقم المنفذ للحزمة. في التنفيذ الحالي، طول IP دائماً 0 ورقم المنفذ دائماً 0، ويجب أن يستخدم المستلم عنوان المصدر ورقم المنفذ للحزمة. يمكن إرسال هذه الرسالة عبر IPv4 أو IPv6. إذا كان IPv6، يجب أن يتضمن Alice عنوان IPv4 ورقم المنفذ.

إضافة ما يلي:

يجب تضمين عنوان IP ورقم المنفذ لتقديم عنوان IPv4 عند إرسال هذه الرسالة عبر IPv6. يتم دعم هذا اعتبارًا من الإصدار 0.9.50.

مقدمات IPv6

تحتوي جميع الرسائل التوجيهية الثلاثة لـ SSU (RelayRequest وRelayResponse وRelayIntro) على حقول طول IP لتحديد طول عنوان IP (Alice أو Bob أو Charlie) الذي يليه.

لذلك، لا حاجة لتغيير تنسيق الرسائل. فقط تغييرات نصية على المواصفات، مشيرة إلى أن عناوين IP بطول 16 بايت مسموحة.

التغييرات التالية مطلوبة للمواصفات. لقد وصفنا ذلك أيضًا بـ “الجزء 2” من المقترح.

تغييرات المواصفات

SSU يقول حاليًا (ملاحظات IPv6):

الاتصال بين Bob وCharlie وبين Alice وCharlie عن طريق IPv4 فقط.

SSU-SPEC يقول حاليًا (طلب التوجيه):

لا توجد خطط لتنفيذ التوجيه لـ IPv6.

تغيير ليقول:

يتم دعم التوجيه لـ IPv6 اعتبارًا من الإصدار 0.9.xx

SSU-SPEC يقول حاليًا (استجابة التوجيه):

يجب أن يكون عنوان IP لشخصية Charlie هو IPv4، حيث أن هذا هو العنوان الذي سترسل إليه Alice طلب الجلسة بعد ثقبة الجدار. لا توجد خطط لتنفيذ التوجيه لـ IPv6.

تغيير ليقول:

يمكن أن يكون عنوان IP لشخصية Charlie هو IPv4 أو، اعتبارًا من الإصدار 0.9.xx، IPv6. هذا هو العنوان الذي سترسل إليه Alice طلب الجلسة بعد ثقبة الجدار. يتم دعم التوجيه لـ IPv6 اعتبارًا من الإصدار 0.9.xx

SSU-SPEC يقول حاليًا (مقدمة التوجيه):

عنوان IP لـAlice هو دائمًا 4 بايت في التنفيذ الحالي، لأن Alice تحاول الاتصال بـCharlie عبر IPv4. يجب إرسال هذه الرسالة عبر اتصال IPv4، لأن هذا هو السبيل الوحيد الذي يعرف Bob فيه عنوان IPv4 لـCharlie للعودة إلى Alice في استجابة التوجيه.

تغيير ليقول:

بالنسبة لـ IPv4، عنوان IP لـAlice يكون دائمًا 4 بايت، لأن Alice تحاول الاتصال بـCharlie عبر IPv4. اعتبارًا من الإصدار 0.9.xx، يتم دعم IPv6، ويمكن أن يكون عنوان IP لـAlice 16 بايت.

بالنسبة لـ IPv4، يجب إرسال هذه الرسالة عبر اتصال IPv4، لأن هذا هو السبيل الوحيد الذي يعرف Bob فيه عنوان IPv4 لـCharlie للعودة إلى Alice في استجابة التوجيه. اعتبارًا من الإصدار 0.9.xx، يتم دعم IPv6، ويمكن إرسال هذه الرسالة عبر اتصال IPv6.

إضافة أيضًا:

اعتبارًا من الإصدار 0.9.xx، يجب أن يحتوي أي عنوان SSU منشور مع مقدمي على “4” أو “6” في خيار “caps”.

الانتقال

يجب على جميع الأجهزة القديمة تجاهل خاصية القدرات في NTCP2، والشخصيات القدرات غير المعروفة في خاصية القدرات SSU.

أي عنوان SSU مع مقدمي لا يحتوي على قدرات “4” أو “6” يفترض أنه إعدادات IPv4 فقط.