Why is Noise needed at all?

quinn

It is a quic implementation in rust. It provides us with multiple independent streams over a single QUIC connection which runs on a single UDP socket. The streams are reliable(bytes are delivered reliably (lost packets are retransmitted)), ordered and congestion controlled with head-of-line blocking isolation.

The TLS 1.3 encryption is mandatory in quic. It comes with the quic handshake itself.

quinn has an endpoint(a UDP socket with config), connection and SendStream and RecvStream.

What does it provide?

Encryption

Every message that passes through the quic is encrypted by TLS 1.3. It is not optional like in TCP.

Multiplexed

Unlike TCP where only one byte stream is supported, quic supports multiple streams over a same connection.

Head of line blocking

In TCP, if a packet is lost, whole stream is blocked. In quic, if a packet is lost, the stream carrying that packet is halted, other streams go on as usual.

Byte Pipe

It doesn’t take messages but streams, which has no information about where it starts and ends, exactly like in TCP.

What it doesn’t?

No peer identity

In client-server architecture client and server are identified via certificate authority. But in p2p networks we can have hardware, phones as the nodes, which don’t have certificates. For that reason, we need to define our own peer identity in ed25519.

No Message framing

No transport facility

The security layer, TLS supports QUIC but not BLE, LoRa and so forth.