NetherNet WebRTC Transport
NetherNet is Mojang's modern, WebRTC-based transport protocol for Minecraft: Bedrock Edition. Designed for high-resilience peer-to-peer and relayed communication, NetherNet enables seamless cross-platform multiplayer (mobile, console, desktop) without requiring server operators or players to configure router port-forwarding.
Pumpkin provides a native, zero-dependency NetherNet implementation in crates/pumpkin/src/net/bedrock/nethernet.rs.
Architectural Layers
| Layer | Implementation | Responsibility |
|---|---|---|
| HTTP Signaling | Axum HTTP Router (ice_router.rs) | Handles SDP Offer (POST /offer), SDP Answer (GET /answer), and ICE Candidates (POST /candidate) |
| NAT Traversal | ICE Agent | Coordinates STUN/TURN binding discovery and hole punching |
| Transport Security | DTLS Handshake | Generates ephemeral session keys and secures the WebRTC transport using ECDSA P-384 keys |
| Data Delivery | WebRTC DataChannels | Unordered/ordered datagram channels streaming standard Bedrock game batches to the dispatcher |
Core Components in Pumpkin
Pumpkin's NetherNet subsystem is divided into four distinct modules:
1. Cryptographic Identity (nethernet-key.der)
- Pumpkin generates and loads a NIST P-384 ECDSA private key (
nethernet-key.der). - Used to cryptographically sign session descriptions (SDP offers and answers), authenticating the server's identity to connecting clients.
- Encoded using standard PKCS#8 DER formatting.
2. HTTP Signaling Router (ice_router.rs)
Signaling is handled over HTTP via an Axum router:
POST /offer: The client submits an SDP offer describing its WebRTC codecs, transport profiles, and network interfaces.GET /answer: Pumpkin generates a corresponding local SDP answer containing its negotiated capabilities.POST /candidate: Both endpoints exchange trickle ICE candidates to discover the fastest direct network path (host, server-reflexive, or relay).
3. Local Network Discovery (discovery.rs)
- Listens and broadcasts availability on the local subnet via UDP multicast.
- Allows Bedrock clients on the same Wi-Fi or LAN to discover and connect to the Pumpkin server automatically without entering an IP address.
4. DataChannel Packet Streaming
- Once the WebRTC peer connection transitions to the
Connectedstate, an ordered, reliable WebRTC DataChannel is opened. - Bedrock batch packets (
0xfe) flow bidirectionally through the DataChannel directly into Pumpkin'sincoming_game_packet_sendchannel.
Configuration in pumpkin.toml
NetherNet is configured under [networking.bedrock.nethernet] in pumpkin.toml:
toml
[networking.bedrock]
enabled = true
address = "0.0.0.0:19132"
[networking.bedrock.nethernet]
enabled = true
signaling_address = "0.0.0.0:19133"
ice_servers = [
"stun:stun.l.google.com:19302"
]