Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни.

«Мышастик» и широковещательные пакеты

Разбираюсь с тем, как работает меш-сеть «мышастик» («meshtastic»), устройство для общения через которую я недавно купил. Пока я прочитал только как распространяются широковещательные пакеты, которые используются для общения в чатах. То есть конкретного адресата у них нет.

Я заметил, что такие пакеты распространяются будто бы хуже всего — в казанской сети много прорех, но хотелось разобраться почему связность как будто бы есть, а чаты рассинхронизированы — на каждом устройстве своя собственная картина чата.

Я себе представлял работу сети так, что если через какую-то точку между собой связаны два сегмента, то чаты с одним и тем же названием у всех будут синхронны. Оказывается, в реальности всё иначе.

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

В общем, внимание на картинку.

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

Раньше начинает вещать красное, жёлтое же, поймав мой пакет от красного, видит, что его уже кто-то пересылает и не делает ничего — так ему диктует протокол.

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

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

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

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

Адресные пакеты работают иначе, но я ещё не разобрался детально, расскажу в другой раз.

Ctrl ←Жюри