Moneropedia

I2NP

The Basics

From Java I2P:

I2NP manages the routing and mixing of messages between routers, as well as the selection of what transports to use when communicating with a peer for which there are multiple common transports supported

In-depth information

From Java I2P:

I2NP (I2P Network Protocol) Messages can be used for one-hop, router-to-router, point-to-point Messages. By encrypting and wrapping Messages in other Messages, they can be sent in a secure way through multiple hops to the ultimate Destination. I2NP does not specify nor require any particular Transport layer but does require at least one Transport in use.

Whenever a Destination wants to send a message to to another Destination, it provides its local router with both the Destination structure and the raw bytes of the message to be sent. The router then determines where to send it, delivers it through outbound Tunnels, instructing the end point to pass it along to the appropriate inbound Tunnel, where it is passed along again to that Tunnel's end point and made available to the target for reception.

Notes

Read more about the I2NP protocol and specification.