{% extends "_layout.html" %} {% block title %}Transport Overview{% endblock %} {% block content %} Updated July 2010, current as of router version 0.8

Transports in I2P

A "transport" in I2P is a method for direct, point-to-point communication between two routers. Transports must provide confidentiality and integrity against external adversaries while authenticating that the router contacted is the one who should receive a given message.

I2P supports multiple transports simultaneously. There are two transports currently implemented:

  1. NTCP, a Java New I/O (NIO) TCP transport
  2. SSU, or Secure Semireliable UDP
Each provides a "connection" paradigm, with authentication, flow control, acknowledgments and retransmission.

Transport Services

The transport subsystem in I2P provides the following services:

Transport Addresses

The transport subsystem maintains a set of router addresses, each of which lists a transport method, IP, and port. These addresses constitute the advertised contact points, and are published by the router to the network database.

Typical scenarios are:

Transport Selection

The transport system delivers I2NP messages. The transport selected for any message is independent of the application-layer protocol (TCP or UDP).

For each outgoing message, the transport system solicits "bids" from each transport. The transport bidding the lowest (best) value wins the bid and receives the message for delivery. A transport may refuse to bid.

Whether a transport bids, and with what value, depend on numerous factors:

In general, the bid values are selected so that two routers are only connected by a single transport at any one time. However, this is not a requirement.

New Transports and Future Work

Additional transports may be developed, including:

Also, the existing transports will be enhanced to support multiple addresses within a single transport, including IPV6 addresses. Currently, a transport may only advertise a single IPV4 address.

Work continues on adjusting default connection limits for each transport. I2P is designed as a "mesh network", where it is assumed that any router can connect to any other router. This assumption may be broken by routers that have exceeded their connection limits, and by routers that are behind restrictive state firewalls (restricted routes).

The current connection limits are higher for SSU than for NTCP, based on the assumption that the memory requirements for an NTCP connection are higher than that for SSU. However, as NTCP buffers are partially in the kernel and SSU buffers are on the Java heap, that assumption is difficult to verify.

Analyze Breaking and Improving Protocol Obfuscation and see how transport-layer padding may improve things.

{% endblock %}