FAQ: Как Meshtastic отправляет сообщения?

1. В чём основная идея работы сети?

Meshtastic создаёт «живую» децентрализованную сеть, где сообщения автоматически передаются от устройства к устройству (от узла к узлу), пока не достигнут получателя. Это похоже на умный «испорченный телефон» — каждое сообщение может пройти через несколько «посредников», чтобы добраться до адресата.

2. Как это выглядит на простом примере?

Представьте большую комнату, где люди (это узлы/ноды) стоят небольшими группками. Каждая группа слышит только своих ближайших соседей.

  • Шаг 1: Вы (Узел А) говорите: «Вася, встречаемся у входа».
  • Шаг 2: Вас слышат не только Вася, если он рядом, но и все соседи (Узлы B и C).
  • Шаг 3: Если Вася (Узел D) далеко и не слышит вас напрямую, ваш сосед (Узел B), который услышал сообщение, повторяет его для своей группы: «А передал Васе: «Встречаемся у входа»».
  • Шаг 4: Так сообщение доходит до Васи через «посредников».

Важное правило: Люди не кричат все сразу. Если кто-то говорит, остальные замолкают, слушают и только потом передают сообщение дальше. В эфире это обеспечивается алгоритмом CSMA/CA.

3. Как этот процесс работает технически в радиосети?

Когда вы отправляете сообщение, происходит следующее:

  • Все узлы в радиусе действия вашего устройства получают это сообщение.
  • Каждый узел проверяет его по трём ключевым пунктам:
    • «Это сообщение для меня?» → Если да, узел принимает его и готовится отправить подтверждение.
    • «Я уже его пересылал?» → Если да, узел игнорирует сообщение, чтобы избежать бесконечных петель.
    • «Это новое сообщение?» → Если да, узел ждёт небольшую случайную паузу (чтобы не создать «кашу» в эфире), а затем ретранслирует (пересылает) его своим соседям.

Сообщение продолжает передаваться таким образом, пока не достигнет адресата или не исчерпает лимит пересылок (хопов).

4. Как я узнаю, что сообщение дошло?

Система подтверждений работает так же, как и в примере с комнатой:

  • Доставлено (галочка «Доставлено»): Если Вася (узел-получатель) получил сообщение, он отправляет ответ «Окей». Это подтверждение так же передаётся по цепочке узлов назад до вас.
  • Не доставлено (галочка «Отправлено»): Если Вася вне зоны действия сети или его устройство выключено, подтверждение не придёт. Ваше сообщение услышали и, возможно, передали все соседние узлы, но оно так и не достигло конечной цели.

5. Как работает механизм повторных отправок?

Механизм обработки повторных отправок

В основе работы Meshtastic лежат два ключевых правила, которые объясняют этот процесс:

  1. Игнорирование повторных пакетов: Каждое сообщение в сети имеет уникальный идентификатор (ID). Когда узел получает пакет, он первым делом проверяет свой внутренний журнал. Если запись с таким ID уже существует, узел просто игнорирует входящий пакет, чтобы предотвратить бесконечную циркуляцию одного и того же сообщения и засорение эфира.
  2. Повторные попытки на уровне отправителя: Если узел-отправитель не получает подтверждения о получении сообщения от следующего узла в цепочке в течение заданного таймаута, он предпринимает несколько дополнительных попыток отправить тот же самый пакет с тем же самым ID. Согласно информации из источников, обычно делается около трех попыток.

Смысл повторных попыток

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

  • Борьба с временными помехами: Первая попытка передачи могла совпасть с моментом сильной радиопомехи, из-за которой соседний узел не смог корректно принять пакет. Вторая или третья попытка может пройти уже в «чистом» эфире.
  • Учет меняющихся условий: Узлы (особенно мобильные) могли в момент первой попытки находиться в радиотени (например, за зданием), но ко времени повторной отправки выйти на устойчивую связь.

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

Резюме

Таким образом, в вашем вопросе действительно была неточность. Повторные попытки отправки — это не просьба ко всей сети передать сообщение заново, а целенаправленные попытки доставить его узлам, которые находятся в зоне неустойчивого приема. Узлы, уже видевшие сообщение, корректно его игнорируют, а те, кто не видел, получают второй шанс его принять.

6. Есть ли в Meshtastic механизм запоминания нод для оптимизации пути?

Короткий ответ: Нет, такого механизма в классическом понимании в Meshtastic нет.

Meshtastic использует простой и надежный протокол флудинга (flooding) . Каждое сообщение, которое узел видит впервые, он передает (ретранслирует) всем соседям в радиусе действия. Это можно сравнить с распространением слухов: вы рассказываете новость всем вокруг, не зная, кто уже ее слышал.

Почему это так сделано?

  • Простота и надежность: В динамически меняющейся сети, где узлы постоянно перемещаются, появляются и исчезают, поддержка сложных таблиц маршрутизации была бы очень трудной задачей. Алгоритм флудинга гарантирует, что сообщение в итоге найдет получателя, если существует хоть какой-то путь, пусть и не самый короткий .
  • Децентрализация: Отсутствие необходимости запоминать «оптимальные пути» делает сеть полностью равноправной и децентрализованной. В ней нет главных узлов-маршрутизаторов .

Таким образом, путь каждого сообщения определяется «на лету» тем, какие узлы оказались в эфире в момент его передачи.

7. Насколько безопасен Meshtastic по умолчанию?

Ситуация кардинально изменилась с выходом версии протокола Meshtastic 2.5. Если ранее использовался общий для всех ключ (или он вовсе отсутствовал), то теперь безопасность значительно повышена.

  • Раньше (до v2.5): Действительно, по умолчанию использовался общеизвестный предустановленный ключ (Pre-Shared Key, PSK), и любой в радиусе действия, настроенный на тот же канал, мог читать ваши сообщения. Это делало связь по умолчанию открытой.
  • Сейчас (v2.5 и новее): Начиная с версии 2.5, в Meshtastic была интегрирована система публичной криптографии (PKC). Теперь каждый узел при первом запуске генерирует уникальные пары ключей — приватный и публичный. Это фундаментально меняет подход к безопасности.

8. Как теперь работает шифрование?

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

  • Уникальные ключи: Каждое устройство имеет свой собственный, уникальный набор ключей.
  • Безопасный обмен: Когда вы отправляете личное (приватное) сообщение конкретному узлу, ваше устройство использует ваш приватный ключ и публичный ключ получателя для выполнения безопасного обмена по алгоритму X25519 (Elliptic Curve Diffie-Hellman). В результате генерируется общий секретный ключ, который и используется для шифрования и дешифрования этого конкретного сообщения.
  • Шифрование канала: Для шифрования сообщений, отправляемых в общий канал (broadcast), по-прежнему используется предустановленный ключ (PSK), который должны знать все участники группы.

Таким образом, личная переписка между двумя узлами стала по-настоящему конфиденциальной.

9. Что остаётся важным для обеспечения безопасности?

Несмотря на улучшения, ваше предупреждение по-прежнему актуально, но с важными уточнениями.

  • Общие каналы: Сообщения в общем канале (не личные) шифруются общим для этого канала ключом PSK. Если вы используете стандартный, общеизвестный ключ (как в настройках по умолчанию для первичного канала), то эти сообщения могут прочитать все, кто находится в том же канале. Для создания приватной группы необходимо вручную установить и распределить свой собственный, уникальный PSK-ключ среди всех участников.
  • Метаданные: Даже с шифрованием, такая информация, как ваш идентификатор узла (NodeNum) и факт передачи данных, может быть видна другим участникам сети в радиусе действия. Полная анонимность не гарантируется.

Проверьте настройки: Актуальность вашей безопасности зависит от версии протокола и ваших действий.

10. Что нужно сделать для конфиденциальной связи?

Чтобы ваше общение в сети Meshtastic было защищённым, следуйте этим рекомендациям:

  • Убедитесь, что у вас актуальная версия протокола (v2.5.x или выше). Это необходимо для работы новой системы шифрования.
  • Для личных сообщений используйте функцию Direct Message (Приватное сообщение). Она будет автоматически защищена с помощью PKC.
  • Для группового общения создайте отдельный канал и установите сложный, уникальный PSK-ключ, известный только вашей группе. Не используйте ключ по умолчанию.