Today

Памагити я оладушек

Этот текст написан специально для тех кто не понимает почему пакет в мыше иногда идёт очень странно, а иногда даже и совсем не идёт.


1. Нода - это полудуплексный трансивер, т.е. когда она говорит, она НЕ СЛЫШИТ. Соответственно чем более медленный у вас выбран пресет и чем больше вы говорите - тем меньше вы слышите. Причём говорите не только за себя но и за других (когда ретранслируете с ролью client, например). Но в принципе ей может повезти и если рядом не один директ, а количество хопов меньше лимита то потом может услышит ретрансляцию этого пакета с другой ноды.


2. Маршрутизации в мыше НЕТ. Так называемая лавинная маршрутизация - это примерно такая же "маршрутизация", какой метод монте-карло - "метод". Сообщение распространяется следующим образом: нода слышит сообщение отправителя и пишет в очередь, если совпадает хэш расшифровывает и отображает. Если роль ретранслирующая, а количество хопов меньше лимита - увеличивает число хопов на 1 (или не увеличивает если она в цепи zch) и отправляет через случайную задержку. Если сообщение услышано с хорошим rssi считается что отправитель рядом и задержка больше, если с плохим считается что далеко и задержка меньше. Когда задержка истекает нода проверяет очередь, и если там появились сообщения с тем же id и меньшим или равным числом хопов чем в том сообщении что она пытается отправить она его НЕ ОТПРАВЛЯЕТ. Но допустим таких нет и она его отправила.


3. Нода всегда слушает эфир перед отправкой и если он занят - ждёт ещё одну случайную задержку. А потом опять проверяет очередь и слушает... Однако проблема в том что многие ноды слышат не очень хорошо, ну или находятся за диаграммой направленности какой-то другой антенны, поэтому там куда долетает их сигнал эфир может быть занят и возникнет коллизия: сообщение смешается с другим сигналом в эфире и не будет принято. Либо будет принято, но побьётся (crc не совпадёт), в таком случае оно даже будет отображено с артефактами принявшей нодой, но дальше битое сообщение передаваться не будет.


4. Но допустим эфир свободен, ретрансляций с меньшим или равным числом хопов нода не слышит. Алилуйя, сообщение отправляется дальше. И на следующем хопе всё повторяется. Принято считать что вероятность возникновения какой-либо проблемы на 1 хопе 5-7%. Но это ориентировочные средние значения, может быть как меньше так и больше. Очень сильно зависит от условий связи. А теперь умножьте эту вероятность на количество хопов между вами и адресатом.

Так вот теперь, исходя из прочитанного, вы можете спокойно предположить почему же пакет прошёл через одни ноды, а не через другие. Потому что на одном из хопов нода могла не услышать пакет из за помех или потому что сама говорила в этот момент. Или задержка оказалась больше чем на другой ноде услышавшей пакет и она не стала отправлять так как его уже отправили. Эта задержка, повторюсь, СЛУЧАЙНАЯ. Также она могла словить коллизию при отправке. Или по той или иной причине следующий хоп пропал из радиовидимости а то и вообще был выключен. Или напротив: была включена другая нода на которой задержка по той или иной причине оказалась меньше. А так как пересылает другая нода, пусть даже рядом, то ноды которые услышат её сообщение и перешлют могут отличаться... Ну и конечно же голубь мог трахнуть антенну. Куда же без этого.