Balance early data, padding and privacy
05Session resumption may permit zero-round-trip(0-RTT) data: a client sends before this handshake finishes. Replay and linkability risks remain even though the transport is encrypted.
Connection reuse amortizes setup, but a long connection or resumption can link activity. On a connectivity change, the default recommendation is to start a new session and avoid resumption.
Source for this drawing: RFC 9250 · Read RFC section 4.5 ↗
New to this? Start hereA quick picture + helpful background
A message needs an address.
Think of a packet as a small addressed envelope. Devices pass it onward; transport protocols decide what delivery promises an application gets.
Helpful first, if these ideas are unfamiliar
These pictures are analogies to help you learn. The linked RFC explains the actual rules.
Terms in this drawing
Related RFCs and changes
“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.
The final traffic-analysis paragraph must say MUST use padding, not SHOULD. This aligns it with the existing normative requirement in§5.4; it is a verified correction to this immutable RFC.
Read the updated RFC section ↗Faster reuse and encrypted payloads do not make DNS activity anonymous.
- Resumption and0-RTT are optional. Only QUERY and NOTIFY are replayable opcodes under this RFC; clients MUST NOT send any other opcode in 0-RTT. NOTIFY is deliberately included; AppendixA explains its bounded replay effects.
- A server supporting0-RTT MUST NOT immediately process a non-replayable early transaction. It MUST queue it until handshake completion, or return REFUSED with Extended DNS Error(EDE)26(Too Early), or close with DOQ_PROTOCOL_ERROR.
- Implementations MUST mitigate traffic analysis with padding(§5.4 and verified erratum7883 correcting§7.5). If QUIC offers padding-policy APIs, DoQ SHOULD use them to align packet lengths to a small fixed size set. If packet padding is unavailable or unused, every DNS query/response MUST be padded to a small fixed size set using EDNS Padding.
- Clients SHOULD use resumption tickets once and by default SHOULD NOT resume after connectivity changes. Address-validation tokens SHOULD only accompany resumption. By default, clients SHOULD prioritize privacy and start new sessions when connectivity changes.
- Connections SHOULD be reused and their idle timeouts negotiated, with values chosen for available resources; DoQ specifies no universal timeout value. Clients and servers MUST NOT send the TCP-specific edns-tcp-keepalive option on DoQ.
The128-byte padded DNS query is a chosen example, not a mandated padding block size. Resolver visibility, observable timing/lengths, resumption linkability and replay risk remain. Padding mitigates inference; it does not promise anonymity or hide that traffic is DNS.
Read the RFC section ↗