Простое объяснение
MeshCore - это радиосеть, состоящая из множества небольших ретрансляторов. Когда вы отправляете сообщение, происходит следующее:
Это называется лавинной маршрутизацией (flooding). Такой подход надёжен и прост, но у него есть особенность: каждое сообщение от каждого пользователя повторяется каждым ретранслятором в сети.
Разберём это шаг за шагом. «Компаньон» - это ваше устройство: смартфон и MeshCore Companion. Каждый ретранслятор, который слышит сообщение, повторяет его ровно один раз. Посчитаем, сколько раз одно сообщение занимает радиоканал, включая вашу собственную передачу:
| Конфигурация | Передач на одно сообщение |
|---|---|
| Один компаньон, один ретранслятор | 2 |
| Один компаньон, два ретранслятора | 3 |
| Один компаньон, четыре ретранслятора | 5 |
Закономерность проста: одна передача от вас плюс одна от каждого ретранслятора в зоне приёма. Каждый ретранслятор, который вас слышит, добавляет ещё одну передачу к каждому сообщению.
И вот в чём проблема: в густонаселённой зоне, где десять ретрансляторов слышат друг друга, даже одно короткое сообщение уже занимает канал одиннадцать раз. Одиннадцатый ретранслятор не улучшает покрытие - территория уже давно покрыта, но делает каждое сообщение для всех пользователей на одну передачу дороже. Больше ретрансляторов - не всегда лучше: как только покрытие обеспечено, каждый дополнительный ретранслятор лишь расходует общее эфирное время.
Среднее время передачи одного пакета можно вычислить по статистике ретрансляторов:
Среднее время передачи = общее время TX ÷ количество отправленных пакетов
| Ретранслятор | Общее время TX | Отправлено пакетов | Среднее время TX на пакет |
|---|---|---|---|
| Flower | 132 455 с | 247 165 | 536 мс |
| RatSchen | 112 575 с | 221 376 | 509 мс |
| MU2 | 133 516 с | 257 796 | 518 мс |
| Silo3 | 124 073 с | 246 581 | 503 мс |
| GHETTO | 238 985 с | 407 917 | 586 мс |
Таким образом, один пакет занимает радиоканал примерно на полсекунды.
В Meshcore существует параметр duty cycle (начиная с прошивки 1.15 используется вместо аналогичного по смыслу параметра airtime factor). Duty Cycle ограничивает, какую долю времени в процентах узел может занимать радиоэфир передачей.
По умолчанию установлено значение 50% (эквивалент airtime factor 1.0).
Простыми словами, Duty Cycle = 50% означает, что из 1 часа устройство может передавать суммарно около 30 минут. Остальное время оно должно молчать и только принимать.
Это нужно для:
Макс. пакетов в час = 3600 секунд * ограничение ÷ среднее время передачи одного пакета
Пример расчёта для Flower:
3600 с * 50% ÷ 0,536 с = 3358 пакетов/час
| Ретранслятор | Среднее время TX на пакет | Макс. пакетов/час |
|---|---|---|
| Flower | 536 мс | 3358 |
| RatSchen | 509 мс | 3536 |
| MU2 | 518 мс | 3475 |
| Silo3 | 503 мс | 3579 |
| GHETTO | 586 мс | 3072 |
То есть в среднем около 3400 пакетов в час - и это абсолютный максимум.
Эти 3400 пакетов в час - не на одного пользователя, а на всех пользователей вместе взятых.
Неважно, 5 человек в сети или 500: каждый ретранслятор может переслать только этот общий объём пакетов. Если одновременно пишут 50 человек, они делят между собой один и тот же ресурс.
Аналогия: представьте телефонную будку, в которой доступен только один час разговоров в день. Пользуется ею один человек или сто - этот час всё равно только один.
Когда сеть растёт, существует только один способ увеличить её пропускную способность: разделить сеть.
Регион - это ограниченная территория со своими ретрансляторами. Сообщения из региона A не пересылаются в регион B. В результате:
Без регионов одна большая сеть неизбежно достигнет предела при определённом количестве пользователей. После этого сообщения будут приходить с задержкой или не будут доставляться вовсе, потому что ретрансляторы исчерпают разрешённое время передачи.
Регионы работают лучше всего, когда они построены как концентрические круги - от меньшего к большему:
🌍 Родительский регион (например, Россия)
└─ 🏙️ Город/район/регион (например, Московская агломерация)
└─ 🏘️ Город (например, Москва)
└─ 🏠 Городской округ (например, Северный Административный Округ)
У каждого уровня есть собственные ретрансляторы и собственный ресурс эфирного времени. Если кто-то общается в САО, это не нагружает ни всю Москву, ни соседей в ЗАО.
ru, ru-mow-msk, ru-mow-mosobl. Тогда сразу понятно, для чего предназначен регион.Ретранслятор содержит список регионов. Но его ресурс эфирного времени - примерно 3400 пакетов в час - это всего лишь один общий ресурс. Этот ресурс делится между всеми регионами, которые обслуживает ретранслятор.
Если пометить ретранслятор четырьмя регионами, эти четыре региона начинают конкурировать за один и тот же ресурс. Вы не создаёте четырёхкратную пропускную способность - вы заставляете четыре региона делить один общий ресурс. Перекрывающиеся регионы получают время передачи совместно, а не каждый отдельно.
Когда это происходит повсеместно - многие владельцы ретрансляторов назначают своим ретрансляторам сразу несколько регионов - эти регионы фактически снова объединяются в одну большую сеть. Именно это и произошло в широком масштабе после введения регионов: намерение («быть доступным везде») понятно, но результат противоположен самой идее регионов - трафик регионов снова смешивается.
Помните: назначайте каждому ретранслятору только минимально необходимый набор регионов, которые он действительно обслуживает. Ретранслятор на границе провинций может оправданно иметь два региона; ретранслятор, отмеченный пятью регионами, просто заново создаёт одну большую сеть.
Для каждого сообщения выбирайте самый маленький регион, который охватывает всех нужных получателей.
Три примера:
| Что вы хотите сделать? | Правильный регион |
|---|---|
| Написать соседу за углом | 🏠 Локальная группа |
| Задать вопрос всем жителям вашего города | 🏘️ Город |
| Передать предупреждение всему сообществу | 🌍 Родительский регион |
Если вы публикуете сообщение, относящееся только к вашему району, в большом регионе, тогда:
Одно сообщение, отправленное в неправильный регион, расходует во много раз больше эфирного времени, чем то же сообщение в правильном маленьком регионе. При большом количестве пользователей это быстро превращается в узкое место.
Помните: чем больше регион, тем дороже для сети каждое сообщение. Всегда отправляйте сообщения настолько локально, насколько это возможно, и настолько широко, насколько это необходимо.
Каждый ретранслятор имеет жёсткий лимит примерно в 3400 пакетов в час. Этот лимит совместно разделяют все пользователи сети. Регионы - это не бюрократия, а единственный способ сохранить масштабируемость сети при большом количестве пользователей. И ещё: тот, кто отправляет сообщения в максимально маленьком подходящем регионе, оставляет больше эфирного времени всем остальным.