╔═╗╔═╗╔═╗╔╦╗╔╗╔╔═╗╔╦╗
╠╣ ╠═╣╚═╗ ║ ║║║║╣ ║ Ultra-low latency encrypted networking
╚ ╩ ╩╚═╝ ╩ ╝╚╝╚═╝ ╩ for real-time games
FastNet is a high-performance networking library designed for real-time multiplayer games. It provides encrypted UDP communication with latencies as low as 15 microseconds while maintaining strong security through TLS 1.3 and ChaCha20-Poly1305 encryption.
Features
- Ultra-Low Latency: ~12-15µs average RTT on localhost, competitive with raw UDP
- Built-in Encryption: TLS 1.3 handshake + ChaCha20-Poly1305 AEAD
- Zero-Alloc Hot Path: Fixed buffers, no allocations in send/recv loop
- Key Rotation: Automatic key rotation for forward secrecy
- Linux Tuning: SO_BUSY_POLL, IP_TOS, sendmmsg/recvmmsg batching
- Zero Configuration Security: No need to understand cryptography
- Game Engine Ready: C/C++ FFI for Unreal Engine, Unity, Godot
- Async/Await: Built on Tokio for efficient I/O
- Reliable & Unreliable Channels: Choose the right mode for your data
- P2P Networking: Direct peer-to-peer connections with NAT traversal
- TCP Fallback: Automatic fallback when UDP is blocked
- Asset Distribution: Large file transfers with LZ4 compression and BLAKE3 verification
Benchmarks
Tested with 50,000 packets at 10,000 packets/second on localhost:
| Metric | ENet | FastNet | QUIC |
|---|---|---|---|
| Avg Latency | 112.7 µs | 15.6 µs | 64.0 µs |
| P99 Latency | 143.0 µs | 69.6 µs | 170.0 µs |
| Max Latency | 323 µs | 103.6 µs | 1868 µs |
| Encryption | None | ChaCha20 | TLS |
Average Latency (lower is better)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FastNet ██ 15.6 µs ⚡
QUIC ████████ 64.0 µs
ENet ██████████████ 112.7 µs
7x faster than ENet with full encryption enabled
Note: Max latency spikes in FastNet/QUIC are due to TLS overhead during handshake
Quick Start
Rust
Add to your Cargo.toml:
[]
= "0.1"
= { = "1", = ["rt-multi-thread"] }
Server:
use SecureSocket;
use SocketAddr;
async
Client:
use SecureSocket;
async
C/C++ Integration
Building the Library
Add the crate into your project:
= { = "0.1", = ["ffi"] }
or clone the repo into your machine:
git clone https://github.com/filipe-freitas-dev/fastnet.git
then build the C/C++ wrapper with:
cargo build --release --features ffi
This produces:
- Linux:
target/release/libfastnet.so - Windows:
target/release/fastnet.dll - macOS:
target/release/libfastnet.dylib
C Example
int
Unreal Engine Integration
-
Copy the library to your project:
YourProject/ ├── Binaries/ │ └── Win64/ │ └── fastnet.dll └── Source/ └── YourGame/ ├── fastnet.h └── FastNet.h (C++ wrapper) -
Update your
Build.cs:PublicAdditionalLibraries.Add( Path.Combine(ModuleDirectory, "..", "..", "Binaries", "Win64", "fastnet.dll") ); -
Use in your code:
// In your GameInstance TUniquePtr<FFastNetClient> NetworkClient; void void
P2P Networking
Direct peer-to-peer connections with NAT traversal, eliminating the need for a dedicated relay server.
use ;
async
Features:
- UDP hole-punching for NAT traversal
- Automatic relay fallback when direct connection fails
- Room-based peer discovery
- End-to-end encryption (ChaCha20-Poly1305)
TCP Fallback
Automatic fallback to TCP when UDP is blocked (corporate firewalls, some mobile networks).
use ;
async
Asset Distribution
Efficient large file transfers with chunking, compression, and integrity verification.
use ;
// Server: Register and serve assets
let mut server = new;
server.register.await?;
// Handle requests
if let Some = server.handle_request
// Client: Download assets
let mut client = new;
client.start_download?;
// Process chunks
client.receive_chunk?;
for event in client.poll_events
Features:
- 64KB chunked transfers
- LZ4 compression for faster transfers
- BLAKE3 hash verification (per-chunk and per-file)
- Resumable downloads with
resume_download() - Pause/cancel with
pause_transfer(),cancel_transfer() - Transfer statistics with
get_transfer_stats() - Retry tracking for failed chunks
Performance Tuning
FastNet includes OS-level optimizations for minimal jitter:
use ;
// Apply low-latency configuration
let config = low_latency;
// - SO_RCVBUF/SO_SNDBUF: 8MB
// - SO_BUSY_POLL: 100µs
// - IP_TOS: 0xB8 (DSCP EF)
// - SO_PRIORITY: 6
// Batch sending (Linux only)
let mut send_batch = new;
send_batch.push;
send_batch.push;
sendmmsg?;
Linux Tuning Options:
SO_RCVBUF/SO_SNDBUF: 4-8MB buffersSO_BUSY_POLL: CPU polling for ~10µs latency reductionIP_TOS: DSCP EF (Expedited Forwarding) for QoSsendmmsg/recvmmsg: Batch multiple packets per syscall
Architecture
┌─────────────────────────────────────────────────────────────────┐
│ Application │
├─────────────────────────────────────────────────────────────────┤
│ SecureSocket │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ TLS 1.3 │ │ ChaCha20 │ │ Channels │ │
│ │ Handshake │──│ Poly1305 │──│ (Reliable/ │ │
│ │ (~40ms) │ │ Encryption │ │ Unreliable) │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │ │
│ ┌─────────┴─────────┐ │
│ │ UDP Transport │ │
│ │ (Zero-copy) │ │
│ └───────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Security Model
- Connection: Client connects via TCP for TLS 1.3 handshake
- Key Exchange: Server generates unique ChaCha20 keys per client
- Data Transfer: All UDP packets encrypted with AEAD
- Authentication: Each packet includes authentication tag
Channels
| Channel | Use Case | Properties |
|---|---|---|
0 - Reliable Ordered |
Chat, Commands | Guaranteed delivery & order |
1 - Unreliable |
Position updates | Fast, may drop |
2 - Reliable Unordered |
Item pickups | Guaranteed, any order |
3 - Sequenced |
Input, Voice | Latest packet only |
Generating Certificates
For development:
# Generate self-signed certificate (valid for 365 days)
For production, use certificates from Let's Encrypt or your CA.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.