You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
3.5 KiB
44 lines
3.5 KiB
Формат кодограммы: |
|
------------------ |
|
Каждая кодограмма состоит из обязательного заголовка и опциональных секций: |
|
1. Обязательный заголовок (4 байта): |
|
[ID high][ID low][Timestamp high][Timestamp low] |
|
- ID: 16-битный циклический номер (0 = служебный пакет без данных) |
|
- Timestamp: время отправки в единицах 0.1 мс (циклическое) |
|
|
|
2. Опциональные секции (одна или несколько): |
|
а) Подтверждения (ACK) - заголовок 0x01: |
|
[0x01][count][(id_hi,id_lo,ts_hi,ts_lo)×count][last_delivered_hi,lo][last_rx_hi,lo] |
|
- count: количество пар ID+timestamp (1-32) |
|
- last_delivered_id: последний ID, доставленный получателю |
|
- last_rx_id: последний полученный ID (для синхронизации прогресса) |
|
б) Запросы ретрансмиссии - заголовок 0x10-0x2F: |
|
[0x10+(count-1)][(id_hi,id_lo)×count][last_delivered_hi,lo][last_rx_hi,lo] |
|
- count: (заголовок & 0x0F) + 1 (1-32) |
|
- last_delivered_id, last_rx_id: для синхронизации состояния |
|
в) Полезная нагрузка - заголовок 0x00: |
|
[0x00][данные...] |
|
- Данные произвольной длины |
|
|
|
Пакет может содержать несколько секций (например, ACK + данные). Секция с данными |
|
обычно идет последней. |
|
|
|
|
|
Кодограммы с этими секциями обрабатываются в etcp_connections (в этих кодограммах всегда только одна секция): |
|
г) Init запрос - заголовок 0x02 (со сбросом etcp сессии) или 0x04 (бес сброса): |
|
[0x02/0x04] [my_node_id 64bit] [my mtu high] [my mty low] [keepalive high] [keepalive low] [my publick key (32 байта, не шифруется)] |
|
- Инициирует новый connection для tcp instance. если tcp instance нет (первое подключение) - создаёт. Между нодами только одно подключение, но можно добавлять каналы. |
|
- Публичный ключ отправляется в конце пакета без шифрования, чтобы получатель мог установить его и расшифровать остальную часть пакета |
|
|
|
д) Init подтверждение - заголовок 0x03: |
|
[0x03] [my_node_id 64bit] [my mtu high] [my mty low] |
|
- Подтверждение инициализации |
|
|
|
е) Reset запрос: |
|
[0x06] |
|
- отправляется в ответ отправителю, если соединение не инициализировано и получен пакет не init (0x02, 0x03) |
|
|
|
При получении init получатель пакета должен: |
|
- удалить ETCP_LINK с этим ip_port если оно есть |
|
- создать новый ETCP_CONN с этим node_id. если уже существует подключение с этим node_id - вызвать etcp_reset (функция сброса окон неподтвержденных данных и нумерации) |
|
|
|
|