How does reticulum deal with packet loss?
Started by welo ·
I was expecting there to be some footnote about this in https://reticulum.network/manual/understanding.html but there isn't any information on this specifically
I figure that for single, group or plain destinations that if the packet doesn't make it, it just doesn't make it. But what about for link destinations, if some data in a link doesn't get to the destination is there any mechanism to re-transmit this data or is just lost? Do applications just have to built around this or is there any higher level tcp-like abstraction that can be used?
As I read the spec, it seems to me that RNS packets are akin to UDP datagrams, fire-and-forget. I think we're early enough that there's no TCP equivalent - yet.
Fire and forget is for opportunistic, if it's above MDU over direct Link it goes into resource which has handling for packet tracking/loss.
I am sure Mark or someone more technical can reference the code directly.
there is this https://markqvist.github.io/Reticulum/manual/reference.html#RNS.Channel.Channel and arguably https://markqvist.github.io/Reticulum/manual/reference.html#RNS.Resource but they are only mentioned in the api so I didn't see them previously
I was just about to post this but it seems you figured it out!
Using the abstractions defined in the Reticulum API Reference you can:
-
get delivery confirmation on a single Packet to a Destination only if the recipient decides to send you back proof of receipt.
-
reliably send data larger than a single Packet to a Destination by transferring a Resource over a Link.
-
reliably send ordered packets back and forth with a Destination via a Channel over a Link (I don't see the ordering guarantee in the docs but appears implemented in the code)
a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/reference.md