zero-cost-hops-for-favorite-routers
Что если сообщения могли бы проходить через вашу mesh-инфраструктуру за один хоп?
Что если вы могли бы связать два города на расстоянии 600 миль через LoRa и все равно иметь запас хопов?
Что если более быстрый пресет требует вдвое больше хопов, чтобы достичь ваших друзей, но у вас нет запасных хопов?
Именно это Zero-Cost Hops открывает для вашей mesh.
{/ truncate /}

TL;DR
Эта функция улучшает дальность сообщений, сохраняя оставшиеся хопы между избранными роутерами.
Почему это важно?
- Более быстрые пресеты вроде
SHORT_FASTиSHORT_TURBOжертвуют дальностью ради скорости. В плотных городских развертываниях это означает, что вы быстро исчерпаете лимит в 7 хопов. - Zero-Cost Hops превращает mesh из хорошо размещенных инфраструктурных роутеров в один хоп, оставляя больше хопов для первого и последнего километра.
- Для хорошо управляемых сетей это позволит общаться между городами, а то и странами, оставаясь в пределах лимита в 7 хопов.
- Помогает предотвратить ситуацию, когда
CLIENT_BASEстановится последним хопом пакета, чтобы сообщения не умирали на крыше, не дойдя до ваших внутренних узлов.
Когда применяются Zero-Cost Hops?
Хоп сохраняется, если все эти условия верны:
- Роль узла —
ROUTER,ROUTER_LATEилиCLIENT_BASE. - Это не самый первый хоп пакета.
- Предыдущий ретранслятор находится в ваших избранных и имеет роль
ROUTERилиROUTER_LATE.
Пропустите хоть одно условие — и счетчик хопов уменьшится как обычно.
Чего это не касается
- Правила повторной трансляции для
CLIENT_BASEостаются точно такими же.CLIENT_BASEиспользуетfrom/to, в то время как Zero-Cost Hops используетrelay_node. - Добавление роутера в избранные не заставляет узлы CLIENT_BASE ретранслировать все пакеты.
- Максимальный лимит хопов по-прежнему 7.
Обнаружение «избранных» и реализация
Чтобы protobuf'ы оставались компактными и эффективными по памяти, узел сравнивает relay_node со списком избранных и проверяет, является ли узел инфраструктурным.
С всего 8 битами в relay_node возможны коллизии.
- Шанс, что один избранный столкнется с случайным узлом, возможен и растет с увеличением числа избранных.
- Коллизии имеют значение только если столкнувшийся узел в пределах досягаемости роутера.
- Дедупликация предотвращает петли.
- Случайные коллизии редки и безвредны.
Вероятность коллизии в типичной среде:
| Total Nodes | Routers (3% of Total Nodes) |
Favorite Routers Within Range (20% of Routers) |
Collision Chance |
|---|---|---|---|
| 10 | 0.3 (≈1) | 1 | ~0.4 % |
| 50 | 1.5 (≈2) | 1 | ~0.4 % |
| 100 | 3 | 1 | ~0.4 % |
| 200 | 6 | 2 | ~0.8 % |
| 400 | 12 | 3 | ~1.2 % |
| 800 | 24 | 5 | ~2.0 % |
| 1000 | 30 | 6 | ~2.3 % |
Примечание: "Total Nodes" — это размер сети; вероятность коллизии рассчитана на основе числа избранных роутеров в пределах досягаемости, а не всех узлов, деленных на 256. Например, при 1000 узлах всего и 6 избранных роутерах шанс, что случайный relay_node совпадет с избранным в пределах досягаемости, составляет около 2,3%.
Шанс коллизии здесь невелик.
Два быстрых сценария
1. Простой городской пример в центре
Настройка
- Роутеры R1 и R2 используют роль
ROUTERи добавлены в избранные (друг к другу). - Отправитель использует роль
CLIENTи хочет пообщаться с другом в соседнем городе.
Путь
CLIENT → R1 → R2 → CLIENT
Маршрут хопов начиная с 4 максимальных хопов
| Hop | Action | Counter | Hops Remaining |
|---|---|---|---|
| CLIENT → R1 | normal | –1 | 3 |
| R1 → R2 | zero-cost | 0 | 3 |
| R2 → CLIENT | normal | –1 | 2 |
Результат: Хоп сохранен между R1 и R2, оставляя дополнительный хоп на случай необходимости.
2. Домашняя база, хребет на вершине холма
Настройка
- Крышные узлы используют роль
CLIENT_BASEи добавили в избранные локальные узлыROUTER. - Каждый хребет использует роль
ROUTERи добавлены в избранные друг к другу. - Все остальные узлы используют роль
CLIENT.
Маршрут хопов начиная с 7 максимальных хопов
| Hop | Path | Action | Counter Change | Hops Remaining |
|---|---|---|---|---|
| 1 | Handheld CLIENT → Roof CLIENT_BASE | normal | –1 | 6 |
| 2 | Roof CLIENT_BASE → Hilltop ROUTER | normal | –1 | 5 |
| 3 | Hilltop ROUTER → Midway ROUTER | zero-cost | 0 | 5 |
| 4 | Midway ROUTER → Remote ROUTER | zero-cost | 0 | 5 |
| 5 | Remote ROUTER → Remote CLIENT_BASE | zero-cost | 0 | 5 |
| 6 | Remote CLIENT_BASE → Outpost CLIENT | normal | –1 | 4 |
| 7 | Outpost CLIENT → Friend of Friend CLIENT | normal | –1 | 3 |
| 8 | Friend of Friend CLIENT → Friend CLIENT | normal | –1 | 2 |
Это демонстрирует возможность выйти за пределы лимита протокола в 7 хопов.
Как это применить
- Назначайте роли осознанно
ROUTERдля высокогорных вершин.ROUTER_LATEдля заполнения пробелов.-
CLIENT_BASEдома; добавьте в избранные свои портативы. -
Куратируйте избранные
Взаимно добавляйте в избранные все инфраструктурные роутеры и добавьте их в ваш крышный узелCLIENT_BASEкак избранные. -
Тестируйте и отслеживайте
Запустите traceroute до/после добавления в избранные. Наблюдайте, как хопы исчезают.
:::tip
Проектируйте свою mesh так, чтобы все роутеры были в избранных, если позволяет пропускная способность. Это оставляет максимум хопов для живописного маршрутизирования на краю mesh.
:::
Меры безопасности по-прежнему работают
- Раннее/по умолчанию/позднее время все еще действует.
- Дедупликация пакетов работает как ожидается.
- Наибольший эффект на узлах в высоких местах, поэтому злоупотребление маловероятно в хорошо управляемых сетях.
FAQ
Можно ли увеличить лимит хопов больше семи?
Нет, по-прежнему семь. Просто вы получаете больше пользы от каждого хопа.
Это не затопит mesh?
Маловероятно для хорошо управляемых сетей.
Нужны ли изменения прошивки?
Не для клиентов. Только узлы ROUTER, ROUTER_LATE и CLIENT_BASE нужно обновить минимум до 2.7.11 для поддержки этой функции.
Считается ли CLIENT_BASE инфраструктурой?
Для входящего трафика от избранных роутеров — да. Это предотвращает гибель сообщений на крыше до достижения ваших внутренних узлов.
Работает ли traceroute как прежде?
Zero-cost хопы не влияют на traceroute, кроме того, что сам traceroute ограничен 7 хопами.
Пример из реального мира
Для Bay Mesh между Тахо и Сан-Луис-Обиспо более 700 узлов. При тщательном размещении роутеров возможно передавать сообщения на 300 миль, что на LoRa достижимо только с zero-cost хопами из-за рельефа и расстояний.
Используя Meshview, размещенный на bayme.sh, вы можете увидеть zero-cost хопы в действии между Сан-Франциско, Сан-Луис-Обиспо и Тахо.

Готовы экспериментировать?
Выберите два или три стратегических инфраструктурных узла и взаимно добавьте их в избранные.
Наблюдайте, как хопы между роутерами не тратятся.
Сделайте то же для вашего крышного узла CLIENT_BASE и получайте больше сообщений, чем раньше.
Удачного мешинга. Пусть ваши друзья всегда будут в пределах досягаемости.