DCUtR (Direct Connection Upgrade through Relay) for non-reachable NAT-ed peers
I maintainer di solito rispondono entro 2 giorni
@misaakidis ci sta già lavorando.
Dal 12/9/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Summary
Currently, the Swarm overlay places disproportionate structural load on inbound-reachable (publicly connectable) nodes to maintain topology health and indirectly connect NATed peers.
Introducing libp2p DCUtR (Direct Connection Upgrade through Relay) would allow two initially non-reachable Bee nodes to upgrade from relayed to direct connections when possible, reducing long-term reliance on public nodes and improving stability, performance, and fairness of the network.
Motivation
Swarm functions with outbound-only nodes, but this leads to:
- reduced connectivity entropy, lower peer diversity,
- traffic concentration on reachable nodes, causing higher impact from churn.
- pull syncing practically requires at least one reachable anchor node in a neighborhood; DCUtR can release this requirement by enabling unreachable peers at the same depth to connect directly.
DCUtR does not eliminate the need for reachable nodes, but reduces the network's structural burden by shortening relay lifetimes and creating more direct peer edges.
For users:
- More effective peer connectivity → more routing paths → higher chance of finding a fast, available responder
- Less jitter and improved latency → More predictable UX under load (e.g. less fluctuation in stream consumption.)
For node operators:
- Better discoverability despite NAT → more opportunities to serve bandwidth
- Improved pull-sync robustness → lower hardware and bandwidth requirements
- More stable peer sets even without a public IP
- Relayers economically compensated via SWAP for negotiation traffic
For the network:
- More evenly distributed connectivity graph
- Reduced dependency on a small subset of public nodes → improved resilience to churn and localized failures
- Better long-term scalability of topology maintenance
Implementation
Use existing peer connections as temporary relays for DCUtR signaling. Attempt direct connection upgrade after direct connection failure.
-
SWAP accounting
- Relay-forwarded DCUtR signaling traffic must be accounted
- Relayers should be compensated for bandwidth used during negotiation
-
Fallback behavior
- Attempt DCUtR after direct connection failure.
- Use existing inbound-reachable peer connections as temporary relays for DCUtR signaling. If the target node is not connected to any of the reachable peers then log this out.
-
Topology changes
- Re-evaluate restrictions that discourage storage or forwarding on non-reachable nodes, e.g.: in kademlia or push syncing
-
Testing requirements
- test environment under partial DCUtR success with no reachable node in one neighborhood
- topology stability tests (with measuring tail latency under high concurrency)
- pull-syncing, retrieval and upload correctness
- relay accounting correctness
Drawbacks
-
Not a universal solution
- DCUtR does not work reliably with:
- symmetric NATs
- multi-layer NAT / CGNAT
- relayer located behind the same NAT as one peer
- DCUtR does not work reliably with:
-
Added complexity
- Increased complexity in p2p, accounting, and topology subsystems
- Harder to reason about emergent connectivity behavior
-
No benefit for browser clients
- Browsers cannot open raw TCP/QUIC sockets
- DCUtR does not improve browser connectivity
-
Reachable nodes still necessary
- Bootstrapping
- Browser access
- Even DCUtR requires that for initiating connections
- However, it reduces pressure on them and require less from them.
- Lingua principale
- Go
- Stelle
- 1.5k
- Fork
- 390
- Merge medio
- 2g 12h
- PR unite (30g)
- 18
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ethersphere/bee
-
Chequebook deployment uses a fixed 175,000 gas limit; it needs about 630,000 under Glamsterdam (live on Sepolia since 2026-10-06)Forse già presa @sbackend123 l’ha presa 4 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
ethersphere/bee#5650 · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
ethersphere/bee#5659 ·
I maintainer di solito rispondono entro 2 giorni
-
seen
Difficoltà 4/5 3-5 giorni Idoneità per principianti 40/100
ethersphere/bee#5648 ·
I maintainer di solito rispondono entro 2 giorni
-
pusher: chunksWorker deadlocks on a deferred chunk that fails IdentityAddress (send on nil op.Err), halting all push-syncForse già presa @sbackend123 l’ha presa 6 giorni fa. Apertaseen
Difficoltà 3/5 1-2 giorni Idoneità per principianti 75/100
ethersphere/bee#5641 · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
-
GET /bzz/<ref>/ can 404 off-node, and the 404 is indistinguishable from a missing index documentApertaseen
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
ethersphere/bee#5625 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di ethersphere/bee
Issue simili
-
product/backlog
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
TencentBlueKing/bk-nodemgr#3645 ·
I maintainer di solito rispondono entro 1 giorno
-
docs(prompt): filer socket fragment hardcodes an issue-intent cap of 8 that Chore runs overrideApertaagent-butler-finding chore
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
jordansmall/spindrift#5128 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100
I maintainer di solito rispondono entro 2 giorni
-
License GOtome under Apache 2.0 instead of AGPL-3.0Forse già presa @praetorianer777 l’ha presa oggi. Apertaarea:workflow documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
praetorianer777/GoTome#212 ·
I maintainer di solito rispondono entro 1 giorno
-
ci: pin Go version in Build and Unit Test workflows (>=1.26.6 floats to 1.27.2 and breaks golangci-lint)Forse già presa @leninmehedy l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 87/100
hashgraph/solo-weaver#1255 ·
I maintainer di solito rispondono entro 1 giorno