====== 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: - odesilatel nemá direct cestu k protistraně, pošle zprávu jako flood (doslova záplava) - 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ů - eventuálně to takhle probublá kusem sítě a dorazí to k adresátovi a ten vidí "aha, to je pro mě" - 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 - 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 :-) ) - 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: - odesilatel pošle zprávu adresátovi a do packetu vloží tu sekvenci IDéček jako předepsanou cestu. - 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.