{% extends "_layout.html" %} {% block title %}I2CP{% endblock %} {% block content %}
The I2P Client Protocol (I2CP) exposes a strong separation of concerns between 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.
As the I2CP requires all client libraries to provide an implementation of the end to end encryption (including ElGamal/AES+SessionTag), 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 Client SDK). Instead, applications can take advantage of the base I2CP plus the streaming and datagram libraries by using the Simple Anonymous Messaging protocol (which does not require clients to deal with any sort of cryptography).
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.
While the I2CP has been quite stable since its inception in August of 2003, there have been minor modifications on occasion. Here is the I2CP Protocol Specification Version 0.9 (pdf) dated August 28, 2003. That document also references the Common Data Structures Specification Version 0.9. There may have been undocumented changes to the protocol since that time.
In a standard I2P installation, port 7654 is used by java clients to communicate with the local router via I2CP.
I2CP Definition
Note - 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.
Message | Type |
CreateLeaseSetMessage | 4 |
CreateSessionMessage | 1 |
DestroySessionMessage | 3 |
DisconnectMessage.java | 30 |
GetDateMessage.java | 32 |
MessagePayloadMessage | 31 |
MessageStatusMessage | 22 |
ReceiveMessageBeginMessage | 6 |
ReceiveMessageEndMessage | 7 |
ReportAbuseMessage | 29 |
RequestLeaseSetMessage | 21 |
SendMessageMessage | 5 |
SessionStatusMessage | 20 |
SetDateMessage | 33 |