Comme pour les VPN ou les darknet, I2P exploite la tunnelisation pour fournir un « réseau dans le réseau ». Contrairement à la majeure partie des réseaux anonymes, I2P se concentre sur une gestion autonome du réseau et à la fourniture d'une couche de transport anonyme. Seul, I2P ne fournit pas les services que l'on peut trouver sur Internet (courriel, téléchargement, web, etc.). I2P est toutefois livré avec la possibilité d'effectuer des mails et téléchargements bénéficiants de l'anonymat du réseau i2P (Susimail et I2pSnark).
Le développement d'applications exploitant le réseau peut se faire sans avoir à modifier le projet. De cette façon, on peut voir des applications exploitant le réseau I2P qui utilisent les même protocoles que ce que l'on trouve sur Internet.
I2P fourni un reseau IRC anonyme : On peut se connecter de manière anonyme sur ce reseau en utilisant un client IRC (peu importe lequel) pointant vers le serveur 127.0.0.1 sur le port 6668. Cet IRC est anonyme.
Il est fourni également une API, pour faciliter le développement de nouvelles applications se reposant sur I2P(SDK, routeur, ...).
L'immersion de la charge utile permet de cacher les données effectivement envoyées ou reçues par l'utilisateur d'un routeur I2P. L'immersion est très importante puisque c'est elle qui protège l'anonymat face à un attaquant extérieur qui dispose d'une vue d'ensemble du réseau.
L'I2P réponds à la problématique du routage en essayant de ne pas compromettre l'anonymat, la qualité du réseau (latence et débit) et aux attaques de déni sur l'ensemble du réseau.
La notion est simple mais importante, la NetdB(pour network database)est une base de donnée contenant les identifiants des routeurs dans le réseau. Cette base est distribuée et s'apparente à une table de routage dans un routeur conventionnel(sauf qu'ici elle contient les clés d'identification des routeur I2P). Elle utilisait le DHT de Kademlia à la base comme solution de repli mais cette solution a été abandonnée.
Pour effectuer le partage des metadonnées du réseau, il est initialisé des pairs floodfill (un petit nombre des routeurs I2P utilise cet algorithme, les autres utilisaient un dérivé de kademlia mais qui n'est plus utilisé maintenant). Quand un pairs floodfill entre une nouvelle clé de cryptage dans la base de donnée du réseau, un autre pair floodfill choisi aléatoirement redemande cette clé, puis si elle est valide le pair se rapproche du premier et republie la clé. A la fin les pairs floodfill partage leur clé en interrogeant sans cesse la base et en faisant une copie des clés valides dans leur mémoire locale, ce qui produit un effet de changement de proximité des pairs floodfill entre eux(les pairs se rapprochent). Toutes les données stockées dans la base s'auto-authentifient en vérifiant la signature de l'élément stocké. Les données sont vérifiées avec un horodatage, les routeurs vérifient régulierement l'heure en interrogeant un serveur SNTP(pool.ntp.org) et détectent les incohérences au niveau de la couche transport(pour éviter les attaques). Pour faire simple les routeurs floodfill assurent la correspondance des clés, le routage des informations et le transport des données dans le réseau(3-5 routeurs floodfill assurent en théorie le bon fonctionnement d'un ensemble de 10.000 routeurs sur le réseau). L'algorithme utilisé n'est pas un algorithme complet mais a été ajusté pour correspondre au besoin d'I2P sans alourdir l'implémentation.
Les algorithmes de kademlia était utilisées pour les échanges de metadonnées entre les routeurs. Cette solution fût abandonnée dû aux difficultés de mis en place de l'algorithme. L'algorithme demande un minimum de ressources(pc et cpu) que les routeurs ne pourront pas assumer(bonne idée sur le papier mais pas dans cette application).
Les routeurs stockent uniquement les informations qui lui sont primordiales pour envoyer des messages sur le réseau. Il contient son idendité(une clé ElGamal de 2048bits public, une clé DSA public puis un certificat), les adresses(une liste d'adresse IP, de port, et des ensembles d'options de publication). La clé de cette structure est un SHA256 de l'identité du routeurs. Tant que la version de l'I2P n'est pas en sa version 1.0 les options de publication sont des données de debogage
Dans un tel système distribué, la recherche d'une information pourrait resembler à une recherche dans une DHT traditionnelle(comme celle réaliser dans les réseaux en P2P). Mais étant donné que le réseau est volatile et en constante évolution(vu la durée de 10 minutes de validité des tunnels), la recherche itérative est facilité dû fait que l'information n'est pas sur le routeur le plus proche mais sur les routeurs ayant une clé d'identification proche du SHA256(identité_du_routeur+un_horodatage_sous_la_forme_AAAAMMJJ), permettant d'avoir un ensemble de routeurs ayant l'information demandée. Ce qui permet également un renouvellement de la place des informations sur le réseau et une protection contre les attaques(car pour attaquer une machine avec ce principe, la place des informations change tous les jours, et oblige l'attaquant à recréer son attaque à chaque fois). Les données de recherche étant sensible, elles transitent dans des tunnels d'exploration différents des tunnels de données.