Freenet has no central index. Every node is given a location — a value on a ring [0,1) — and darknet links come from two sources: structural neighbors adjacent in location, plus a handful of long-range "small-world" shortcuts to distant, socially-trusted friends. This mix keeps the network's diameter small (like Kleinberg's small-world model) while requiring no central directory. Because a node's identity really is a single number on a circle, this 2D version renders it as an actual ring plus a location number-line — arguably a more literal picture of the model than an arbitrary 3D placement.
circular distance: d(x, k) = min(|x−k|, 1−|x−k|)
greedy hop: next = argmin d(loc(n), key) over unvisited neighbors n
HTL: htl ← htl − 1 each hop, until 0 (request dies) or a hit
Insert greedily routes a fresh key toward the node whose location is closest to it, caching the data at every relay along the way. Request greedily routes toward the same key and succeeds the moment it reaches any node already holding a cached copy — often long before HTL runs out, because popular content gets copied onto more and more relays over time.
Source anonymity: for the first few hops from the real requester, Freenet decrements HTL only with 50% probability instead of every hop (toggle above). An eavesdropping relay then cannot tell whether it is hop 1 from the true origin or hop 3 relayed from someone else's request — plausible deniability without any encryption trick, purely from how the counter is fuzzed near the source. Path caching adds a second layer: because every relay on a successful path ends up holding a copy, no single cache holder can be proven to be the original inserter.