Přehled
Tento návrh se týká implementace obousměrných tunelů v I2P.
Motivace
i2pd hodlá zavést obousměrné tunely, které budou prozatím budovány pouze přes jiné směrovače i2pd. Pro síť se budou jevit jako běžné vstupní a výstupní tunely.
Návrh
Cíle
- Snížit využití sítě a CPU snížením počtu zpráv TunnelBuild
- Schopnost okamžitě zjistit, zda účastník odešel.
- Přesnější profilování a statistiky
- Použití jiných darknetů jako mezilehlých peerů
Úpravy tunelů
TunnelBuild
Tunely jsou budovány stejným způsobem jako vstupní tunely. Není vyžadována žádná odpověď. Existuje speciální typ účastníka nazývaný "entrance" označený vlajkou, který slouží jako IBGW a OBEP současně. Zpráva má stejný formát jako VaribaleTunnelBuild, ale ClearText obsahuje různá pole::
in_tunnel_id
out_tunnel_id
in_next_tunnel_id
out_next_tunnel_id
in_next_ident
out_next_ident
layer_key, iv_key
Bude také obsahovat pole zmiňující, k jakému darknetu patří další peer, a nějaké dodatečné informace, pokud to není I2P.
TunnelTermination
Pokud chce peer odejít, vytvoří zprávy TunnelTermination, zašifruje je s pomocí klíče vrstvy a odešle ve směru “in”. Pokud účastník obdrží takovou zprávu, znovu ji zašifruje svým klíčem vrstvy a odešle dalšímu peerovi. Jakmile zpráva dosáhne majitele tunelu, začne ji dešifrovat peer po peeru, dokud se nedostane k nezašifrované zprávě. Zjistí, který peer odešel, a ukončí tunel.