1 | Glossary of QUIC Terms
|
---|
2 | ======================
|
---|
3 |
|
---|
4 | **ACKM:** ACK Manager. Responsible for tracking packets in flight and generating
|
---|
5 | notifications when they are lost, or when they are successfully delivered.
|
---|
6 |
|
---|
7 | **Active Stream:** A stream which has data or control frames ready for
|
---|
8 | transmission. Active stream status is managed by the QSM.
|
---|
9 |
|
---|
10 | **AEC:** Application error code. An error code provided by a local or remote
|
---|
11 | application 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
|
---|
16 | terms of an underlying `QUIC_CHANNEL` object.
|
---|
17 |
|
---|
18 | **Bidi:** Abbreviation of bidirectional, referring to a QUIC bidirectional
|
---|
19 | stream.
|
---|
20 |
|
---|
21 | **CC:** Congestion controller. Estimates network channel capacity and imposes
|
---|
22 | limits on transmissions accordingly.
|
---|
23 |
|
---|
24 | **CFQ:** Control Frame Queue. Considered part of the FIFM, this implements
|
---|
25 | the CFQ strategy for frame in flight management. For details, see FIFM
|
---|
26 | design 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
|
---|
33 | the same datagram as one or more previous packets. This is just the MDPL minus
|
---|
34 | the total size of all previous packets already serialized into to the same
|
---|
35 | datagram.
|
---|
36 |
|
---|
37 | **CMPPL:** The maximum number of payload bytes we can put in the payload of
|
---|
38 | another QUIC packet which is to be coalesced with one or more previous QUIC
|
---|
39 | packets and placed into the same datagram. Essentially, this is the room we have
|
---|
40 | left for another packet payload.
|
---|
41 |
|
---|
42 | **CSM:** Connection state machine. Refers to some aspects of a QUIC channel. Not
|
---|
43 | implemented 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
|
---|
48 | DCID.
|
---|
49 |
|
---|
50 | **DGRAM:** (UDP) datagram.
|
---|
51 |
|
---|
52 | **DISPATCH:** Refers to the QUIC-specific dispatch code in `ssl_lib.c`. This
|
---|
53 | dispatches 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
|
---|
62 | frame tracking and retransmission on loss.
|
---|
63 |
|
---|
64 | **FIFM:** Frame-in-flight manager. Tracks frames in flight until their
|
---|
65 | containing packets are deemed delivered or lost, so that frames can be
|
---|
66 | retransmitted if necessary. Comprises the CFQ, TXPIM and FIFD.
|
---|
67 |
|
---|
68 | **GCR:** Generic Control Frame Retransmission. A strategy for regenerating lost
|
---|
69 | frames. Stores raw frame in a queue so that it can be retransmitted if lost. See
|
---|
70 | FIFM design document for details.
|
---|
71 |
|
---|
72 | **Key epoch:** Non-negative number designating a generation of QUIC keys used to
|
---|
73 | encrypt or decrypt packets, starting at 0. This increases by 1 when a QUIC key
|
---|
74 | update 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
|
---|
79 | packets by a QRX or QTX. Due to the QUIC key update mechanism, multiple keyslots
|
---|
80 | may 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
|
---|
89 | connection 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.
|
---|
92 | See also RCIDM.
|
---|
93 |
|
---|
94 | **Locally-initiated:** Refers to a QUIC stream which was initiated by the local
|
---|
95 | application rather than the remote peer.
|
---|
96 |
|
---|
97 | **MDPL:** Maximum Datagram Payload Length. The maximum number of UDP payload
|
---|
98 | bytes we can put in a UDP packet. This is derived from the applicable PMTU. This
|
---|
99 | is also the maximum size of a single QUIC packet if we place only one packet in
|
---|
100 | a datagram. The MDPL may vary based on both local source IP and destination IP
|
---|
101 | due to different path MTUs.
|
---|
102 |
|
---|
103 | **MinDPL:** In some cases we must ensure a datagram has a minimum size of a
|
---|
104 | certain number of bytes. This does not need to be accomplished with a single
|
---|
105 | packet, but we may need to add PADDING frames to the final packet added to a
|
---|
106 | datagram in this case.
|
---|
107 |
|
---|
108 | **MinPL:** The minimum serialized packet length we are using while serializing a
|
---|
109 | given packet. May often be 0. Used to meet MinDPL requirements, and thus equal
|
---|
110 | to MinDPL minus the length of any packets we have already encoded into the
|
---|
111 | datagram.
|
---|
112 |
|
---|
113 | **MinPPL:** The minimum number of bytes which must be placed into a packet
|
---|
114 | payload 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
|
---|
117 | serialized QUIC packet in bytes in some given context. Typically equal to the
|
---|
118 | MDPL and never greater than it.
|
---|
119 |
|
---|
120 | **MPPL:** The maximum number of plaintext bytes we can put in the payload of a
|
---|
121 | QUIC packet. This is related to the MDPL by the size of the encoded header and
|
---|
122 | the size of any AEAD authentication tag which will be attached to the
|
---|
123 | ciphertext.
|
---|
124 |
|
---|
125 | **MSMT:** Multi-stream multi-thread. Refers to a type of multi-stream QUIC usage
|
---|
126 | in which API calls can be made on different threads.
|
---|
127 |
|
---|
128 | **MSST:** Multi-stream single-thread. Refers to a type of multi-stream QUIC
|
---|
129 | usage 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
|
---|
134 | to it. All CIDs other than Initial ODCIDs and Retry ODCIDs have a sequence
|
---|
135 | number assigned. See also Unnumbered CID.
|
---|
136 |
|
---|
137 | **ODCID:** Original Destination CID. This is the DCID found in the first Initial
|
---|
138 | packet sent by a client, and is used to generate the secrets for encrypting
|
---|
139 | Initial packets. It is only used temporarily.
|
---|
140 |
|
---|
141 | **PN:** Packet number. Most QUIC packet types have a packet number (PN); see RFC
|
---|
142 | 9000.
|
---|
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
|
---|
154 | which helps to unwrap a SSL object pointer (a QCSO or QSSO) into the relevant
|
---|
155 | structure 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
|
---|
160 | packets contained in them. Manages decrypted packets in a queue pending
|
---|
161 | processing by upper layers.
|
---|
162 |
|
---|
163 | **QS:** See `QUIC_STREAM`.
|
---|
164 |
|
---|
165 | **QSM:** QUIC Streams Mapper. Manages internal `QUIC_STREAM` objects and maps
|
---|
166 | IDs 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
|
---|
171 | given 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,
|
---|
175 | wrapping 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
|
---|
180 | to a QUIC connection. Ties together other components and provides connection
|
---|
181 | handling and state machine implementation. Belongs to a `QUIC_PORT` representing
|
---|
182 | a 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
|
---|
186 | connection in the APL. It internally corresponds to a `QUIC_CHANNEL` object in
|
---|
187 | the QUIC core implementation.
|
---|
188 |
|
---|
189 | **QUIC_ENGINE:** Internal object in the QUIC core implementation constituting
|
---|
190 | the top-level object of a QUIC event and I/O processing domain. Owns zero or
|
---|
191 | more `QUIC_PORT` instances, each of which owns zero or more `QUIC_CHANNEL`
|
---|
192 | objects representing QUIC connections.
|
---|
193 |
|
---|
194 | **QUIC_PORT:** Internal object in the QUIC core implementation corresponding to
|
---|
195 | a listening port/network BIO. Has zero or more child `QUIC_CHANNEL` objects
|
---|
196 | associated with it and belongs to a `QUIC_ENGINE`.
|
---|
197 |
|
---|
198 | **QUIC_STREAM**: Internal object tracking a QUIC stream. Unlike an XSO this is
|
---|
199 | not part of the APL. An XSO wraps a QUIC_STREAM once that stream is exposed as
|
---|
200 | an 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
|
---|
204 | and which we can place in the DCID field of an outgoing packet. See also LCID,
|
---|
205 | Unnumbered CID and Numbered CID.
|
---|
206 |
|
---|
207 | **RCIDM:** Remote CID Manager. Tracks RCIDs which have been provided to us by a
|
---|
208 | peer. See also LCIDM.
|
---|
209 |
|
---|
210 | **REGEN:** A strategy for regenerating lost frames. This strategy regenerates
|
---|
211 | the frame from canonical data sources without having to store a copy of the
|
---|
212 | frame which was transmitted. See FIFM design document for details.
|
---|
213 |
|
---|
214 | **Remotely-initiated:** Refers to a QUIC stream which was initiated by the
|
---|
215 | remote peer, rather than by the local application.
|
---|
216 |
|
---|
217 | **RIO:** Reactive I/O subsystem. Refers to the generic, non-QUIC specific parts
|
---|
218 | of 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
|
---|
221 | store 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
|
---|
224 | to reach the local machine, assuming the peer responds immediately.
|
---|
225 |
|
---|
226 | **RXDP:** RX depacketiser. Handles frames in packets which have been decrypted
|
---|
227 | by a QRX.
|
---|
228 |
|
---|
229 | **RXE:** RX entry. Structure containing decrypted received packets awaiting
|
---|
230 | processing. Stored in a queue known as the RXL. These structures belong to a
|
---|
231 | QRX.
|
---|
232 |
|
---|
233 | **RXFC:** RX flow control. This determines how much a peer may send to us and
|
---|
234 | provides indication of when flow control frames increasing a peer's flow control
|
---|
235 | budget should be generated. Exists in both connection-level and stream-level
|
---|
236 | instances.
|
---|
237 |
|
---|
238 | **RXKU:** RX key update. The detected condition whereby a received packet
|
---|
239 | has a flipped Key Phase bit, meaning the peer has initiated a key update.
|
---|
240 | Causes 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
|
---|
245 | forming. 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
|
---|
252 | received.
|
---|
253 |
|
---|
254 | **SSTREAM:** Send stream. Internal send buffer management object used to store
|
---|
255 | data which has been passed to libssl for sending but which has not yet been
|
---|
256 | transmitted, 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.
|
---|
267 | Owned by the QTX.
|
---|
268 |
|
---|
269 | **TXFC:** TX flow control. This determines how much can be transmitted to the
|
---|
270 | peer. 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
|
---|
273 | TX direction by flipping the Key Phase bit in an outgoing packet. A TXKU can be
|
---|
274 | either spontaneous (locally initiated) or in solicited (in response to receiving
|
---|
275 | an RXKU). See also RXKU.
|
---|
276 |
|
---|
277 | **TXL:** TXE list. See TXE.
|
---|
278 |
|
---|
279 | **TXP:** TX packetiser. This is responsible for generating yet-unencrypted
|
---|
280 | packets and passing them to a QTX for encryption and transmission. It must
|
---|
281 | decide how to spend the space available in a datagram.
|
---|
282 |
|
---|
283 | **TXPIM:** Transmitted Packet Information Manager. Stores information about
|
---|
284 | transmitted packets and the frames contained within them. This information
|
---|
285 | is needed to facilitate retransmission of frames if the packets they are in
|
---|
286 | are lost. Note that the ACKM records only receipt or loss of entire packets,
|
---|
287 | whereas 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*
|
---|
290 | communication, whereas *send* and *receive* are used for application-level
|
---|
291 | communication. An application *sends* on a stream (causing data to be appended
|
---|
292 | to 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
|
---|
295 | stream.
|
---|
296 |
|
---|
297 | **Unnumbered CID:** Refers to a CID which does not have a sequence number
|
---|
298 | associated with it and therefore cannot be referred to by a `NEW_CONNECTION_ID`
|
---|
299 | or `RETIRE_CONNECTION_ID` frame's sequence number fields. The only unnumbered
|
---|
300 | CIDs are Initial ODCIDs and Retry ODCIDs. These CIDs are exceptionally retired
|
---|
301 | automatically during handshake confirmation. See also Numbered CID.
|
---|
302 |
|
---|
303 | **URXE:** Unprocessed RX entry. Structure containing yet-undecrypted received
|
---|
304 | datagrams pending processing. Stored in a queue known as the URXL.
|
---|
305 | Ownership 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
|
---|
310 | stream in the APL. Internally, it is the `QUIC_XSO` structure, externally it is
|
---|
311 | a `SSL *` (and is a QSSO).
|
---|