3 releases
Uses new Rust 2024
new 0.1.0-alpha.3 | Apr 14, 2025 |
---|---|
0.1.0-alpha.2 | Apr 11, 2025 |
0.1.0-alpha.1 | Apr 9, 2025 |
#374 in Network programming
251 downloads per month
Used in 11 crates
(7 directly)
320KB
5K
SLoC
Networking Protocol Documentation
This document explains how nodes in our network talk to each other securely.
1. The Handshake Protocol
Before two nodes can exchange messages, they must verify each other's identity. This happens in a process called "handshaking".
sequenceDiagram
participant A as Node A
participant B as Node B
Note over A,B: Step 1: Initial Connection
A->>B: Hi! Here's my ID and signature
Note right of B: Step 2: B checks A's identity
B->>A: Hi back! Here's my ID and signature
Note left of A: Step 3: A checks B's identity
Note over A,B: Step 4: Both nodes are now friends!
How the Handshake Works
-
Initial Connection
- Two nodes connect over the network
- Neither trusts the other yet
-
Identity Verification
- Each node has:
- A unique ID
- A public key
- A private key
- Each node has:
-
The Handshake Steps
- Node A sends: ID + timestamp + signature
- Node B verifies:
- Is the timestamp recent?
- Is A's ID valid?
- Is A's signature correct?
- Is A allowed to connect?
- Node B responds with its own ID + timestamp + signature
- Node A performs the same checks
-
Success!
- Both nodes now trust each other
- They can start sending messages
- The connection is secure
2. Sending Messages
After the handshake, nodes can send two types of messages:
Direct P2P Messages
sequenceDiagram
participant A as Node A
participant B as Node B
A->>B: Direct message to B
B->>A: Got it! Here's my response
- Sent to one specific node
- Guaranteed delivery attempt
- Node must be verified first
- Gets a response back
Broadcast Gossip Messages
sequenceDiagram
participant A as Node A
participant B as Node B
participant C as Node C
participant D as Node D
A->>B: Broadcast message
A->>C: Broadcast message
A->>D: Broadcast message
- Sent to all connected nodes
- Best-effort delivery (might miss some)
- Uses gossip protocol (nodes help spread the message)
- No response expected
3. Security Features
We keep everything secure by:
- ✓ Checking identities before accepting messages
- ✓ Verifying signatures on all handshakes
- ✓ Using timestamps to prevent replay attacks
- ✓ Tracking and banning misbehaving nodes
- ✓ Limiting connections to prevent overload
- ✓ Validating protocol versions match
4. Error Handling
Things don't always go perfectly! We handle problems like:
- ❌ Invalid signatures
- ❌ Expired timestamps
- ❌ Unknown nodes
- ❌ Network timeouts
- ❌ Protocol mismatches
Each error gets a specific response so nodes know what went wrong.
5. Quick Reference
Message Types
- Handshake: Verify identity
- Direct: One-to-one message
- Broadcast: One-to-many message
- Response: Reply to direct message
- Error: Something went wrong
Timeouts
- Handshake: 30 seconds
- Message delivery: Configurable
- Connection retry: Automatic with backoff
Dependencies
~49–100MB
~1.5M SLoC