Обзор
Это предложение добавляет опцию I2CP для исходящих туннелей, которая заставляет туннели быть выбраны или построены таким образом, чтобы OBEP соответствовал одному из IBGWs из LeaseSet для целевой Destination.
Мотивация
Большинство маршрутизаторов I2P используют форму отбрасывания пакетов для управления перегрузками. Реализация по умолчанию использует стратегию WRED, учитывающую как размер сообщения, так и расстояние передачи (см. документацию tunnel throttling). Из-за этой стратегии основным источником потери пакетов является OBEP.
Дизайн
При отправке сообщения отправитель выбирает или строит туннель с OBEP, который является тем же маршрутизатором, что и один из IBGWs получателя. Таким образом, сообщение будет выходить прямо из одного туннеля и попадать в другой, без необходимости пересылки через сеть между ними.
Последствия для безопасности
Этот режим фактически означает, что получатель выбирает OBEP отправителя. Чтобы сохранить текущую конфиденциальность, этот режим будет заставлять строить исходящие туннели на один прыжок длиннее, чем указано в опции outbound.length I2CP (с возможностью того, что последний прыжок будет находиться вне быстрой категории отправителя).
Спецификация
Добавлена новая опция I2CP в спецификацию I2CP:
outbound.matchEndWithTarget
Boolean
Значение по умолчанию: зависящее от случая
Если установлено в true, маршрутизатор будет выбирать исходящие туннели для сообщений, отправляемых в течение этой сессии, таким образом, чтобы OBEP туннеля совпадал с одним из IBGWs целевой Забрасывания. Если такой туннель не существует, маршрутизатор его построит.
Совместимость
Обратная совместимость гарантируется, поскольку маршрутизаторы всегда могут отправлять сообщения самим себе.
Реализация
Java I2P
Построение туннеля и отправка сообщений в настоящий момент это отдельные подсистемы:
BuildExecutor знает только об опциях outbound.* пула исходящих туннелей и не имеет видимости по поводу их использования.
OutboundClientMessageOneShotJob может выбрать туннель только из существующего пула; если поступает сообщение клиента и нет исходящих туннелей, маршрутизатор отбрасывает сообщение.
Реализация этого предложения потребует разработки способа взаимодействия этих двух подсистем.
i2pd
Тестовая реализация завершена.
Производительность
Это предложение имеет различные эффекты на задержку, время обхода и потерю пакетов:
Вероятно, в большинстве случаев, этот режим будет требовать построения нового туннеля при первом сообщении, а не использования существующего, что вызывает задержку.
Для стандартных туннелей, OBEP может потребоваться найти и подключиться к IBGW, что добавляет задержку, увеличивающую время первого обхода (так как это происходит после отправки первого пакета). Используя этот режим, OBEP потребуется найти и подключиться к IBGW во время построения туннеля, добавляя такую же задержку, но уменьшая время первого обхода (так как это происходит до отправки первого пакета).
В настоящее время стандартный VariableTunnelBuild размер составляет 2641 байт. Таким образом, ожидается, что этот режим приведет к меньшей потерям пакетов для средних размеров сообщений, превышающих это значение.
Необходимы дальнейшие исследования для изучения этих эффектов, чтобы решить, какие стандартные туннели получат выгоду от включения этого режима по умолчанию.