وسائل النقل في I2P
“النقل” في I2P هو طريقة للاتصال المباشر من نقطة إلى نقطة بين اثنين من router. يجب أن توفر وسائل النقل السرية والتكامل ضد الخصوم الخارجيين مع المصادقة على أن router المتصل به هو الذي يجب أن يتلقى رسالة معينة.
يدعم I2P عدة وسائل نقل في نفس الوقت. هناك ثلاث وسائل نقل مُطبقة حالياً:
كل منهما يوفر نموذج “اتصال”، مع المصادقة والتحكم في التدفق والإقرارات وإعادة الإرسال.
خدمات النقل
يوفر نظام النقل الفرعي في I2P الخدمات التالية:
- التسليم الموثوق لرسائل I2NP . تدعم وسائل النقل تسليم رسائل I2NP فقط. فهي ليست أنابيب بيانات عامة الغرض.
- التسليم المرتب للرسائل غير مضمون من قبل جميع وسائل النقل.
- الاحتفاظ بمجموعة من عناوين router، واحد أو أكثر لكل وسيلة نقل، والتي ينشرها router كمعلومات الاتصال العامة الخاصة به (RouterInfo). قد تتصل كل وسيلة نقل باستخدام أحد هذه العناوين، والتي قد تكون IPv4 أو (اعتبارًا من الإصدار 0.9.8) IPv6.
- اختيار أفضل وسيلة نقل لكل رسالة صادرة
- ترتيب الرسائل الصادرة حسب الأولوية في قائمة الانتظار
- تحديد عرض النطاق الترددي، الصادر والوارد على حد سواء، وفقًا لتكوين router
- إعداد وإنهاء اتصالات وسائل النقل
- تشفير الاتصالات من نقطة إلى نقطة
- صيانة حدود الاتصال لكل وسيلة نقل، وتنفيذ عتبات مختلفة لهذه الحدود، وإيصال حالة العتبة إلى router حتى يتمكن من إجراء تغييرات تشغيلية بناءً على الحالة
- فتح منافذ Firewall باستخدام UPnP (Universal Plug and Play)
- اجتياز NAT/Firewall التعاوني
- اكتشاف IP المحلي بطرق مختلفة، بما في ذلك UPnP، وفحص الاتصالات الواردة، وتعداد أجهزة الشبكة
- تنسيق حالة firewall و IP المحلي، والتغييرات في أي منهما، بين وسائل النقل
- إيصال حالة firewall و IP المحلي، والتغييرات في أي منهما، إلى router وواجهة المستخدم
- تحديد ساعة إجماع، والتي تُستخدم لتحديث ساعة router بشكل دوري، كنسخة احتياطية لـ NTP
- صيانة الحالة لكل نظير، بما في ذلك ما إذا كان متصلاً، وما إذا كان متصلاً مؤخرًا، وما إذا كان قابلاً للوصول في المحاولة الأخيرة
- تأهيل عناوين IP الصالحة وفقًا لمجموعة قواعد محلية
- احترام القوائم الآلية واليدوية للأقران المحظورين التي يحتفظ بها router، ورفض الاتصالات الصادرة والواردة إلى هؤلاء الأقران
عناوين النقل
يحتفظ نظام النقل الفرعي بمجموعة من عناوين router، كل منها يسرد طريقة النقل وعنوان IP والمنفذ. هذه العناوين تشكل نقاط الاتصال المعلنة، وينشرها router إلى قاعدة بيانات الشبكة. قد تحتوي العناوين أيضاً على مجموعة اختيارية من الخيارات الإضافية.
قد تنشر كل طريقة نقل عدة عناوين router متعددة.
السيناريوهات النموذجية هي:
- router لا يحتوي على عناوين منشورة، لذلك يُعتبر “مخفي” ولا يمكنه استقبال اتصالات واردة
- router محجوب بجدار حماية، وبالتالي ينشر عنوان SSU يحتوي على قائمة من النظراء المتعاونين أو “المقدمين” الذين سيساعدون في اجتياز NAT (انظر مواصفات SSU للتفاصيل)
- router غير محجوب بجدار حماية أو منافذ NAT مفتوحة؛ ينشر عناوين NTCP و SSU تحتوي على IP ومنافذ قابلة للوصول مباشرة.
اختيار النقل
نظام النقل يوصل رسائل I2NP فقط. النقل المختار لأي رسالة مستقل عن بروتوكولات الطبقة العليا والمحتويات (رسائل router أو العميل، سواء كان التطبيق الخارجي يستخدم TCP أو UDP للاتصال بـ I2P، سواء كانت الطبقة العليا تستخدم مكتبة التدفق أو datagrams ، إلخ).
لكل رسالة صادرة، يطلب نظام النقل “عروضاً” من كل وسيلة نقل. وسيلة النقل التي تقدم أقل قيمة (الأفضل) تفوز بالعرض وتستلم الرسالة للتسليم. يمكن لوسيلة النقل أن ترفض تقديم عرض.
ما إذا كان النقل يقدم عرضاً، وبأي قيمة، يعتمد على عوامل عديدة:
- إعداد تفضيلات النقل
- ما إذا كان النقل متصلاً بالفعل بالنظير
- عدد الاتصالات الحالية مقارنة بعتبات حدود الاتصال المختلفة
- ما إذا كانت محاولات الاتصال الأخيرة بالنظير قد فشلت
- حجم الرسالة، حيث أن وسائل النقل المختلفة لها حدود أحجام مختلفة
- ما إذا كان النظير يمكنه قبول الاتصالات الواردة لذلك النقل، كما هو معلن في RouterInfo الخاص به
- ما إذا كان الاتصال سيكون غير مباشر (يتطلب introducers) أم مباشر
- تفضيل النقل للنظير، كما هو معلن في RouterInfo الخاص به
بشكل عام، يتم اختيار قيم المزايدة بحيث يكون هناك router واحد فقط متصل بـ router آخر عبر وسيلة نقل واحدة في أي وقت. ومع ذلك، هذا ليس شرطاً إلزامياً.
وسائل النقل الجديدة والعمل المستقبلي
قد يتم تطوير وسائل نقل إضافية، بما في ذلك:
- نقل يشبه TLS/SSH
- نقل “غير مباشر” لأجهزة router التي لا يمكن الوصول إليها من قبل جميع أجهزة router الأخرى (شكل واحد من “المسارات المقيدة”)
- نقل قابل للإضافة متوافق مع Tor
يستمر العمل على تعديل حدود الاتصال الافتراضية لكل وسيلة نقل. تم تصميم I2P كـ"شبكة شبكية"، حيث يُفترض أن أي router يمكنه الاتصال بأي router آخر. قد يتم كسر هذا الافتراض من قبل routers تجاوزت حدود الاتصال الخاصة بها، وبواسطة routers الموجودة خلف جدران حماية حالة مقيدة (مسارات مقيدة).
حدود الاتصال الحالية أعلى بالنسبة لـ SSU مقارنة بـ NTCP، بناءً على افتراض أن متطلبات الذاكرة لاتصال NTCP أعلى من تلك الخاصة بـ SSU. ومع ذلك، نظراً لأن مخازن NTCP موجودة جزئياً في النواة ومخازن SSU موجودة في كومة Java، فإن هذا الافتراض صعب التحقق منه.
حلل Breaking and Improving Protocol Obfuscation وانظر كيف يمكن لحشو طبقة النقل أن يحسن الأمور.