Open
Description
Feature Request
Summary
Currently, we're using TCP as our default transport protocol. QUIC has a few benefits compared to TCP:
- no head-of-line blocking
- built-in streams (no need for out-of-protocol multiplexing)
- 0-RTT handshake
Furthermore, adopting QUIC will eliminate the need for custom encryption (SecretConnection
) and framing. There is nothing terrible about custom encryption except that it's custom. On the other hand, custom framing interferes with the underlying transport and prevents us from fully utilizing the underlying connection buffers.
High-level steps
- Extract transport from the p2p package
- Allow for different protocols in
NetAddr
- Implement QUIC transport
- Evaluate QUIC and
- Support both TCP and QUIC in v1, but mark TCP as deprecated
- Drop support for TCP in v2
OR - Drop QUIC if its performance and stability are not up to par
Execution steps
Steps
- refactor(p2p)!: Extract TCP transport #4148
- refactor(p2p/netaddress)!: move to netaddr #4303
- refactor(p2p/nodekey)!: remove NodeKey suffix #4304
- refactor(p2p/nodeinfo)!: remove NodeInfo suffix #4305
- refactor(p2p)!: extract
MConnection
fromPeer
#4307 - Modify
netaddr
to support both TCP and QUIC addresses - Implement QUIC transport feat(p2p): add QUIC transport #4729