A quick primer on the Yggdrasil #meshnet:
▶ End-to-end #E2E #encryption between nodes, always, without exception.
▶ New routing scheme based on a globally-agreed spanning tree.
▶ Adapts quickly to changes in network topology.
▶ Works on a range of platforms - including Windows!
▶ Works over existing #IPv4 or #IPv6 networks.
▶ Written in #GoLang.
▶ Should be familiar to anyone who has used #cjdns or is a part of #hyperboria.
https://yggdrasil-network.github.io
https://news.ycombinator.com/item?id=17305885
All testers welcome!
@jankoekepan A globally agreed spanning tree ensures that every node can agree on their position in the network, has a worst-scenario path to other nodes and allows a node to route in almost any direction with only a tiny amount of knowledge about the network. It does indeed use greedy routing, so often shorter more optimal paths can be taken.
@neilalexander Well yes, I get that.
Let me rephrase the question with a scenario:
Bob in Egypt wants to use a cantenna to talk to Chuck in the Gaza Strip. This isn't discussed, isn't prepared, involves no notifications. But the route is up and live.
Now what? Who gets the notification and why? It changes the spanning tree, but why should Ahmed and Abdul in the UK and USA respectively know, or care?
@jankoekepan Ahmed or Abdul in the UK or USA are not likely to know about those changes - their immediate peers, and a small selection of other nodes, will know about it through DHT advertisements. The rest of the network does not need to know about the nodes until a DHT lookup for one of those nodes takes place. Position on the spanning tree is determined relative to your own peers.
@jankoekepan See this current map of my own view of the network for a bit of an illustration - I know about nodes that are close to me, some that are further away, and I can infer that the root of the network and other nodes exist by extrapolating from coordinates.
@neilalexander OK, that's still understood, but what you're doing is pre-emptively calculating and disseminating routes (or parts of routes) with two problems:
a) the routes could easily be outdated before they've finished disseminating, courtesy of Bob annoying the egyptian army
b) the existence of those routes has no demonstrated relevance to the recipients. The odds of Abdul wanting to route to Bob and Chuck aren't nil, but are low.
What about JIT route discovery?
@jankoekepan Your assumptions would be correct if source-routed but Yggdrasil does not use source-routing. The sender doesn't need to know the route, the sender needs to know the coordinates of the destination node in order to "send it in the right direction". The greedy routing promotes that if that route does disappear and the sender doesn't know about it, that some routing around will take place somewhere on the path close to the missing link, as a routing decision takes place at each hop.
I realise that it's not source-routed. That was clear from the outset.
I'm saying that your present scheme involves aggressively propagating data with no guarantee of relevance or timeliness.
This is a problem where you have things like flapping routes, which in a JIT topology-independent discovery system are ignored.
To put it another way: you're specifying a DoS exploit path.
@jankoekepan I'm not entirely sure what you refer to by aggressively populating data - you learn about some other nodes in the DHT so that you have a good selection of nodes to query when you want to look up the coordinates of a remote node. The routing between two sets of coordinates then happens best-effort through shortcuts, or in the worst case, it follows the path of the spanning tree. Take a look at https://yggdrasil-network.github.io/about.html and the white paper. 😀
@neilalexander I already looked at it, I've been keeping half an eye on it for a while.
You're pre-emptively sending data around a set of distant nodes (not just peers) every time you change structure. That's what I mean by aggressively populating data.
What prevents a joined node from spamming with bogus tree updates? What happens when your tree is updated from multiple points at once? How well does it handle parallel updates when the lag is counted in tens of seconds?
@jankoekepan You’re going a little beyond my domain of expertise I think. If you fancy it, join the Matrix or IRC channel and discuss more with Arceliar - the routing scheme is his brainchild and he has a much deeper knowledge of it than I do. 😊 My contributions are largely around usability/platform support.
@neilalexander OK, I'm willing. IRC server/channel?
@jankoekepan #yggdrasil:matrix.org or #yggdrasil on Freenode!
@neilalexander
Why would you need a globally agreed spanning tree? Why not have ad hoc routing, with local topology changes being ignored until relevant? Your way sounds a lot more consensus-heavy.