aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/architecture.md2
-rw-r--r--docs/dashboard.md23
2 files changed, 22 insertions, 3 deletions
diff --git a/docs/architecture.md b/docs/architecture.md
index 07edbfb..9b9db71 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -233,7 +233,7 @@ replies, admit (swarm key), mark the peer seen, record its epoch (ignoring late
then by type: HELLO answered, HELLO_REPLY establishes membership and discovers peers,
sync queued on its lane if on our epoch (held back from everyone but the source while catching
up), STATUS answered with a STATUS_REPLY and compared for divergence, blobs served or collected,
-LINKS answered with the node's links if the asker is a member, and again on each change while it subscribes (`swarm::links`, for the dashboard);
+LINKS answered with the node's links if the asker is a member, and again on each change while it subscribes, or with other members' links it asks for the asker, which can't reach them (`swarm::links`, for the dashboard);
PING and PONG (the paths layer answered the PING already) only mark the peer seen, and
after a PONG the peer's round-trip time is its path's again.
diff --git a/docs/dashboard.md b/docs/dashboard.md
index a93e4d4..c614aab 100644
--- a/docs/dashboard.md
+++ b/docs/dashboard.md
@@ -323,14 +323,33 @@ older than 90 s is left out. A member keeps 64 subscribers at most. With `links:
and the members are only asked every 30 s, for every page open on this node, until
asked otherwise or the node restarts.
+A member this node can't reach (on none of its transports: one on Tor alone, from a
+node on libp2p alone) is asked through a peer that can: an active member it reaches
+that, by the member list, shares a transport with the member, else one on a transport
+this node isn't on (the lowest pair score of several). The LINKS names the members to
+ask (`of`): the peer asks them on this node's behalf, itself or again through a peer
+of its own (three nodes at most), for as long as this node asked, and passes their
+links on in its replies (`relayed`, each with its age), several together: it holds
+what arrives a while. The asker's window (250 ms, at most 5 s) is for the whole way:
+each hop holds its share of what is left, the window divided among it and the hops
+that may follow (at least 10 ms), and passes the rest on, so links reach the asker
+within the window however long the chain. Such a subscription isn't ended by a message: every hop's runs
+out unless renewed, so it ends within 90 s of the page closing or the node going away.
+A hop renews its own as soon as it is renewed, for the same time, so the hops run in
+step, each a message's delay behind the one before (it never runs out first), and a
+renewal keeps its nonce, so what is on its way under the last one still counts. A
+renewal lost on the way leaves the hops behind it to run out at the old time: with 90 s
+renewed every 30 s, one lost costs nothing.
+
The links a member reports: its neighbours and the peers it holds dormant (a neighbour
that goes dormant is one no more, but stays listed until it is heard from again), by
which transport, whether only through a relay, the round trip (as the paths layer
measures it), whether it holds the peer dormant or the path is down, the peer's other
transports with a path up (each with its fastest path's round trip, and whether it goes
only through a relay), and the peer's clock against the member's ([`measurements.md`](measurements.md),
-Per peer, `clock`). A member answers a LINKS from members only, at most every 5 s, and
-every build answers, with or without the feature (`swarm::links`).
+Per peer, `clock`). A member answers a LINKS from members only, at most every 5 s (one
+asking it to relay, each time), and every build answers, with or without the feature
+(`swarm::links`).
**Clocks.** The clocks in the links chain every member's clock to this node's, along
the narrowest bounds, and the map takes each against their median: a member more than