Эта страница была обновлена 2025-04 и содержит сведения для версии маршрутизатора 0.9.66.

Обзор Дейтаграмм

Дейтаграммы строятся на основе I2CP и предоставляют аутентифицированные сообщения в стандартном формате, на которые можно ответить. Это позволяет приложениям читать достоверный адрес "От" в дейтаграмме, и узнать, с какого адреса на самом деле отправлено сообщение. Это важно для некоторых приложений, поскольку базовое сообщение I2P не форматировано - в нем нет адреса "от" (как это есть в IP). Кроме того, сообщение и отправитель аутентифицируются по подписи на данных.

Дейтаграммы, как и пакеты потоковой библиотеки, являются конструкциями уровня приложения. Эти протоколы не зависят от низкоуровневого транспорта; протоколы конвертируются маршрутизатором в сообщения I2NP, каждый протокол может передаваться любым транспортом.

Руководство по Приложениям

Приложения, написанные на Java, могут использовать API дейтаграмм, приложения на других языках могут использовать поддержку дейтаграмм SAM'а. Также есть ограниченная поддержка в i2ptunnel в SOCKS proxy, 'streamr' типы туннеля и классы udpTunnel.

Длина Дейтаграммы

The application designer should carefully consider the tradeoff of repliable vs. non-repliable datagrams. Also, the datagram size will affect reliability, due to tunnel fragmentation into 1KB tunnel messages. The more message fragments, the more likely that one of them will be dropped by an intermediate hop. Messages larger than a few KB are not recommended. Over about 10 KB, the delivery probablility drops dramatically.

Смотри страницу Спецификации Дейтаграмм.

Also note that the various overheads added by lower layers, in particular garlic messages, place a large burden on intermittent messages such as used by a Kademlia-over-UDP application. The implementations are currently tuned for frequent traffic using the streaming library.

Номер Протокола I2CP и Порты

The standard I2CP protocol number for signed (repliable) datagrams is PROTO_DATAGRAM (17). Applications may or may not choose to set the protocol in the I2CP header. The default is implementation-dependent. It must be set to demultiplex datagram and streaming traffic received on the same Destination.

Поскольку дейтаграммы не ориентированы на соединение, приложению может понадобиться номер порта для сопоставления дейтаграмм от определенных узлов или сессий подключения, как и в традиционном UDP над IP. Приложения могут добавить порты 'от' и 'к' в заголовок I2CP (gzip), как это описано на странице I2CP.

There is no method within the datagram API to specify whether it is non-repliable (raw) or repliable. The application should be designed to expect the appropriate type. The I2CP protocol number or port should be used by the application to indicate datagram type. The I2CP protocol numbers PROTO_DATAGRAM (signed, also known as Datagram1), PROTO_DATAGRAM_RAW, PROTO_DATAGRAM2, and PROTO_DATAGRAM3 are defined in the I2PSession API for this purpose. A common design pattern in client/server datagram applications is to use signed datagrams for a request which includes a nonce, and use a raw datagram for the reply, returning the nonce from the request.

Defaults:

  • PROTO_DATAGRAM = 17
  • PROTO_DATAGRAM_RAW = 18
  • PROTO_DATAGRAM2 = 19
  • PROTO_DATAGRAM3 = 20

Протоколы и порты могут быть настроены в I2PSession API I2CP, как это реализовано в I2PSessionMuxedImpl.

Целостность данных

Data integrity is assured by the gzip CRC-32 checksum implemented in the I2CP layer. Authenticated datagrams (Datagram1 and Datagram2) also ensure integrity. There is no checksum field in the datagram protocol.

Инкапсуляция пакета

Каждая дейтаграмма отправляется через I2P как отдельное сообщение (или отдельный зубчик в Чесночном Сообщении). Инкапсуляция сообщения реализована в нижележащих уровнях I2CP, I2NP и туннельном сообщении. В протоколе дейтаграмм нет механизма разделения пакетов или поля длины.

Спецификация

Смотри страницу Спецификации Дейтаграмм.