Keep datagrams connection-wide and application-defined
04Reliable streams and unreliable datagrams can share one QUIC connection and its security context. A DATAGRAM has no QUIC stream ID; the application defines any identifiers inside the data.
The receiver has handled the frame but cannot store its data for the application. DATAGRAM has no explicit flow-control credit that would guarantee enough receiver memory.
Source for this drawing: RFC 9221 · Read RFC section 5.1 ↗
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
- Application flow ID
- A discriminator the application may define inside Datagram Data.
- Flow control
- Receiver-capacity signaling, distinct from congestion control of network load.
Related RFCs and changes
“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.
DATAGRAM frames belong to the connection as a whole. Any identifiers used to distinguish datagram flows or data kinds are the application protocol’s responsibility, not an extra QUIC stream field.
- DATAGRAM frames belong to the connection as a whole. Any identifiers used to distinguish datagram flows or data kinds are the application protocol’s responsibility, not an extra QUIC stream field.
- An application can carry reliable control data in STREAM frames and time-sensitive updates in DATAGRAM frames. They share the connection but do not acquire the same delivery guarantees.
- One recommended application pattern is a leading variable-length integer flow identifier. In the chosen application format, data05 41 means application flow 5 followed by ASCII A. Other formats are possible.
- The complete chosen frame 31 02 05 41 has Length 2; the flow identifier is part of those two application-data bytes. It is not a QUIC stream ID or a field mandated by RFC 9221.
- DATAGRAM provides no explicit flow-control signaling and does not count toward stream or connection-wide data limits. A receiver that cannot process a datagram MAY drop it, including when memory is unavailable.
- A valid received DATAGRAM SHOULD be delivered to the application immediately when it can be processed and stored. That recommendation does not guarantee delivery under resource pressure.
Flow5 and payload A are fictional application choices, not a registered standard flow namespace. The memory-pressure scene depicts transport receipt followed by failure to deliver to the receiving application. It does not contradict transport acknowledgment. This guide does not implement a tunnel, game protocol or a real QUIC connection.
Read the RFC section ↗