RNS Logo

rns.recipes

◈ 9ce92808be498e9e05590ff27cbfdfe4

Question about RNS and announce

Question Discussion

Started by Boltic ·

Boltic
#1

Hello, I hope you’re doing well—and don't forget to drink some water! :)
First of all, thank you for all your hard work.

 

There’s something I’ve been thinking about: right now, announce are made for everything—lxmf, lxst, nomadnet, maps, and so on. Even if we assume there were only a single type of announce (which isn't the case), what happens if the user base grows significantly? We aren't anywhere near that point yet, but what about the future? Would the network collapse, or is there a solution you're considering? What if the network expands and people intentionally try to flood it with announce? I’ve heard that only a small percentage of bandwidth is used for announce, but I imagine a massive volume of them could still cause problems, right? I’ve wondered if there’s a way to prevent every announce from being propagated across the entire network—though I’m not sure what the best approach would be. How do other decentralized systems handle this? What are the available options? To be honest, I’m a bit concerned about these issues regarding the network's future...

Anonymous
#2

The announce bandwidth limit defaults to 2% I believe which leaves the majority free for data.

lucas 6f5cf15076055f7d...
#3

This is the issue that some poorly designed applications have also introduced, where they spam announcements. There have been attempts to curb this, but I think the full solution is still in the air.

LinuxinaBit 2b4116b574e3a4f3...
edited #4

There's rate-limits and mechanisms to ensure local paths will always resolve in that kind of situation, but at a certain level of growth the path request mechanism and high-bandwidth backhauls become a lot more important.
Networks get to the point where they start needing to be well designed and thought out in how they are able to handle announce propagation, because you can't send millions of announces per hour over a single 915 MHz LoRa link no matter how hard you try.

Boltic
#5

And the internet itself wouldn't even be able to handle that volume of announcements! It would cause massive traffic and incur huge costs—just imagine if this network attracted 50 million users, or even more! Hundreds of millions, or beyond...

 

I keep wondering: is there actually a practical way to do this? It’s certainly a tough challenge, but I’d be really disheartened if it turned out to have no answer or solution.

Boltic
#6

First, I apologize for the poor structure of my writing (Translator).

 

Anonymous wrote:

The announce bandwidth limit defaults to 2% I believe which leaves the majority free for data.

 

That’s true, but if the number of "Announce" requests becomes excessive, I don't think it would remain effective; plus, it would disrupt network interactions, wouldn't it? Not to mention the heavy load it would likely place on the servers...

 

lucas wrote:

This is the issue that some poorly designed applications have also introduced, where they spam announcements. There have been attempts to curb this, but I think the full solution is still in the air.

 

Yeah, actually, I assumed that since Yggdrasil doesn't prioritize bandwidth, it would use a method that avoids this issue; however, I found that it doesn't handle very high user loads well either. I hope this gets addressed—I haven't seen any discussion or solutions regarding it so far, which is why I wanted to bring it up.

Anonymous
#7

Reticulum does not need to be or does not even try to be "one network". Its bigger values are in resilient community-run, self organized networks I think. Does not answer your question, but I think the importance of it (the question) is not as high as it seems.

NONGKHAEM_BKK_TH e23e9a470d42f05d...
#8

I will try to answer your question in this post, but please don't quote me on it, given I’m still a beginner myself, setting up a network for a home project. My project is 5 dog collars GPS tracker for my dogs, and a 14 meter high LoRa antena on the roof connected to my server, relaying that data via TCP to my phones. Dog go too far == notification. You get the idea.

 

 

So the standard answer to “but can’t someone just flood the network by bombarding it with announces” is that if you have a setup like mine, you should set your home server TCP/IP interface to "boundary” and your LoRa interface to 'access point'. This way, the rnodes in the field can still do path requests if they need to, but the announces flood never makes it to them.

 

In addition, people have tested this and noticed that even if they forgot to the above, the 2% bandwidth default kicks, and apparently it works very well, one guy on reddit was able to switch bandwidth in real time and found he could change the spread factor and see the announce traffic vary accordingly, which if you ask me is pretty f**king cool :)

 

I am VERY aware your question extends far beyond just announces, but I hope this alleviates the worries you may have for your own LoRa nodes :)

Boltic
#9

Anonymous wrote:

Reticulum does not need to be or does not even try to be "one network". Its bigger values are in resilient community-run, self organized networks I think. Does not answer your question, but I think the importance of it (the question) is not as high as it seems.

 

Well, the interconnection of various networks and the large population...?

 

 

NONGKHAEM_BKK_TH

 

 

My assumption was—well, for instance—that we were going to completely move away from the current internet; but thanks anyway.

 

Thank you; I’ll try to read up on it, and I hope I can understand it, even though I'm not very familiar with these kinds of things.

Anonymous
#10

Well you could, I am just saying what I think the focus is, or what I think is where it matters the most to use it. Also, dont expect the exact same thing as the current internet obviously, otherwise why start anew?

Boltic
#11

Anonymous wrote:

Well you could, I am just saying what I think the focus is, or what I think is where it matters the most to use it. Also, dont expect the exact same thing as the current internet obviously, otherwise why start anew?

 

Since the current internet isn't ours—meaning we can't simply add a vast number of devices to it, nor can every single device function as its own network—there are many reasons why this differs from the existing internet. I don't necessarily mean a widespread TCP connection; it could be TCP, or connecting to Reticulum via the current internet, or even Reticulum replacing the internet on a larger scale—supporting both high and low bandwidths. Consider devices that have Reticulum installed, where a large number of users are interconnected...

Anonymous
#12

Anonymous wrote:

Well you could, I am just saying what I think the focus is, or what I think is where it matters the most to use it. Also, dont expect the exact same thing as the current internet obviously, otherwise why start anew?

 

Does rns have a technical potential to handle a network as large as the internet?

Anonymous
#13

Internet scale? I'm gonna assume you mean billions of destinations.

 

The two limitations would be processing speed (at internet scale probably gonna end up with hardware acceleration of some form similar to TCP and very optimised software) and the path table.

 

The path table would need to cache stuff in memory for speed (eg active links) and would need to store billions of anounces (although full network announce convergence might not happen at that scale but would be mitigated by path requests allowing for the fetching of announces from nodes that have seen it).

 

The decentralised nature would probably help since there would likely be multiple ways to a destination which would reduce load on individual nodes

 

The address space is 16 bytes which can be expanded easily with a simple code change (would be complicated for backwards compatibility however).

 

A comment in the source code says something about ~55,100 path entries per MB of storage but I'm not sure that's entirely accurate

Anonymous
#14

Anonymous wrote:

Internet scale? I'm gonna assume you mean billions of destinations.

The two limitations would be processing speed (at internet scale probably gonna end up with hardware acceleration of some form similar to TCP and very optimised software) and the path table.

The path table would need to cache stuff in memory for speed (eg active links) and would need to store billions of anounces (although full network announce convergence might not happen at that scale but would be mitigated by path requests allowing for the fetching of announces from nodes that have seen it).

The decentralised nature would probably help since there would likely be multiple ways to a destination which would reduce load on individual nodes

The address space is 16 bytes which can be expanded easily with a simple code change (would be complicated for backwards compatibility however).

A comment in the source code says something about ~55,100 path entries per MB of storage but I'm not sure that's entirely accurate

 

I have a use case that is easy on the internet but i am not sure will be simple in a global scale reticulum network. Multiplayer gaming without server. If one player creates a game, the thing that happens is that the game just needs to open a listening socket and after that it can accept connections immediately. With rns, it needs to send an anounce AND the anoince needs to get to all the other players, which i think won't be immediate. I forsee apps will start semdomg anonces even when they don't need them to have a routable destination just in case.

LinuxinaBit 2b4116b574e3a4f3...
edited #15

Anonymous wrote:

The two limitations would be processing speed (at internet scale probably gonna end up with hardware acceleration of some form similar to TCP and very optimised software) and the path table.

 

Correct; optimized nodes would be necessary, at least on the larger scale backhauls. Keep in mind that you also start to need also an optimized network too.

 

The path table would need to cache stuff in memory for speed (eg active links) and would need to store billions of anounces (although full network announce convergence might not happen at that scale but would be mitigated by path requests allowing for the fetching of announces from nodes that have seen it).

 

That's correct, full announce convergence will not happen at that scale. A basic version of that comes from the 2% bandwidth announce limit, but remember what I said about how you start needing optimized network!

 

Interface modes and manual configuration become really important at global scale, because the correct interfaces have to given the correct interface modes in order to steer announce propagation towards efficiency.

 

Once those interface modes are in place, path requests become the way distant nodes are accessed. Of course you still get all of Reticulum's normal functionality in your home and community, so it's not like we're just re-creating BGP from scratch or anything like that.

 

A comment in the source code says something about ~55,100 path entries per MB of storage but I'm not sure that's entirely accurate

 

Remember how addresses are 16 bytes? 1000000/16=62500 so with a few bytes of headroom for other stuff, like the next hop interface, you get pretty close assuming everything's well optimized.

 

I did the math a while ago and a large central network node/switch could store 11 billion paths in memory with only 200GB of RAM (assuming hardware acceleration so it uses very little RAM for other things). In server applications, 1TB of RAM isn't unusual but it is very expensive. Remember that in most cases it's actually fine if stuff at the end of the path table is thrown out because of path requests.

Anonymous
#16

Anonymous wrote:

Anonymous wrote:

Internet scale? I'm gonna assume you mean billions of destinations.

The two limitations would be processing speed (at internet scale probably gonna end up with hardware acceleration of some form similar to TCP and very optimised software) and the path table.

The path table would need to cache stuff in memory for speed (eg active links) and would need to store billions of anounces (although full network announce convergence might not happen at that scale but would be mitigated by path requests allowing for the fetching of announces from nodes that have seen it).

The decentralised nature would probably help since there would likely be multiple ways to a destination which would reduce load on individual nodes

The address space is 16 bytes which can be expanded easily with a simple code change (would be complicated for backwards compatibility however).

A comment in the source code says something about ~55,100 path entries per MB of storage but I'm not sure that's entirely accurate

I have a use case that is easy on the internet but i am not sure will be simple in a global scale reticulum network. Multiplayer gaming without server. If one player creates a game, the thing that happens is that the game just needs to open a listening socket and after that it can accept connections immediately. With rns, it needs to send an anounce AND the anoince needs to get to all the other players, which i think won't be immediate. I forsee apps will start semdomg anonces even when they don't need them to have a routable destination just in case.

 

I'm not convinced there's a use case where you need a destination globally reachable instantly and can't wait a few seconds. The example of hosting a multiplayer game would take time for people to decide to connect to that hosted game or enter it's address, etc.

Post a Reply

Supports Markdown: **bold**, *italic*, `code`, ```code blocks```, [links](url)

Log in to upload images

Quote
Copied to clipboard