Requesting Ideas for Multi-Hop Group Destinations #705
Replies: 7 comments 22 replies
-
Referencing the comment I made over here, as it is also relevant for this discussion. |
Beta Was this translation helpful? Give feedback.
-
One of the ideas I've had for a while is almost identical to the 3rd one @faragher mentioned: #705 (reply in thread) which proposes splitting a list of all recipients at each hop. The first solution I can think of for that problem is to somehow allow multiple nodes to announce what is effectively the same destination over the network. Another possibility is to do it almost entirely on the application layer, effectively forming an LXMF propagation net but for a private group chat. This could also be coordinated on a network level by forming some kind of hybrid Group/Link destination where some routing topology is constructed between group members based on hop count. A ton of bandwidth could be wasted coordinating and arranging these links though? In the end the only network layer multicast system I can think of that's actually efficient is the first one I mentioned, though I really can't shake the feeling that something else is out there that I'm just not seeing. |
Beta Was this translation helpful? Give feedback.
-
If the propagation nodes held and synched the members of a group
destination rather than holding the group members in the message or in the
originator, the network could most effectively duplicate the message
whenever that makes sense.
…On Tue, Feb 11, 2025, 9:39 PM faragher ***@***.***> wrote:
You are correct that any non-IFAC message lists its recipient openly. It's
a minor risk that's effectively unavoidable. Without access to the
destination a packet can't be routed, and any access for a transport node
is either insecure or basically IFAC.
You are also correct that bundling destinations together presents a risk
for network-centric analysis (the human kind of network, not the
technological kind).
However, I believe these issues are generally insurmountable. Any
technical work-around quickly runs afoul of some other issue, such as the
routing failing or seeing the same patterns of different destinations so an
onlooker just sees, "Oh, those six people are chatting again, they just
have different destinations now." Frankly, on a sliding scale with
efficiency on one side and security on the other, an application designed
for maximum security would bite the bandwidth bullet and do point to point
communications with each station. Any time you link two people, you start
an association matrix, so any multicast would, effectively, link people
together.
But I think where you sit on that scale is application layer.
I haven't read too much into ACOM, but broadcasts to all stations are very
inefficient, and anything that requires a designated topography or trust
won't work reliably over Reticulum.
Now, this is all network-level. You can do strange things at the
application level, such as having trusted servers with the keys to an
encrypted destination list, but then you're on a subnet and you need to
establish a number of trusted servers and we have a whole new level of
problems. It's worth separating the concept of multicast with specialized
high-security applications so as to not chase two rabbits.
—
Reply to this email directly, view it on GitHub
<#705 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AEKP7JZFZHU6VZRCE3TMVAL2PK65RAVCNFSM6AAAAABWITY7Y6VHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTEMJWGAYTGNA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Allowing an incoming query for a group destination to trigger local storage
for that destination could keep the distribution lean. No need to
replicate where nobody is asking for that destination. How to identify
admins who can edit group members in a problem to solve. An attribute in
the list structure maybe.
…On Tue, Feb 11, 2025, 10:38 PM faragher ***@***.***> wrote:
It is interesting, however it contains all the same issues as routing does
regarding the destinations/access list. It's a good alternate way of
looking at things, however. I mean, the most absurd idea I had was to send
a notification via direct message which contained a key, then have a hashed
messageID that relies on that key hashed with the destination, and have
THAT be an access list, but it still fails network analysis and efficiency
goals.
Still, very interesting. The concept of requesting a message through a
hash rather than by a destination has some merit. It's just important to
make sure we're not confusing "extra steps" with "solving the problem." I
know that happens to me too often. Ask me about this custom power
distribution block I designed that was literally three light switches.
—
Reply to this email directly, view it on GitHub
<#705 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AEKP7J5SZV6VC2USPMZ7UW32PLF43AVCNFSM6AAAAABWITY7Y6VHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTEMJWGA3TMMI>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Ok, here’s a better idea, combining some of the previous approaches. For this idea, Group Destination announces would contain:
Packets are addressed to the group ID, and transport nodes automatically send it down multiple paths to get to smaller groups of nodes as announces diverge. This creates a problem; it could easily end up creating many duplicate transmissions, getting exponentially worse for larger groups. To remedy this, hash each of the individual addresses to which each packet is headed, and append them somehow to the packet before its first split. If more individual addresses than fit inside the limit on the hash list's length are needed, multiple packets can be sent, each with different hash lists. These may be able to be combined at different nodes where possible. Is this a sound idea? Example (simplified for readability)Alice, Bob, Charlie, Dan, Erin, and Frank are in a group. Each announces, Group ID - 72C followed by 7A, B2, C9, D0, E3, and F5 for each participant respectively Alice wants to sent a packet to the group. Announces 7A, B2, and C9 come from Node 1, D0, E3, and F5 come from Node 2. Alice sends two packets:
Nodes 1 and 2 determine that the best path towards Charlie, Dan, and Erin is Node 3, the best path towards Alice and Bob is Node 4, and the best path towards Frank is Node 5. From Node 1:
From Node 2:
Node 3 combines the two packets it received as the best path to all three destinations is Node 6, and the packet contents are identical. From Node 3:
From Node 4:
From Node 5:
From Node 6:
Hopefully this helps explain things somewhat. |
Beta Was this translation helpful? Give feedback.
-
I think having a simplistic topology to talk through might help. Visually it makes sense that some of these nodes are going to possibly get some messages twice, and they need to know what to do with them. For very large groups, having something in the message for all members seems to be like a lot of overhead... It is good to talk through ideas. |
Beta Was this translation helpful? Give feedback.
-
In a completely different universe each group messaging LXMF type transport node could keep the group messages for a given group address for x amount of time, and if anyone asks them for the messages passed a certain timestamp as long as they are on the list of people in that group, the server could just hand them over. In this way LXMF does it's job, and people can go to any server any time and ask for messages for a group so far back. Central routing as a push, last hop as a client software pull or even a push based on announce, like LXMF works today. LXMF already knows how to auto=peer, and how to not send the same info multiple times if it happens to have already gotten it from another peered LXMF node. The idea of identity in presenting yourself to the LXMF node seems to already built in as well.. or could be elevated if need be. Generally I think for the last hop delivery those messages should be encoded to the final recipient. Messages sitting on the lxmf servers need to be encrypted in a way that physically getting that server does not allow access to the contents. Clients could auto check in with their favorite LXMF server once a day or however often, like Meshchat already knows how to do today. Core issues would be what if 100 peers ask to get caught up on the same group with 10 meg messages all at once? In my brain we have to have a way to say come back later, I'm busy. Maybe even spread-schedule a future time to come back if the node is busy so it's spreading out the load over time. A client could register with an LXMF node and let it know that it prefers to do a last hop pull because it is 99% offline. The other beauty of this system is that if parts of the network go away... it all self recovers when it comes back up. There are more copies that can be auto-discovered in LXMF and the "few weeks" of messages can all get re-built. For a given group, denoted by an lxmf address in my brain, the specific server does not store that group at all if nobody is asking for it from that server. It only stores the master list of groups and their members, but does not sync a group that no clients have asked it for. Just ideas for now. |
Beta Was this translation helpful? Give feedback.
-
Seeing as 'group chat' is such a popular feature request, I figured I'd make a place to put down ideas/proposals for how to make the foundational requirement for the functionality, multi-hop group destinations (aka. true multicast), work.
Getting the group messaging working is (relatively) easy, but making truly efficient and reliable multicast that fully supports end-to-end and forward secret encryption and works alongside Reticulum's current routing protocols is very difficult.
Here is a list of all the requirements that I could think of:
If anyone has any changes/additions they would like to make to this list, please let me know.
I'm not sure how much Mark has thought about this (my guess is a lot), but other people's ideas might still help provide some inspiration.
Beta Was this translation helpful? Give feedback.
All reactions