{% extends "global/layout.html" %} {% block title %}{% trans %}Transport Overview{% endtrans %}{% endblock %} {% block lastupdated %}{% trans %}June 2018{% endtrans %}{% endblock %} {% block accuratefor %}0.9.36{% endblock %} {% block content %}
{% trans -%} 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. {%- endtrans %}
{% trans -%} I2P supports multiple transports simultaneously. There are three transports currently implemented: {%- endtrans %}
{% trans -%} Each provides a "connection" paradigm, with authentication, flow control, acknowledgments and retransmission. {%- endtrans %}
{% trans -%} The transport subsystem in I2P provides the following services: {%- endtrans %}
{% trans -%} 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. Addresses may also contain an arbitrary set of additional options. {%- endtrans %}
{% trans -%} Each transport method may publish multiple router addresses. {%- endtrans %}
{% trans %}Typical scenarios are:{% endtrans %}
{% trans i2np=site_url('docs/protocol/i2np'), streaming=site_url('docs/api/streaming'), datagrams=site_url('docs/api/datagrams') -%} The transport system delivers I2NP messages only. The transport selected for any message is independent of the upper-layer protocols and contents (router or client messages, whether an external application was using TCP or UDP to connect to I2P, whether the upper layer was using the streaming library streaming or datagrams, datagrams etc.). {%- endtrans %}
{% trans -%} 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. {%- endtrans %}
{% trans -%} Whether a transport bids, and with what value, depend on numerous factors: {%- endtrans %}
{% trans -%} 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. {%- endtrans %}
{% trans -%} Additional transports may be developed, including: {%- endtrans %}
{% trans -%} 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). {%- endtrans %}
{% trans -%} 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. {%- endtrans %}
{% trans pdf='http://www.iis.se/docs/hjelmvik_breaking.pdf' -%} Analyze Breaking and Improving Protocol Obfuscation and see how transport-layer padding may improve things. {%- endtrans %}
{% endblock %}