Yggdrasil Network

Yggdrasil Network

The Yggdrasil Network is an experimental network built on the notion of a single, scalable, global spanning tree topology. Rather than the loose hop-by-hop routing we currently use.

This is a bad, high-level description of a rather smart network architecture. I’d really suggest you go read the whitepaper, but if you’re incredibly lazy, you can read this instead.

So Yggdrasil is built on IPv6. It does have some use in the realm of IPv4, but IPv6 addressing is pretty critical to what exists today. Each node in the network possesses an IPv6 address in the 200:: subnet that corresponds to its NodeID, which is in turn a sha512 sum of its public key. It’s a nifty little idea that feels like a response to the really bad authentication we have with BGP that RPKI is trying to fix. Granted, there’s not a lot of bits to work with, so you’d expect a collision in NodeID at some point, but there’s some consideration given to that.

The part I wont attempt to explain, because I don’t fully understand geometric graph theory, is how locators are generated. Locators are co-ordinates of a NodeID that can be used to calculate a least-cost path between two nodes. Routing works on the basis of forwarding packets to the peer closest to the destination on that path determined by locators. When that peer is congested, the packet is dropped in a FIFO queue.

Nodes send advertisements to their neighbours, containing the path from themselves to the root node (how their location is determined, ultimately). The root node is determined by the highest TreeID (which is itself calculated as a sha512 of each node’s public key). The advertised path has a cryptographic signature for each hop. This is likely where Yggdrasil as a project name comes from. Fitting. The root node, as you could expect, can and will change. To avoid dead root nodes, they’re expected to update a sequence number on fixed intervals. No update from the root results in it being blacklisted. I’m not clear what impact this would have on the locator of every node under it, or what would happen in a split-brain scenario where half the nodes in the tree have blacklisted the root of the other half.

Every node has a parent. The selection of the parent node is based around scoring nodes on their latency. I wont go into detail, the crux of it is that nodes that aren’t fixed, stable entities (I suppose we’re talking peering routers in our current network architecture) will likely not end up parents.

DHT, a distributed hash table, maps nodes to location. Again, logic that goes into this structure isn’t something I want to cover. It is likely enough to know that when attempting to route from A to Z, you’re likely to get a response from Y as a direct neighbour to Z. A and Z then perform a key exchange to allow for encryption of their communications.