zero-cost-hops-for-favorite-routers

Что если сообщения могли бы проходить через вашу mesh-инфраструктуру за один хоп?
Что если вы могли бы связать два города на расстоянии 600 миль через LoRa и все равно иметь запас хопов?
Что если более быстрый пресет требует вдвое больше хопов, чтобы достичь ваших друзей, но у вас нет запасных хопов?

Именно это Zero-Cost Hops открывает для вашей mesh.

{/ truncate /}

Blursed image of a hopscotch game with multiple 3s and 4s written on the squares

TL;DR

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

Почему это важно?

Когда применяются Zero-Cost Hops?

Хоп сохраняется, если все эти условия верны:

  1. Роль узла — ROUTER, ROUTER_LATE или CLIENT_BASE.
  2. Это не самый первый хоп пакета.
  3. Предыдущий ретранслятор находится в ваших избранных и имеет роль ROUTER или ROUTER_LATE.

Пропустите хоть одно условие — и счетчик хопов уменьшится как обычно.

Чего это не касается

Обнаружение «избранных» и реализация

Чтобы 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. Простой городской пример в центре

Настройка

Путь

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. Домашняя база, хребет на вершине холма

Настройка

Маршрут хопов начиная с 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 хопов.

Как это применить

  1. Назначайте роли осознанно
  2. ROUTER для высокогорных вершин.
  3. ROUTER_LATE для заполнения пробелов.
  4. CLIENT_BASE дома; добавьте в избранные свои портативы.

  5. Куратируйте избранные
    Взаимно добавляйте в избранные все инфраструктурные роутеры и добавьте их в ваш крышный узел CLIENT_BASE как избранные.

  6. Тестируйте и отслеживайте
    Запустите 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 хопы в действии между Сан-Франциско, Сан-Луис-Обиспо и Тахо.

Zero-cost hops mesh view

Готовы экспериментировать?

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

Удачного мешинга. Пусть ваши друзья всегда будут в пределах досягаемости.