Памагити я оладушек
Этот текст написан специально для тех кто не понимает почему пакет в мыше иногда идёт очень странно, а иногда даже и совсем не идёт.
1. Нода - это полудуплексный трансивер, т.е. когда она говорит, она НЕ СЛЫШИТ. Соответственно чем более медленный у вас выбран пресет и чем больше вы говорите - тем меньше вы слышите. Причём говорите не только за себя но и за других (когда ретранслируете с ролью client, например). Но в принципе вам может повезти и если рядом не один директ, а количество хопов меньше лимита то потом может услышите ретрансляцию этого пакета с другой ноды.
2. Маршрутизации в мыше НЕТ. Так называемая лавинная маршрутизация - это примерно такая же "маршрутизация", какой метод монте-карло - "метод". Сообщение распространяется следующим образом: нода слышит сообщение отправителя и пишет в очередь, если совпадает хэш расшифровывает и отображает. Если роль ретранслирующая, а количество хопов меньше лимита - увеличивает число хопов на 1 (или не увеличивает если она в цепи zch) и отправляет через случайную задержку. Если сообщение услышано с хорошим rssi считается что отправитель рядом и задержка больше, если с плохим считается что далеко и задержка меньше. Когда задержка истекает нода проверяет очередь, и если там появились сообщения с тем же id и меньшим или равным числом хопов чем в том сообщении что она пытается отправить она его НЕ ОТПРАВЛЯЕТ. Но допустим таких нет и она его отправила.
3. Нода всегда слушает эфир перед отправкой и если он занят - ждёт ещё одну случайную задержку. А потом опять проверяет очередь и слушает... Однако проблема в том что нода может слышать не очень хорошо, ну или находиться за диаграммой направленности какой-то другой антенны, либо ещё одно сообщение идёт к получателю с другой стороны, а отправитель далеко и в принципе не может его слышать. Поэтому там куда долетает сигнал эфир может быть занят и возникнет коллизия: сообщение смешается с другим сигналом в эфире и не будет принято. Либо будет принято, но побьётся (crc не совпадёт), в таком случае, если заголовок был принят корректно оно даже будет отображено с артефактами принявшей нодой, но дальше битое сообщение передаваться не будет.
4. Но допустим эфир свободен, ретрансляций с меньшим или равным числом хопов нода не слышит. Алилуйя, сообщение отправляется дальше. И на следующем хопе всё повторяется. Принято считать что вероятность возникновения какой-либо проблемы на 1 хопе 5-7%. Но это ориентировочные средние значения, может быть как меньше так и больше. Очень сильно зависит от условий связи. А теперь умножьте эту вероятность на количество хопов между вами и адресатом.
Так вот теперь, исходя из прочитанного, вы можете спокойно предположить почему же пакет прошёл через одни ноды, а не через другие. Потому что на одном из хопов нода могла не услышать пакет из за помех или потому что сама говорила в этот момент а отправитель её не слышал. Или задержка оказалась больше чем на другой ноде услышавшей пакет и она не стала отправлять так как его уже отправили. Эта задержка, повторюсь, СЛУЧАЙНАЯ. Также она могла словить коллизию при отправке. Или по той или иной причине следующий хоп пропал из радиовидимости а то и вообще был выключен. Или напротив: была включена другая нода на которой задержка по той или иной причине оказалась меньше. А так как пересылает другая нода, пусть даже рядом, то ноды которые услышат её сообщение и перешлют могут отличаться... Ну и конечно же голубь мог трахнуть антенну. Куда же без этого.