نظرة عامة
يمكن أن تتوقف اتصالات العميل في البث عندما تُفقد تأكيدات التسليم بصمت. يقوم المرسل بإعادة الإرسال حتى يتم استلام تأكيد أو حتى يتم قطع الاتصال، دون وجود وسيلة موثوقة للتحقق من وصول التأكيدات إلى الطرف الآخر. يضيف هذا الاقتراح بتة علامة جديدة إلى حقل العلامات في SendMessageExpiresMessage بحيث يمكن للعميل أن يوجه الموجه باختيار نفق صادر مختلف للرسائل اللاحقة لنفس الوجهة. يستخدم بروتوكول البث هذه البتة لبدء تبديل النفق عند اكتشاف توقف الاتصال.
المؤثرات
يجب أن يؤدي توفر حالتين إلى دفع العميل لتفعيل العلم في الرسالة الصادرة التالية. وتُقاس هاتان الحالتان عند طبقة البث.
الجانب المرسِل
لم يتم استلام أي تأكيد خلال فترة إعادة الإرسال الحالية الخاصة بالعميل.
الجانب المستقبل
لقد لاحظ المستلم أن الطرف البعيد يعيد إرسال نفس البيانات أكثر من مرة، مما يشير إلى أن تأكيدات الاستلام الخاصة به لا تصل إلى الطرف البعيد. يجب على المستلم تفعيل هذا العلم في رسالة I2CP الصادرة التالية له، بحيث تصل تأكيدات الاستلام إلى الطرف البعيد عبر مسار مختلف. يجب على المستلم الانتظار حتى: (1) يتلقى نسخة مكررة، (2) يُرسل على الأقل تأكيد استلام واحد، و(3) يعيد الطرف البعيد الإرسال مرة أخرى قبل تفعيل العلم.
للتقليل من هجمات الربط الزمني، يجب على العميل ألا يضبط العلم أكثر من مرة واحدة في كل فترة زمنية مدتها 10 ثوانٍ لكل اتصال. كما ينبغي للعميل أيضًا تأخير ضبط العلم بمقدار تذبذب (jitter) يتم اختياره بشكل منتظم من المجال [0, min(T/4, 2000ms)]، حيث تمثل T مهلة إعادة الإرسال الحالية للعميل بالميللي ثانية، وذلك بعد اكتشاف حالة التوقف، لتقليل دقة الربط الزمني.
المواصفات
يحتل حقل العلامات في SendMessageExpiresMessage البايتين العلويين بعد حقل التاريخ (إعادة تعريف اعتبارًا من الإصدار 0.8.4) ويتم إرساله بتنسيق big-endian. العلامة 15 حاليًا غير مستخدمة؛ ويعرّف هذا الاقتراح هذه العلامة.
ترتيب البتات: 15…0
| بت | الاسم | الوصف |
|---|---|---|
| 15 | SWITCH_OUTBOUND_TUNNEL | إذا كانت القيمة 1، فيجب على الموجه اختيار نفق خروج مختلف من مجموعته للرسائل اللاحقة الموجهة إلى هذا الوجهة. إذا لم يكن هناك نفق بديل متاح، يتم تجاهل هذه العلامة تلقائيًا دون إشعار. لا يجوز للموجه إغلاق أو سحب النفق السابق المستخدم فقط لأن هذه العلامة كانت مضبوطة. |
| يتم تعيين هذه العلامة تلقائيًا على 0. يجب على الراوترات التي لا تنفذها تجاهلها دون حدوث خطأ. |
ملاحظات التنفيذ
عند ضبط SWITCH_OUTBOUND_TUNNEL، يجب على الموجه اختيار نفق بشكل عشوائي ومتساوٍ من مجموعة النفق الخارجة، مع استثناء:
- النفق المستخدم حاليًا في هذه الجلسة، و
- النفق الفاشل الوحيد الأكثر حدوثًا في المجموعة، إن وُجد.
لا يجوز لأي مقاييس أخرى لصحة النفق، أو أوقات البناء، أو تاريخ الاختيار أن تؤثر على الاختيار، لأن الاختيار المرجح قد يفضّل مهاجمي الهوية الزائفة (sybil). إذا لم يحتوِ المجموعة على نفق مؤهل بعد هذه الاستثناءات، يتم تجاهل العلم بصمت.
هذا العلم لا يستدعي رسائل نفق إضافية؛ قد يؤدي التبديل بين الأنفاق إلى تغيير زمن الوصول الظاهري. ويمنع الحد الأقصى لمعدل 10 ثوانٍ لكل اتصال (انظر المشغلات) التبديل المفرط.
اعتبارات الت匿名ية
تُنقل العلامات في SendMessageExpiresMessage عبر واجهة I2CP، وهي واجهة محلية بين العميل وموجهه الخاص. ولا يمكن ملاحظة هذه العلامات من قِبل مراقبين الشبكة.
تتمثل مخاطر الت匿名 في نمط المرور: يمكن للخصم الذي يمتلك رؤية عبر نقاط نهاية نفق متعددة مراقبة متى تتغير استخدامات النفق.
يؤدي التبديل بين الأنفاق الصادرة كاستجابة مباشرة للتوقف من جانب العميل إلى إنشاء نمط سلوكي يمكن اكتشافه. وهناك متجهان ملموسان للمراقبة:
هجوم سيبل على المحطات الأولى للنفق الصادر
يُشاهد القفزه الأولى لكل نفق صادر كل حركة المرور الداخلة لذلك النفق من موجه المرسل. يلاحظ الخصم الذي يتحكم بالقفزة الأولى لأكثر من نفق واحد في مجموعة النفق الخاصة بالمرسل، توقف حركة المرور على قفزة أولى وبدء حركتها على قفزة أولى أخرى ضمن فترة زمنية قريبة، مما يربط كلا النفقين بالمرسل نفسه. ومع مجموعة مكونة من N نفق، فإن الخصم الذي يتحكم بـ K من القفزات الأولى لديه احتمال مقداره K/N لمراقبة أي حدث تبديل معين.
توقيت فجوة المرور
أثناء التوقف، لا يُرسل العميل بيانات جديدة، وبالتالي يصبح النفق الصادر القديم صامتًا. وعند حدوث التبديل، يستأنف المرور عبر مسار مختلف. يمكن للخصم الذي يمتلك موقع مراقبة على موجه المرسل — مثل مزود شبكة المرسل، أو العقدة الأولى نفسها — ملاحظة نمط الصمت متبوعًا بالاستئناف. كما تُسرب مدة الفجوة تقديرًا لقيمة المهلة الحالية لإعادة الإرسال الخاصة بالعميل.
يجب أن تمتثل العملاء لمتطلبات تحديد المعدل والتقلب (rate-limiting and jitter) الواردة في Triggers.