2008-08-18 09:34:34 +00:00
|
|
|
{% extends "_layout.html" %}
|
2008-03-20 02:47:11 +00:00
|
|
|
{% block title %}I2NP{% endblock %}
|
|
|
|
{% block content %}
|
2008-08-18 09:34:34 +00:00
|
|
|
<h2>I2P Network Protocol (I2NP)</h2>
|
2008-03-20 02:47:11 +00:00
|
|
|
<p>
|
2008-08-18 09:34:34 +00:00
|
|
|
The I2P Network Protocol (I2NP),
|
|
|
|
which is sandwiched between I2CP and the various I2P transport protocols, 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.
|
2008-03-20 02:47:11 +00:00
|
|
|
</p>
|
|
|
|
|
2008-08-18 09:34:34 +00:00
|
|
|
<p>While I2NP has been quite stable since its inception in
|
|
|
|
August of 2003, there have been minor modifications on occasion.
|
|
|
|
Here is the
|
|
|
|
<a href="/_static/pdf/I2NP_spec.pdf">I2NP Protocol Specification Version 0.9</a>
|
|
|
|
(pdf) dated August 28, 2003.
|
|
|
|
That document also references the
|
|
|
|
<a href="/_static/pdf/datastructures.pdf">Common Data Structures Specification Version 0.9</a>.
|
|
|
|
Beware -
|
|
|
|
based on a quick comparison with the code, there are substantial differences
|
|
|
|
between the implementation and the 2003 specifications.
|
2008-03-20 02:47:11 +00:00
|
|
|
</p>
|
|
|
|
|
2008-04-05 14:58:55 +00:00
|
|
|
<h3>I2NP Definition</h3>
|
2008-03-20 02:47:11 +00:00
|
|
|
<p>
|
2008-08-18 09:34:34 +00:00
|
|
|
<i>Note</i> - The following information is extracted from the current (2008) code base,
|
|
|
|
however it may be incomplete and/or inaccurate. Check the code to be sure.
|
2008-03-20 02:47:11 +00:00
|
|
|
<p>
|
2008-08-18 09:34:34 +00:00
|
|
|
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.
|
|
|
|
Priority is only used locally at the origin, i.e. when queueing for outbound delivery.
|
2008-04-05 14:58:55 +00:00
|
|
|
<p>
|
2008-08-18 09:34:34 +00:00
|
|
|
Both the NTCP and UDP transports implement priority transmission,
|
|
|
|
but in quite different manners.
|
|
|
|
UDP has complex code with queues for each priority, however it treats
|
|
|
|
messages with priorities 400-499, for example, the same.
|
|
|
|
(The priority queues are 100, 200, 300, 400, 500, and 1000)
|
|
|
|
These are global queues for all peers.
|
|
|
|
NTCP has a trivial linear search for the highest priority within
|
|
|
|
each buffer for a particular peer.
|
|
|
|
This is much less effective.
|
2008-04-24 13:38:12 +00:00
|
|
|
<p>
|
2008-08-18 09:34:34 +00:00
|
|
|
It isn't clear whether the current priority scheme is generally effective,
|
|
|
|
and whether the priorities for various messages should be adjusted further.
|
|
|
|
This is a topic for further research, analysis and testing.
|
2008-03-20 02:47:11 +00:00
|
|
|
|
2008-04-05 14:58:55 +00:00
|
|
|
|
2008-08-18 09:34:34 +00:00
|
|
|
<h3>Message Format</h3>
|
2008-03-20 02:47:11 +00:00
|
|
|
<p>
|
|
|
|
|
|
|
|
<table border=1>
|
2008-08-18 09:34:34 +00:00
|
|
|
<tr><td>Field<td>Bytes
|
|
|
|
<tr><td>Unique ID<td>4
|
|
|
|
<tr><td>Expiration<td>8
|
|
|
|
<tr><td>Payload Length<td>2
|
|
|
|
<tr><td>Checksum<td>1
|
|
|
|
<tr><td>Payload<td>0 - 64K
|
2008-03-20 02:47:11 +00:00
|
|
|
</table>
|
|
|
|
|
|
|
|
<p>
|
2008-08-18 09:34:34 +00:00
|
|
|
Message Types:
|
|
|
|
The following is taken from the code, however not all these
|
|
|
|
messages may be used.
|
|
|
|
Higher-numbered priority is higher priority.
|
|
|
|
The majority of traffic is TunnelDataMessages (priority 400),
|
|
|
|
so anything above 400 is essentially high priority, and
|
|
|
|
anything below is low priority.
|
|
|
|
Note also that many of the messages are generally routed
|
|
|
|
through exploratory tunnels, not client tunnels, and
|
|
|
|
therefore may not be in the same queue unless the
|
|
|
|
first hops happen to be on the same peer.
|
2008-03-20 02:47:11 +00:00
|
|
|
<p>
|
2008-08-18 09:34:34 +00:00
|
|
|
Also, not all message types are sent unencrypted.
|
|
|
|
For example, when testing a tunnel, the router wraps a
|
|
|
|
DeliveryStatusMessage, which is wrapped in a GarlicMessage,
|
|
|
|
which is wrapped in a DataMessage.
|
2008-03-20 02:47:11 +00:00
|
|
|
<p>
|
|
|
|
|
|
|
|
|
|
|
|
<table border=1>
|
2008-08-18 09:34:34 +00:00
|
|
|
<tr><td>Message<td>Type<td>Payload Length<td>Priority<td>Comments
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
|
|
|
DatabaseLookupMessage
|
|
|
|
<td align=right>2
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>
|
2008-04-05 14:58:55 +00:00
|
|
|
<td align=right>100/400
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>400 normally; 100 if from HarvesterJob and sent directly;
|
|
|
|
400 for a router lookup
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
|
|
|
DatabaseSearchReplyMessage
|
|
|
|
<td align=right>3
|
2008-04-24 13:38:12 +00:00
|
|
|
<td align=right>Typ. 161
|
2008-03-20 02:47:11 +00:00
|
|
|
<td align=right>300
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>Size is 65 + 32*(number of hashes) where typically, the hashes for
|
|
|
|
three floodfill routers are returned.
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
|
|
|
DatabaseStoreMessage
|
|
|
|
<td align=right>1
|
2008-04-24 13:38:12 +00:00
|
|
|
<td align=right>Varies
|
2008-03-20 02:47:11 +00:00
|
|
|
<td align=right>100/400
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>Usually 100 (why?)
|
|
|
|
Size is 898 bytes for a typical 2-lease leaseSet.
|
|
|
|
RouterInfo structures are compressed, and size varies; however
|
|
|
|
there is a continuing effort to reduce the amount of data published in a RouterInfo
|
|
|
|
as we appproach release 1.0.
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
|
|
|
DataMessage
|
|
|
|
<td align=right>20
|
2008-04-09 14:17:35 +00:00
|
|
|
<td align=right>4 - 65540
|
2008-03-20 02:47:11 +00:00
|
|
|
<td align=right>400
|
|
|
|
<tr><td>
|
|
|
|
DateMessage
|
|
|
|
<td align=right>16
|
|
|
|
<td>
|
|
|
|
<td>
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>Obsolete (was used by TCP), date messages now at the <a href="i2cp.html">I2CP</a> layer ?
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
|
|
|
DeliveryStatusMessage
|
|
|
|
<td align=right>10
|
|
|
|
<td align=right>12
|
|
|
|
<td>
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>Used for message replies, and for testing tunnels - generally wrapped in a GarlicMessage
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
2008-03-22 12:31:14 +00:00
|
|
|
<a href="techintro.html#op.garlic">GarlicMessage</a>
|
2008-03-20 02:47:11 +00:00
|
|
|
<td align=right>11
|
|
|
|
<td>
|
|
|
|
<td>
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>Generally wrapped in a DataMessage -
|
|
|
|
but when unwrapped, given a priority of 100 by the forwarding router
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
2008-03-22 12:31:14 +00:00
|
|
|
<a href="tunnel-alt-creation.html#tunnelCreate.requestRecord">TunnelBuildMessage</a>
|
2008-03-20 02:47:11 +00:00
|
|
|
<td align=right>21
|
2008-03-22 12:31:14 +00:00
|
|
|
<td align=right>4224
|
2008-03-20 02:47:11 +00:00
|
|
|
<td align=right>300/500
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>Usually 500 (why?)
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
2008-03-22 12:31:14 +00:00
|
|
|
<a href="tunnel-alt-creation.html#tunnelCreate.replyRecord">TunnelBuildReplyMessage</a>
|
2008-03-20 02:47:11 +00:00
|
|
|
<td align=right>22
|
2008-03-22 12:31:14 +00:00
|
|
|
<td align=right>4224
|
2008-03-20 02:47:11 +00:00
|
|
|
<td align=right>300
|
|
|
|
<tr><td>
|
|
|
|
TunnelCreateMessage
|
|
|
|
<td align=right>6
|
|
|
|
<td>
|
|
|
|
<td>
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>Obsolete - <a href="tunnel.html#tunnel.request">Old Tunnel Build Method</a>
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
|
|
|
TunnelCreateStatusMessage
|
|
|
|
<td align=right>7
|
|
|
|
<td>
|
|
|
|
<td>
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>Obsolete - <a href="tunnel.html#tunnel.request">Old Tunnel Build Method</a>
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
|
|
|
TunnelDataMessage
|
|
|
|
<td align=right>18
|
2008-04-09 14:17:35 +00:00
|
|
|
<td align=right>1028
|
2008-03-20 02:47:11 +00:00
|
|
|
<td align=right>400
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>The most common message. Priority for tunnel participants, outbound endpoints, and inbound gateways will
|
|
|
|
be reduced to 200 as of release 0.6.1.33.
|
|
|
|
Outbound gateway messages (i.e. those originated locally) will remain at 400.
|
2008-03-20 02:47:11 +00:00
|
|
|
<tr><td>
|
|
|
|
TunnelGatewayMessage
|
|
|
|
<td align=right>19
|
|
|
|
<td>
|
|
|
|
<td align=right>300/400
|
|
|
|
<tr><td>
|
2008-08-18 09:34:34 +00:00
|
|
|
Others listed in 2003 spec
|
2008-03-20 02:47:11 +00:00
|
|
|
<td>4,5,8,9,12
|
|
|
|
<td>
|
|
|
|
<td>
|
2008-08-18 09:34:34 +00:00
|
|
|
<td>Unused
|
2008-03-20 02:47:11 +00:00
|
|
|
</table>
|
|
|
|
|
|
|
|
{% endblock %}
|