Этот перевод был создан с помощью машинного обучения и может быть не на 100% точным. Просмотреть английскую версию

Обзор I2NP

Обзор сетевого протокола I2P (I2NP) — формат сообщений, типы, приоритеты и ограничения по размеру.

Обзор

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

Определение I2NP

Сообщения I2NP (I2P Network Protocol) могут использоваться для одношаговых, маршрутизатор-к-маршрутизатору, точечных сообщений. Шифруя и оборачивая сообщения в другие сообщения, их можно безопасно отправлять через несколько узлов до конечного пункта назначения. Приоритет используется только локально на исходном узле, т.е. при постановке в очередь для исходящей доставки.

Перечисленные ниже приоритеты могут быть устаревшими и подлежат изменению. Реализация очереди приоритетов может различаться.

Формат сообщения

В следующей таблице указан традиционный 16-байтовый заголовок, используемый в NTCP. Транспорты SSU и NTCP2 используют изменённые заголовки.

FieldBytes
Type1
Unique ID4
Expiration8
Payload Length2
Checksum1
Payload0 - 61.2KB
Хотя номинальный максимальный размер полезной нагрузки составляет 64 КБ, фактический размер дополнительно ограничен методом фрагментации сообщений I2NP на несколько туннельных сообщений по 1 КБ, как описано на [странице реализации туннелей](/docs/specs/tunnel-implementation/).

Максимальное количество фрагментов — 64, и сообщение может быть не perfectly выровнено, поэтому сообщение должно умещаться в 63 фрагмента.

Максимальный размер начального фрагмента составляет 956 байт (при условии режима доставки TUNNEL); максимальный размер последующего фрагмента — 996 байт. Следовательно, максимальный размер составляет приблизительно 956 + (62 × 996) = 62708 байт или 61,2 КБ.

Кроме того, транспорты могут иметь дополнительные ограничения. Ограничение NTCP составляет 16 КБ - 6 = 16378 байт. Ограничение SSU составляет приблизительно 32 КБ. Ограничение NTCP2 составляет приблизительно 64 КБ - 20 = 65516 байт, что выше, чем может поддерживать туннель.

Обратите внимание, что это не пределы для датаграмм, которые видит клиент, поскольку маршрутизатор может объединить набор аренд (leaseset) и/или теги сеанса вместе с сообщением клиента в одном чесночном (garlic) сообщении. Набор аренд и теги вместе могут добавить около 5,5 КБ. Поэтому текущий предел датаграммы составляет около 10 КБ. Этот предел будет увеличен в одной из будущих версий.

Типы сообщений

Чем выше номер приоритета, тем выше приоритет. Большая часть трафика — это TunnelDataMessages (приоритет 400), поэтому всё, что выше 400, по сути является высоким приоритетом, а всё, что ниже, — низким. Также обратите внимание, что многие сообщения обычно передаются через исследовательские туннели, а не клиентские, и поэтому могут находиться не в той же очереди, если первые прыжки случайно не приходятся на одного и того же пира.

Кроме того, не все типы сообщений отправляются без шифрования. Например, при тестировании туннеля маршрутизатор оборачивает сообщение DeliveryStatusMessage, которое, в свою очередь, оборачивается в GarlicMessage, а затем в DataMessage.

MessageTypePayload LengthPriorityComments
DatabaseLookupMessage2500May vary
DatabaseSearchReplyMessage3Typ. 161300Size is 65 + 32*(number of hashes) where typically, the hashes for three floodfill routers are returned.
DatabaseStoreMessage1Varies460Priority may vary. Size is 898 bytes for a typical 2-lease leaseSet. RouterInfo structures are compressed, and size varies; however there is a continuing effort to reduce the amount of data published in a RouterInfo.
DataMessage204 - 62080425Priority may vary on a per-destination basis
DeliveryStatusMessage1012Used for message replies, and for testing tunnels - generally wrapped in a GarlicMessage
GarlicMessage11Generally wrapped in a DataMessage - but when unwrapped, given a priority of 100 by the forwarding router
TunnelBuildMessage214224500
TunnelBuildReplyMessage224224300
TunnelDataMessage181028400The most common message. Priority for tunnel participants, outbound endpoints, and inbound gateways was reduced to 200 as of release 0.6.1.33. Outbound gateway messages (i.e. those originated locally) remains at 400.
TunnelGatewayMessage19300/400
VariableTunnelBuildMessage231057 - 4225500Shorter TunnelBuildMessage as of 0.7.12
VariableTunnelBuildReplyMessage241057 - 4225300Shorter TunnelBuildReplyMessage as of 0.7.12
Others (Types 0, 4-9, 12)0, 4-9, 12Obsolete, Unused
## Полная спецификация протокола

Полная спецификация протокола доступна на странице спецификации I2NP . См. также страницу спецификации общих структур данных .

Будущая работа

Неясно, насколько эффективна текущая система приоритетов в целом и следует ли дополнительно корректировать приоритеты различных сообщений. Это тема для дальнейших исследований, анализа и тестирования.

Was this page helpful?