Files
i2p.www/www.i2p2/pages/i2cp.html

104 lines
3.4 KiB
HTML
Raw Normal View History

2008-01-31 20:38:37 +00:00
{% extends "_layout.html" %}
{% block title %}I2CP{% endblock %}
{% block content %}
<p>The I2P Client Protocol (I2CP) exposes a strong separation of concerns between
2004-07-20 23:23:23 +00:00
the router and any client that wishes to communicate over the network. It enables
secure and asynchronous messaging by sending and receiving messages over a
single TCP socket, yet never exposing any private keys and authenticating itself
to the router only through signatures. With I2CP, a client application tells the
router who they are (their "destination"), what anonymity, reliability, and
latency tradeoffs to make, and where to send messages. In turn the router uses
I2CP to tell the client when any messages have arrived, to request authorization
for some tunnels to be used, and, if necessary, to notify the client that the
router is under attack and unable to operate safely.</p>
<p>As the I2CP requires all client libraries to provide an implementation of the
end to end encryption (including <a href="how_elgamalaes">ElGamal/AES+SessionTag</a>),
the protocol itself isn't likely to be adopted for normal client applications
(except for those implemented in Java that can use the existing I2P
2008-03-30 21:52:15 +00:00
<a href="package-client.html">Client SDK</a>).
2004-07-20 23:23:23 +00:00
Instead, applications can take advantage of the base I2CP plus the
<a href="ministreaming">streaming</a> and <a href="datagrams">datagram</a> libraries
by using the <a href="sam">Simple Anonymous Messaging</a> protocol (which does not
require clients to deal with any sort of cryptography).</p>
2008-04-24 13:38:12 +00:00
<p>Actually, I2CP end-to-end encryption was disabled in I2P release 0.6,
leaving in place the end-to-end garlic encryption.
However, client libraries must still implement public/private key signing
for leasesets, and key management.
</p>
<p>While the I2CP 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/I2CP_spec.pdf">I2CP Protocol Specification Version 0.9</a>
(pdf) dated August 28, 2003.
2008-03-30 21:52:15 +00:00
That document also references the
<a href="/_static/pdf/datastructures.pdf">Common Data Structures Specification Version 0.9</a>.
There may have been undocumented changes to the protocol since that time.
</p>
<p>In a standard I2P installation, port 7654 is used by java clients to communicate
with the local router via I2CP.
</p>
2008-03-30 21:52:15 +00:00
<p>
I2CP Definition
<p>
<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.
<p>
<table border=1>
<tr><td>Message<td>Type
<tr><td>
CreateLeaseSetMessage
<td align=right>4
<tr><td>
CreateSessionMessage
<td align=right>1
<tr><td>
2009-01-05 23:20:20 +00:00
DestLookupMessage <i>(new in release 0.7)</i>
<td align=right>34
<tr><td>
DestReplyMessage <i>(new in release 0.7)</i>
<td align=right>35
<tr><td>
2008-03-30 21:52:15 +00:00
DestroySessionMessage
<td align=right>3
<tr><td>
DisconnectMessage.java
<td align=right>30
<tr><td>
GetDateMessage.java
<td align=right>32
<tr><td>
MessagePayloadMessage
<td align=right>31
<tr><td>
MessageStatusMessage
<td align=right>22
<tr><td>
ReceiveMessageBeginMessage
<td align=right>6
<tr><td>
ReceiveMessageEndMessage
<td align=right>7
<tr><td>
ReportAbuseMessage
<td align=right>29
<tr><td>
RequestLeaseSetMessage
<td align=right>21
<tr><td>
SendMessageMessage
<td align=right>5
<tr><td>
SessionStatusMessage
<td align=right>20
<tr><td>
SetDateMessage
<td align=right>33
</table>
{% endblock %}