[Routing Behavior] Possible Multi-Device Interface Problem? #605
-
According to Parnikkapore on Matrix, when a packet comes in over an RNode (or other multi-device interface) and best route to the destination is back over the same interface, the packet is dropped to avoid networking issues. The best solution for this I can think of is temporarily adding an extra field containing the address of the next hop when routing over multi-device interfaces like plain RF. I think it’s well worth the extra overhead because it’s the only way to solve this major issue without adding unnecessary network layers or introducing flaws like switching loops etc. |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 2 replies
-
It turns out I completely missed a message from @liamcottle saying
If that is true, this is likely pretty close to a non-issue. |
Beta Was this translation helpful? Give feedback.
-
I'm going to boil this down to brass tacks, a truly terrifying mixed metaphor, and expand from there. Reticulum routes across interfaces. RNode, TCPServer, Serial, whatever. It sends to the next hop based on which interface that next hop is on. When an announce comes in on an interface, it doesn't repeat over that interface because it's assumed that everyone on that interface has heard it. Across practical wired interfaces, this makes sense. Serial, CAN, whatever, it's assumed all stations got the transmissions properly. Data corruption and resends are a different discussion I'm not up to speed on. Over radio, this can't be assured. In fact, the cases when this isn't appropriate are generally all over radio. Both dumb repeaters and addressing the issue of radios being out of range of each other, but not an intermediate peer, require some rebroadcasts in a pure mesh topography. Analog radio deals with this by frequency shifting. A radio on foo.20 MHz may rebroadcast its transmissions on foo.60 MHz, allowing for an expanded broadcast area by effectively being a different station altogether. There are a LOT of finer solutions, such as multiple control frequencies and computer-defined transmit/receive frequencies (see Project 25 Phase 2) but generally speaking, these require far more expensive systems than the SX series chips, and require central command and control. By doing broadcasts over the same radio settings, you effectively take up N*bandwidth for N nodes in range of any given receiver. You can reduce this by reducing the rebroadcasts to only infrastructure repeaters, but when everyone clicks over to being a transport node, then there's no avoiding everything will be rebroadcast and, as noted, any efficiency gained by routing is lost. This generally boils down to competing and incompatible topographies. Routed systems are more efficient than ad-hoc mesh networks, but an ad-hoc mesh network can contact nodes across multiple hops without any sort of planning. It's certainly possible to do this with modifications to Reticulum, or even with an application as-is (plain destinations, encrypted in software, which would only be propagated across the wider network by properly configured bridges). Should it be done? That question can't be answered. The end user is responsible for finding a tool that suits their needs. If they find a novel way to use Reticulum as a pure mesh network and accept the issues therein, that's great. If another tool is a better fit, then perfect! No solution can cover every use case, and any system that tries will either fail or be a bloated compromise. Now, the curious and astute will ask "What about TCP? If you don't repeat over an interface, then how could that possibly work?" TCP Interfaces list each individual IP connection as a discrete sub-interface. So when Alice gets an announce from Bob, be that directly or through a transport, then she'll send the announce to Claire and David across their individual sub-interfaces, but not to Bob, since that's really a point to point connection. At the end of the day, Reticulum does not suffer from the loop issue or mass re-broadcast issues as-is. It was built for routed efficiency. In certain cases over radio, this causes issues and people would like to see those issues resolved. It's possible these are fundamental issues that can't be resolved either entirely or with the RNS specifically. Some of them can be solved at the application level (opportunistic messages, pre-shared keys, direct RNode access, etc. combined with proper interface modes to prevent announce bleed). Some are genuine issues that need serious thought. Like the Matrix discussion which shows that this, perhaps, is a generally unsolvable problem at the stack level, and Reticulum mesh networks may be best assembled as a purely application-driven system, only using RNS to route over infrastructure endpoints. Does that answer the direct questions and explain the overall situation and why the question was posed in the first place? I'm still half asleep. |
Beta Was this translation helpful? Give feedback.
-
I completely agree, since this is already how it works :) Consider the following scenario: Node B can hear both node A and C on the same radio interface, but A and C cannot hear each other. Any announces originating from either A or C will be heard by B, and inserted into the path table on B.
Hope that clears things up a bit. What @faragher points out here is still relevant though, but I'd like to offer one clarification. Reticulum does indeed not flood route or mindlessly rebroadcast anything, but a limited amount of announce rebroadcasts can actually occur, even on radio interfaces, provided they are in the |
Beta Was this translation helpful? Give feedback.
-
This all makes a lot more sense now, thank you both for clearing it up ❤️ |
Beta Was this translation helpful? Give feedback.
I completely agree, since this is already how it works :)
Consider the following scenario: Node B can hear both node A and C on the same radio interface, but A and C cannot hear each other. Any announces originating from either A or C will be heard by B, and inserted into the path table on B.