xref: /openssl/doc/designs/quic-design/glossary.md (revision ef39dd05)
1Glossary of QUIC Terms
2======================
3
4**ACKM:** ACK Manager. Responsible for tracking packets in flight and generating
5notifications when they are lost, or when they are successfully delivered.
6
7**Active Stream:** A stream which has data or control frames ready for
8transmission. Active stream status is managed by the QSM.
9
10**AEC:** Application error code. An error code provided by a local or remote
11application to be signalled as an error code value by QUIC. See QUIC RFCs
12(`STOP_SENDING`, `RESET_STREAM`, `CONNECTION_CLOSE`).
13
14**APL:** API Personality Layer. The QUIC API Personality Layer lives in
15`quic_impl.c` and implements the libssl API personality (`SSL_read`, etc.) in
16terms of an underlying `QUIC_CHANNEL` object.
17
18**Bidi:** Abbreviation of bidirectional, referring to a QUIC bidirectional
19stream.
20
21**CC:** Congestion controller. Estimates network channel capacity and imposes
22limits on transmissions accordingly.
23
24**CFQ:** Control Frame Queue. Considered part of the FIFM, this implements
25the CFQ strategy for frame in flight management. For details, see FIFM
26design document.
27
28**Channel:** See `QUIC_CHANNEL`.
29
30**CID:** Connection ID.
31
32**CMPL:** The maximum number of bytes left to serialize another QUIC packet into
33the same datagram as one or more previous packets. This is just the MDPL minus
34the total size of all previous packets already serialized into to the same
35datagram.
36
37**CMPPL:** The maximum number of payload bytes we can put in the payload of
38another QUIC packet which is to be coalesced with one or more previous QUIC
39packets and placed into the same datagram. Essentially, this is the room we have
40left for another packet payload.
41
42**CSM:** Connection state machine. Refers to some aspects of a QUIC channel. Not
43implemented as an explicit state machine.
44
45**DCID:** Destination Connection ID. Found in most QUIC packet headers.
46
47**DEMUX:** The demuxer routes incoming packets to the correct connection QRX by
48DCID.
49
50**DGRAM:** (UDP) datagram.
51
52**DISPATCH:** Refers to the QUIC-specific dispatch code in `ssl_lib.c`. This
53dispatches calls to libssl public APIs to the APL.
54
55**EL:** Encryption level. See RFC 9000.
56
57**Engine:** See `QUIC_ENGINE`.
58
59**FC:** Flow control. Comprises TXFC and RXFC.
60
61**FIFD:** Frame-in-flight dispatcher. Ties together the CFQ and TXPIM to handle
62frame tracking and retransmission on loss.
63
64**FIFM:** Frame-in-flight manager. Tracks frames in flight until their
65containing packets are deemed delivered or lost, so that frames can be
66retransmitted if necessary. Comprises the CFQ, TXPIM and FIFD.
67
68**GCR:** Generic Control Frame Retransmission. A strategy for regenerating lost
69frames. Stores raw frame in a queue so that it can be retransmitted if lost. See
70FIFM design document for details.
71
72**Key epoch:** Non-negative number designating a generation of QUIC keys used to
73encrypt or decrypt packets, starting at 0. This increases by 1 when a QUIC key
74update occurs.
75
76**Key Phase:** Key phase bit in QUIC packet headers. See RFC 9000.
77
78**Keyslot**: A set of cryptographic state used to encrypt or decrypt QUIC
79packets by a QRX or QTX. Due to the QUIC key update mechanism, multiple keyslots
80may be maintained at a given time. See `quic_record_rx.h` for details.
81
82**KP:** See Key Phase.
83
84**KS:** See Keyslot.
85
86**KU:** Key update. See also TXKU, RXKU.
87
88**LCID:** Local CID. Refers to a CID which will be recognised as identifying a
89connection if found in the DCID field of an incoming packet. See also RCID.
90
91**LCIDM:** Local CID Manager. Tracks LCIDs which have been advertised to a peer.
92See also RCIDM.
93
94**Locally-initiated:** Refers to a QUIC stream which was initiated by the local
95application rather than the remote peer.
96
97**MDPL:** Maximum Datagram Payload Length. The maximum number of UDP payload
98bytes we can put in a UDP packet. This is derived from the applicable PMTU. This
99is also the maximum size of a single QUIC packet if we place only one packet in
100a datagram. The MDPL may vary based on both local source IP and destination IP
101due to different path MTUs.
102
103**MinDPL:** In some cases we must ensure a datagram has a minimum size of a
104certain number of bytes. This does not need to be accomplished with a single
105packet, but we may need to add PADDING frames to the final packet added to a
106datagram in this case.
107
108**MinPL:** The minimum serialized packet length we are using while serializing a
109given packet. May often be 0. Used to meet MinDPL requirements, and thus equal
110to MinDPL minus the length of any packets we have already encoded into the
111datagram.
112
113**MinPPL:** The minimum number of bytes which must be placed into a packet
114payload in order to meet the MinPL minimum size when the packet is encoded.
115
116**MPL:** Maximum Packet Length. The maximum size of a fully encrypted and
117serialized QUIC packet in bytes in some given context. Typically equal to the
118MDPL and never greater than it.
119
120**MPPL:** The maximum number of plaintext bytes we can put in the payload of a
121QUIC packet. This is related to the MDPL by the size of the encoded header and
122the size of any AEAD authentication tag which will be attached to the
123ciphertext.
124
125**MSMT:** Multi-stream multi-thread. Refers to a type of multi-stream QUIC usage
126in which API calls can be made on different threads.
127
128**MSST:** Multi-stream single-thread. Refers to a type of multi-stream QUIC
129usage in which API calls must not be made concurrently.
130
131**NCID:** New Connection ID. Refers to a QUIC `NEW_CONNECTION_ID` frame.
132
133**Numbered CID:** Refers to a Connection ID which has a sequence number assigned
134to it. All CIDs other than Initial ODCIDs and Retry ODCIDs have a sequence
135number assigned. See also Unnumbered CID.
136
137**ODCID:** Original Destination CID. This is the DCID found in the first Initial
138packet sent by a client, and is used to generate the secrets for encrypting
139Initial packets. It is only used temporarily.
140
141**PN:** Packet number. Most QUIC packet types have a packet number (PN); see RFC
1429000.
143
144**Port:** See `QUIC_PORT`.
145
146**PTO:** Probe timeout. See RFC 9000.
147
148**QC:** See `QUIC_CONNECTION`.
149
150**QCSO:** QUIC Connection SSL Object. This is an SSL object created using
151`SSL_new` using a QUIC method.
152
153**QCTX**: QUIC Context. This is a utility object defined within the QUIC APL
154which helps to unwrap an SSL object pointer (a QCSO or QSSO) into the relevant
155structure pointers such as `QUIC_CONNECTION` or `QUIC_XSO`.
156
157**QRL:** QUIC record layer. Refers collectively to the QRX and QTX.
158
159**QRX:** QUIC Record Layer RX. Receives incoming datagrams and decrypts the
160packets contained in them. Manages decrypted packets in a queue pending
161processing by upper layers.
162
163**QS:** See `QUIC_STREAM`.
164
165**QSM:** QUIC Streams Mapper. Manages internal `QUIC_STREAM` objects and maps
166IDs to those objects. Allows iteration of active streams.
167
168**QSO:** QUIC SSL Object. May be a QCSO or a QSSO.
169
170**QSSO:** QUIC Stream SSL Object. This is an SSL object which is subsidiary to a
171given QCSO, obtained using (for example) `SSL_new_stream` or
172`SSL_accept_stream`.
173
174**QTLS**, **QUIC_TLS**: Implements the QUIC handshake layer using TLS 1.3,
175wrapping libssl TLS code to implement the QUIC-specific aspects of QUIC TLS.
176
177**QTX:** QUIC Record Layer TX. Encrypts and sends packets in datagrams.
178
179**QUIC_CHANNEL:** Internal object in the QUIC core implementation corresponding
180to a QUIC connection. Ties together other components and provides connection
181handling and state machine implementation. Belongs to a `QUIC_PORT` representing
182a UDP socket/BIO, which in turn belongs to a `QUIC_ENGINE`. Owns some number of
183`QUIC_STREAM` instances. The `QUIC_CHANNEL` code is fused tightly with the RXDP.
184
185**QUIC_CONNECTION:** QUIC connection. This is the object representing a QUIC
186connection in the APL. It internally corresponds to a `QUIC_CHANNEL` object in
187the QUIC core implementation.
188
189**QUIC_ENGINE:** Internal object in the QUIC core implementation constituting
190the top-level object of a QUIC event and I/O processing domain. Owns zero or
191more `QUIC_PORT` instances, each of which owns zero or more `QUIC_CHANNEL`
192objects representing QUIC connections.
193
194**QUIC_PORT:** Internal object in the QUIC core implementation corresponding to
195a listening port/network BIO. Has zero or more child `QUIC_CHANNEL` objects
196associated with it and belongs to a `QUIC_ENGINE`.
197
198**QUIC_STREAM**: Internal object tracking a QUIC stream. Unlike an XSO this is
199not part of the APL. An XSO wraps a QUIC_STREAM once that stream is exposed as
200an API object. As such, a `QUIC_CONNECTION` is to a `QUIC_CHANNEL` what a
201`QUIC_XSO` is to a `QUIC_STREAM`.
202
203**RCID:** Remote CID. Refers to a CID which has been provided to us by a peer
204and which we can place in the DCID field of an outgoing packet. See also LCID,
205Unnumbered CID and Numbered CID.
206
207**RCIDM:** Remote CID Manager. Tracks RCIDs which have been provided to us by a
208peer. See also LCIDM.
209
210**REGEN:** A strategy for regenerating lost frames. This strategy regenerates
211the frame from canonical data sources without having to store a copy of the
212frame which was transmitted. See FIFM design document for details.
213
214**Remotely-initiated:** Refers to a QUIC stream which was initiated by the
215remote peer, rather than by the local application.
216
217**RIO:** Reactive I/O subsystem. Refers to the generic, non-QUIC specific parts
218of the asynchronous I/O handling code which the OpenSSL QUIC stack is built on.
219
220**RSTREAM:** Receive stream. Internal receive buffer management object used to
221store data which has been RX'd but not yet read by the application.
222
223**RTT:** Round trip time. Time for a datagram to reach a given peer and a reply
224to reach the local machine, assuming the peer responds immediately.
225
226**RXDP:** RX depacketiser. Handles frames in packets which have been decrypted
227by a QRX.
228
229**RXE:** RX entry. Structure containing decrypted received packets awaiting
230processing. Stored in a queue known as the RXL. These structures belong to a
231QRX.
232
233**RXFC:** RX flow control. This determines how much a peer may send to us and
234provides indication of when flow control frames increasing a peer's flow control
235budget should be generated. Exists in both connection-level and stream-level
236instances.
237
238**RXKU:** RX key update. The detected condition whereby a received packet
239has a flipped Key Phase bit, meaning the peer has initiated a key update.
240Causes a solicited TXKU. See also TXKU.
241
242**RXL:** RXE list. See RXE.
243
244**RCMPPL:** The number of bytes left in a packet whose payload we are currently
245forming. This is the CMPPL minus any bytes we have already put into the payload.
246
247**SCID:** Source Connection ID. Found in some QUIC packet headers.
248
249**SRT:** Stateless reset token.
250
251**SRTM:** Stateless reset token manager. Object which tracks SRTs we have
252received.
253
254**SSTREAM:** Send stream. Internal send buffer management object used to store
255data which has been passed to libssl for sending but which has not yet been
256transmitted, or not yet been acknowledged.
257
258**STATM:** Statistics manager. Measures estimated connection RTT.
259
260**TA:** Thread assisted mode.
261
262**TPARAM:** Transport parameter.  See RFC 9000.
263
264**TSERVER:** Test server. Internal test server object built around a channel.
265
266**TXE:** TX entry. Structure containing encrypted data pending transmission.
267Owned by the QTX.
268
269**TXFC:** TX flow control. This determines how much can be transmitted to the
270peer. Exists in both connection-level and stream-level instances.
271
272**TXKU:** TX key update. This refers to when a QTX signals a key update for the
273TX direction by flipping the Key Phase bit in an outgoing packet. A TXKU can be
274either spontaneous (locally initiated) or in solicited (in response to receiving
275an RXKU). See also RXKU.
276
277**TXL:** TXE list. See TXE.
278
279**TXP:** TX packetiser. This is responsible for generating yet-unencrypted
280packets and passing them to a QTX for encryption and transmission. It must
281decide how to spend the space available in a datagram.
282
283**TXPIM:** Transmitted Packet Information Manager. Stores information about
284transmitted packets and the frames contained within them. This information
285is needed to facilitate retransmission of frames if the packets they are in
286are lost. Note that the ACKM records only receipt or loss of entire packets,
287whereas TXPIM tracks information about individual frames in those packets.
288
289**TX/RX v. Send/Receive:** The terms *TX*  and *RX* are used for *network-level*
290communication, whereas *send* and *receive* are used for application-level
291communication. An application *sends*  on a stream (causing data to be appended
292to a *send stream buffer*, and that data is eventually TX'd by the TXP and QTX.)
293
294**Uni:** Abbreviation of unidirectional, referring to a QUIC unidirectional
295stream.
296
297**Unnumbered CID:** Refers to a CID which does not have a sequence number
298associated with it and therefore cannot be referred to by a `NEW_CONNECTION_ID`
299or `RETIRE_CONNECTION_ID` frame's sequence number fields. The only unnumbered
300CIDs are Initial ODCIDs and Retry ODCIDs. These CIDs are exceptionally retired
301automatically during handshake confirmation. See also Numbered CID.
302
303**URXE:** Unprocessed RX entry. Structure containing yet-undecrypted received
304datagrams pending processing. Stored in a queue known as the URXL.
305Ownership of URXEs is shared between DEMUX and QRX.
306
307**URXL:** URXE list. See URXE.
308
309**XSO:** External Stream Object. This is the API object representing a QUIC
310stream in the APL. Internally, it is the `QUIC_XSO` structure, externally it is
311a `SSL *` (and is a QSSO).
312