mirror of
https://github.com/matrix-org/pinecone.git
synced 2026-01-16 23:00:32 +00:00
* Initial soft-state testing * Fix `pineconeip` * Try raising the intervals a bit * Tighter expiry * Tweaks * Try to speed up convergence but reduce idle noise * More tweaks * Handle disconnections on destination ports, tweak next-hops * All traffic is either bootstrap or not, more tweaking * Protocol calming, loop detection, bootstrap signatures * Tidy up sim * Fix unit test * Don't drop pong responses as looping traffic * Remove unused snake path id * Remove unused variable from nextHopsSNEK * Unassign setup acks capability from soft state capabilites * Cleanup comments to reflect new softstate logic * Remove unused candidate variable from state * Update sim and events to reflect softstate changes * Update wireshark dissector to match softstate frames * Add unit test for snake bootstrap * Fix incorrect comment about bootstrap forwarding conditions * Add `queue` interface * Initial docs update for softstate algorithm * Softstate doc updates * Fix logic for selecting lowest latency links * Update docs with watermark information (#52) * Update docs with watermark information * Further clarifications to watermark docs * Fix `pinecone.lua` Co-authored-by: Devon Hudson <devonhudson@librem.one>
1.4 KiB
1.4 KiB
| title | parent | nav_order | permalink |
|---|---|---|---|
| Node Anatomy | Introduction | 2 | /introduction/node_anatomy |
Node Anatomy
A Pinecone node is effectively a form of user-space hybrid router/switch. The switch has a number of “ports” which can connect to other Pinecone nodes using stream-oriented and reliable transports (such as TCP connections).
Each port is numbered. There is no requirement for a Pinecone node to have a specific number of ports. However, switch port 0 is always reserved for the local Pinecone router. Traffic going to and from the local node will always use this port. Port number assignment is an implementation-specific detail, although it typically makes sense to always assign the lowest free port number.
The router maintains state that allows it to participate in the network, including:
- Information about all directly connected peers, including their public key, last tree announcement received, how they are connected to us etc;
- Which of the node’s directly connected peers is our chosen parent in the tree, if any;
- A routing table, containing information about SNEK paths that have been set up through this node by other nodes;
- Information about our descending keyspace neighbour — that is, which node has the next lowest (descending) key to the node’s own;
- A sequence number, used when operating as a root node and sending the nodes own root announcements into the network;
- Maintenance timers for tree and SNEK maintenance.