Routování zpráv v MeshCore

Direct routing

(poslání konkrétní protistraně napřímo)

Příklad situace: s někým jsem si vyměnil klíče a můžeme si tedy vzájemně napsat zprávu. Oba jsme se rozjeli na opačný konec sítě. Toto je popis, jakým způsobem se rozhoduje routování, když se rozhodneme si v takovém okamžiku napsat:

  1. odesilatel nemá direct cestu k protistraně, pošle zprávu jako flood (doslova záplava)
  2. každý repeater co ho slyší, k tomu přilípne svoje ID (první bajt pubkey) jako „šlo to tudy“, zopakuje a nacachuje si ji na chvilku, aby věděl, že tuhle už posílal, až ji uslyší od dalších repeaterů
  3. eventuálně to takhle probublá kusem sítě a dorazí to k adresátovi a ten vidí „aha, to je pro mě“
    1. síť neví, že už to bylo doručené, adresát to klidně ještě uslyší z více směrů, ale už mu to je jedno, už to dostal
  4. adresát odešle odesilateli zprávy ACK (doručenku) se sekvencí prvních bajtů public key každého repeateru, přes který to k němu šlo - opět jako flood (direct ack by měl asi problémy se spolehlivostí, pokud by nedostal ještě ack-ack, ale tohle není TCP :-) )
  5. odesilatel dostane ack a „cestu“ tvořenou sekvencí ID repeaterů - tu si uloží a odteď to tomuto adresátovi bude posílat directem přesně tudy, dokud na nějakou odeslanou zprávu již nedorazí ack - v takovém případě to zase zkusí floodem od bodu jedna a potenciálně si vytvoří jinou cestu

Další zpráva, tím samým směrem, tentokrát direct:

  1. odesilatel pošle zprávu adresátovi a do packetu vloží tu sekvenci IDéček jako předepsanou cestu.
  2. Každý repeater, co to uslyší, si porovná ID na začátku cesty se svým a jestli je stejné, z cesty to první ID odřízne a packet zopakuje, jinak ho zahodí - další repeatery postupují stejně.

Čili o routě má hlavní slovo odesílající zařízení, repeatery už to jen na základě jednoduchých podmínek pošlou dál nebo ne. O konkrétní routě tedy rozhoduje, kudy se zpráva do destinace dostane jako první.

Některé aspekty jsou v popisu technicky zjednodušené, slouží hlavně k popsání principu.