Обзор
Это предложение о реализации двунаправленных туннелей в I2P.
Мотивация
i2pd собирается ввести двунаправленные туннели, которые будут строиться только через другие роутеры i2pd на данный момент. Для сети они будут выглядеть как обычные входящие и исходящие туннели.
Дизайн
Цели
- Уменьшить использование сети и ЦПУ за счет сокращения количества сообщений TunnelBuild
- Возможность немедленно узнать, если участник исчез
- Более точное профилирование и статистика
- Использование других даркнетов в качестве промежуточных узлов
Изменения туннелей
TunnelBuild
Туннели строятся так же, как и входящие туннели. Ответное сообщение не требуется. Существует специальный тип участника, называемый "вход", отмеченный флагом, служащий одновременно как IBGW и OBEP. Сообщение имеет такой же формат, как VaribaleTunnelBuild, но ClearText содержит разные поля::
in_tunnel_id
out_tunnel_id
in_next_tunnel_id
out_next_tunnel_id
in_next_ident
out_next_ident
layer_key, iv_key
Также будет содержаться поле, указывающее к какому даркнету принадлежит следующий узел, и дополнительная информация, если это не I2P.
TunnelTermination
Если узел хочет выйти, он создает сообщения TunnelTermination, шифрует их с помощью layer key и отправляет в направлении “in”. Если участник получает такое сообщение, он шифрует его своим layer key и отправляет следующему узлу. Как только сообщение достигает владельца туннеля, оно начинает расшифровываться от узла к узлу до получения незашифрованного сообщения. Он выясняет, какой узел исчез, и завершает туннель.