draft-ietf-quic-transport-26.txt   draft-ietf-quic-transport-27.txt 
QUIC J. Iyengar, Ed. QUIC J. Iyengar, Ed.
Internet-Draft Fastly Internet-Draft Fastly
Intended status: Standards Track M. Thomson, Ed. Intended status: Standards Track M. Thomson, Ed.
Expires: 24 August 2020 Mozilla Expires: 24 August 2020 Mozilla
21 February 2020 21 February 2020
QUIC: A UDP-Based Multiplexed and Secure Transport QUIC: A UDP-Based Multiplexed and Secure Transport
draft-ietf-quic-transport-26 draft-ietf-quic-transport-27
Abstract Abstract
This document defines the core of the QUIC transport protocol. This document defines the core of the QUIC transport protocol.
Accompanying documents describe QUIC's loss detection and congestion Accompanying documents describe QUIC's loss detection and congestion
control and the use of TLS for key negotiation. control and the use of TLS for key negotiation.
Note to Readers Note to Readers
Discussion of this draft takes place on the QUIC working group Discussion of this draft takes place on the QUIC working group
skipping to change at page 2, line 17 skipping to change at page 2, line 17
license-info) in effect on the date of publication of this document. license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components and restrictions with respect to this document. Code Components
extracted from this document must include Simplified BSD License text extracted from this document must include Simplified BSD License text
as described in Section 4.e of the Trust Legal Provisions and are as described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Simplified BSD License. provided without warranty as described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1. Document Structure . . . . . . . . . . . . . . . . . . . 6 1.1. Document Structure . . . . . . . . . . . . . . . . . . . 7
1.2. Terms and Definitions . . . . . . . . . . . . . . . . . . 8 1.2. Terms and Definitions . . . . . . . . . . . . . . . . . . 8
1.3. Notational Conventions . . . . . . . . . . . . . . . . . 9 1.3. Notational Conventions . . . . . . . . . . . . . . . . . 9
2. Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2. Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1. Stream Types and Identifiers . . . . . . . . . . . . . . 10 2.1. Stream Types and Identifiers . . . . . . . . . . . . . . 10
2.2. Sending and Receiving Data . . . . . . . . . . . . . . . 11 2.2. Sending and Receiving Data . . . . . . . . . . . . . . . 11
2.3. Stream Prioritization . . . . . . . . . . . . . . . . . . 11 2.3. Stream Prioritization . . . . . . . . . . . . . . . . . . 11
2.4. Required Operations on Streams . . . . . . . . . . . . . 12 2.4. Required Operations on Streams . . . . . . . . . . . . . 12
3. Stream States . . . . . . . . . . . . . . . . . . . . . . . . 12 3. Stream States . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1. Sending Stream States . . . . . . . . . . . . . . . . . . 13 3.1. Sending Stream States . . . . . . . . . . . . . . . . . . 13
3.2. Receiving Stream States . . . . . . . . . . . . . . . . . 15 3.2. Receiving Stream States . . . . . . . . . . . . . . . . . 15
skipping to change at page 5, line 46 skipping to change at page 5, line 46
22.1.4. Permanent Registrations . . . . . . . . . . . . . . 146 22.1.4. Permanent Registrations . . . . . . . . . . . . . . 146
22.2. QUIC Transport Parameter Registry . . . . . . . . . . . 147 22.2. QUIC Transport Parameter Registry . . . . . . . . . . . 147
22.3. QUIC Frame Type Registry . . . . . . . . . . . . . . . . 148 22.3. QUIC Frame Type Registry . . . . . . . . . . . . . . . . 148
22.4. QUIC Transport Error Codes Registry . . . . . . . . . . 149 22.4. QUIC Transport Error Codes Registry . . . . . . . . . . 149
23. References . . . . . . . . . . . . . . . . . . . . . . . . . 151 23. References . . . . . . . . . . . . . . . . . . . . . . . . . 151
23.1. Normative References . . . . . . . . . . . . . . . . . . 151 23.1. Normative References . . . . . . . . . . . . . . . . . . 151
23.2. Informative References . . . . . . . . . . . . . . . . . 152 23.2. Informative References . . . . . . . . . . . . . . . . . 152
Appendix A. Sample Packet Number Decoding Algorithm . . . . . . 154 Appendix A. Sample Packet Number Decoding Algorithm . . . . . . 154
Appendix B. Sample ECN Validation Algorithm . . . . . . . . . . 155 Appendix B. Sample ECN Validation Algorithm . . . . . . . . . . 155
Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 156 Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 156
C.1. Since draft-ietf-quic-transport-24 . . . . . . . . . . . 156 C.1. Since draft-ietf-quic-transport-26 . . . . . . . . . . . 156
C.2. Since draft-ietf-quic-transport-23 . . . . . . . . . . . 157 C.2. Since draft-ietf-quic-transport-25 . . . . . . . . . . . 156
C.3. Since draft-ietf-quic-transport-22 . . . . . . . . . . . 158 C.3. Since draft-ietf-quic-transport-24 . . . . . . . . . . . 156
C.4. Since draft-ietf-quic-transport-21 . . . . . . . . . . . 159 C.4. Since draft-ietf-quic-transport-23 . . . . . . . . . . . 158
C.5. Since draft-ietf-quic-transport-20 . . . . . . . . . . . 159 C.5. Since draft-ietf-quic-transport-22 . . . . . . . . . . . 158
C.6. Since draft-ietf-quic-transport-19 . . . . . . . . . . . 160 C.6. Since draft-ietf-quic-transport-21 . . . . . . . . . . . 159
C.7. Since draft-ietf-quic-transport-18 . . . . . . . . . . . 161 C.7. Since draft-ietf-quic-transport-20 . . . . . . . . . . . 160
C.8. Since draft-ietf-quic-transport-17 . . . . . . . . . . . 161 C.8. Since draft-ietf-quic-transport-19 . . . . . . . . . . . 160
C.9. Since draft-ietf-quic-transport-16 . . . . . . . . . . . 162 C.9. Since draft-ietf-quic-transport-18 . . . . . . . . . . . 161
C.10. Since draft-ietf-quic-transport-15 . . . . . . . . . . . 163 C.10. Since draft-ietf-quic-transport-17 . . . . . . . . . . . 161
C.11. Since draft-ietf-quic-transport-14 . . . . . . . . . . . 163 C.11. Since draft-ietf-quic-transport-16 . . . . . . . . . . . 162
C.12. Since draft-ietf-quic-transport-13 . . . . . . . . . . . 164 C.12. Since draft-ietf-quic-transport-15 . . . . . . . . . . . 163
C.13. Since draft-ietf-quic-transport-12 . . . . . . . . . . . 164 C.13. Since draft-ietf-quic-transport-14 . . . . . . . . . . . 163
C.14. Since draft-ietf-quic-transport-11 . . . . . . . . . . . 165 C.14. Since draft-ietf-quic-transport-13 . . . . . . . . . . . 164
C.15. Since draft-ietf-quic-transport-10 . . . . . . . . . . . 165 C.15. Since draft-ietf-quic-transport-12 . . . . . . . . . . . 165
C.16. Since draft-ietf-quic-transport-09 . . . . . . . . . . . 166 C.16. Since draft-ietf-quic-transport-11 . . . . . . . . . . . 165
C.17. Since draft-ietf-quic-transport-08 . . . . . . . . . . . 167 C.17. Since draft-ietf-quic-transport-10 . . . . . . . . . . . 166
C.18. Since draft-ietf-quic-transport-07 . . . . . . . . . . . 167 C.18. Since draft-ietf-quic-transport-09 . . . . . . . . . . . 166
C.19. Since draft-ietf-quic-transport-06 . . . . . . . . . . . 168 C.19. Since draft-ietf-quic-transport-08 . . . . . . . . . . . 167
C.20. Since draft-ietf-quic-transport-05 . . . . . . . . . . . 169 C.20. Since draft-ietf-quic-transport-07 . . . . . . . . . . . 168
C.21. Since draft-ietf-quic-transport-04 . . . . . . . . . . . 169 C.21. Since draft-ietf-quic-transport-06 . . . . . . . . . . . 169
C.22. Since draft-ietf-quic-transport-03 . . . . . . . . . . . 170 C.22. Since draft-ietf-quic-transport-05 . . . . . . . . . . . 169
C.23. Since draft-ietf-quic-transport-02 . . . . . . . . . . . 170 C.23. Since draft-ietf-quic-transport-04 . . . . . . . . . . . 169
C.24. Since draft-ietf-quic-transport-01 . . . . . . . . . . . 171 C.24. Since draft-ietf-quic-transport-03 . . . . . . . . . . . 170
C.25. Since draft-ietf-quic-transport-00 . . . . . . . . . . . 173 C.25. Since draft-ietf-quic-transport-02 . . . . . . . . . . . 170
C.26. Since draft-hamilton-quic-transport-protocol-01 . . . . . 173 C.26. Since draft-ietf-quic-transport-01 . . . . . . . . . . . 171
C.27. Since draft-ietf-quic-transport-00 . . . . . . . . . . . 173
C.28. Since draft-hamilton-quic-transport-protocol-01 . . . . . 173
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 174 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 174
1. Introduction 1. Introduction
QUIC is a multiplexed and secure general-purpose transport protocol QUIC is a multiplexed and secure general-purpose transport protocol
that provides: that provides:
* Stream multiplexing * Stream multiplexing
skipping to change at page 105, line 40 skipping to change at page 105, line 40
With this mechanism, the server reflects the spin value received, With this mechanism, the server reflects the spin value received,
while the client 'spins' it after one RTT. On-path observers can while the client 'spins' it after one RTT. On-path observers can
measure the time between two spin bit toggle events to estimate the measure the time between two spin bit toggle events to estimate the
end-to-end RTT of a connection. end-to-end RTT of a connection.
18. Transport Parameter Encoding 18. Transport Parameter Encoding
The "extension_data" field of the quic_transport_parameters extension The "extension_data" field of the quic_transport_parameters extension
defined in [QUIC-TLS] contains the QUIC transport parameters. They defined in [QUIC-TLS] contains the QUIC transport parameters. They
are encoded as a length-prefixed sequence of transport parameters, as are encoded as a sequence of transport parameters, as shown in
shown in Figure 16: Figure 16:
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Length (16) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transport Parameter 1 (*) ... | Transport Parameter 1 (*) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transport Parameter 2 (*) ... | Transport Parameter 2 (*) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
... ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transport Parameter N (*) ... | Transport Parameter N (*) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 16: Sequence of Transport Parameters Figure 16: Sequence of Transport Parameters
The Sequence Length field contains the length of the sequence of Each transport parameter is encoded as an (identifier, length, value)
transport parameters, in bytes. Each transport parameter is encoded tuple, as shown in Figure 17:
as an (identifier, length, value) tuple, as shown in Figure 17:
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transport Parameter ID (16) | Transport Param Length (16) | | Transport Parameter ID (i) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transport Parameter Length (i) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transport Parameter Value (*) ... | Transport Parameter Value (*) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 17: Transport Parameter Encoding Figure 17: Transport Parameter Encoding
The Transport Param Length field contains the length of the Transport The Transport Param Length field contains the length of the Transport
Parameter Value field. Parameter Value field.
QUIC encodes transport parameters into a sequence of bytes, which are QUIC encodes transport parameters into a sequence of bytes, which are
skipping to change at page 107, line 12 skipping to change at page 107, line 12
This section details the transport parameters defined in this This section details the transport parameters defined in this
document. document.
Many transport parameters listed here have integer values. Those Many transport parameters listed here have integer values. Those
transport parameters that are identified as integers use a variable- transport parameters that are identified as integers use a variable-
length integer encoding (see Section 16) and have a default value of length integer encoding (see Section 16) and have a default value of
0 if the transport parameter is absent, unless otherwise stated. 0 if the transport parameter is absent, unless otherwise stated.
The following transport parameters are defined: The following transport parameters are defined:
original_connection_id (0x0000): The value of the Destination original_connection_id (0x00): The value of the Destination
Connection ID field from the first Initial packet sent by the Connection ID field from the first Initial packet sent by the
client. This transport parameter is only sent by a server. This client. This transport parameter is only sent by a server. This
is the same value sent in the "Original Destination Connection ID" is the same value sent in the "Original Destination Connection ID"
field of a Retry packet (see Section 17.2.5). A server MUST field of a Retry packet (see Section 17.2.5). A server MUST
include the original_connection_id transport parameter if it sent include the original_connection_id transport parameter if it sent
a Retry packet. a Retry packet.
max_idle_timeout (0x0001): The max idle timeout is a value in max_idle_timeout (0x01): The max idle timeout is a value in
milliseconds that is encoded as an integer; see (Section 10.2). milliseconds that is encoded as an integer; see (Section 10.2).
Idle timeout is disabled when both endpoints omit this transport Idle timeout is disabled when both endpoints omit this transport
parameter or specify a value of 0. parameter or specify a value of 0.
stateless_reset_token (0x0002): A stateless reset token is used in stateless_reset_token (0x02): A stateless reset token is used in
verifying a stateless reset; see Section 10.4. This parameter is verifying a stateless reset; see Section 10.4. This parameter is
a sequence of 16 bytes. This transport parameter MUST NOT be sent a sequence of 16 bytes. This transport parameter MUST NOT be sent
by a client, but MAY be sent by a server. A server that does not by a client, but MAY be sent by a server. A server that does not
send this transport parameter cannot use stateless reset send this transport parameter cannot use stateless reset
(Section 10.4) for the connection ID negotiated during the (Section 10.4) for the connection ID negotiated during the
handshake. handshake.
max_packet_size (0x0003): The maximum packet size parameter is an max_packet_size (0x03): The maximum packet size parameter is an
integer value that limits the size of packets that the endpoint is integer value that limits the size of packets that the endpoint is
willing to receive. This indicates that packets larger than this willing to receive. This indicates that packets larger than this
limit will be dropped. The default for this parameter is the limit will be dropped. The default for this parameter is the
maximum permitted UDP payload of 65527. Values below 1200 are maximum permitted UDP payload of 65527. Values below 1200 are
invalid. This limit only applies to protected packets invalid. This limit only applies to protected packets
(Section 12.1). (Section 12.1).
initial_max_data (0x0004): The initial maximum data parameter is an initial_max_data (0x04): The initial maximum data parameter is an
integer value that contains the initial value for the maximum integer value that contains the initial value for the maximum
amount of data that can be sent on the connection. This is amount of data that can be sent on the connection. This is
equivalent to sending a MAX_DATA (Section 19.9) for the connection equivalent to sending a MAX_DATA (Section 19.9) for the connection
immediately after completing the handshake. immediately after completing the handshake.
initial_max_stream_data_bidi_local (0x0005): This parameter is an initial_max_stream_data_bidi_local (0x05): This parameter is an
integer value specifying the initial flow control limit for integer value specifying the initial flow control limit for
locally-initiated bidirectional streams. This limit applies to locally-initiated bidirectional streams. This limit applies to
newly created bidirectional streams opened by the endpoint that newly created bidirectional streams opened by the endpoint that
sends the transport parameter. In client transport parameters, sends the transport parameter. In client transport parameters,
this applies to streams with an identifier with the least this applies to streams with an identifier with the least
significant two bits set to 0x0; in server transport parameters, significant two bits set to 0x0; in server transport parameters,
this applies to streams with the least significant two bits set to this applies to streams with the least significant two bits set to
0x1. 0x1.
initial_max_stream_data_bidi_remote (0x0006): This parameter is an initial_max_stream_data_bidi_remote (0x06): This parameter is an
integer value specifying the initial flow control limit for peer- integer value specifying the initial flow control limit for peer-
initiated bidirectional streams. This limit applies to newly initiated bidirectional streams. This limit applies to newly
created bidirectional streams opened by the endpoint that receives created bidirectional streams opened by the endpoint that receives
the transport parameter. In client transport parameters, this the transport parameter. In client transport parameters, this
applies to streams with an identifier with the least significant applies to streams with an identifier with the least significant
two bits set to 0x1; in server transport parameters, this applies two bits set to 0x1; in server transport parameters, this applies
to streams with the least significant two bits set to 0x0. to streams with the least significant two bits set to 0x0.
initial_max_stream_data_uni (0x0007): This parameter is an integer initial_max_stream_data_uni (0x07): This parameter is an integer
value specifying the initial flow control limit for unidirectional value specifying the initial flow control limit for unidirectional
streams. This limit applies to newly created unidirectional streams. This limit applies to newly created unidirectional
streams opened by the endpoint that receives the transport streams opened by the endpoint that receives the transport
parameter. In client transport parameters, this applies to parameter. In client transport parameters, this applies to
streams with an identifier with the least significant two bits set streams with an identifier with the least significant two bits set
to 0x3; in server transport parameters, this applies to streams to 0x3; in server transport parameters, this applies to streams
with the least significant two bits set to 0x2. with the least significant two bits set to 0x2.
initial_max_streams_bidi (0x0008): The initial maximum bidirectional initial_max_streams_bidi (0x08): The initial maximum bidirectional
streams parameter is an integer value that contains the initial streams parameter is an integer value that contains the initial
maximum number of bidirectional streams the peer may initiate. If maximum number of bidirectional streams the peer may initiate. If
this parameter is absent or zero, the peer cannot open this parameter is absent or zero, the peer cannot open
bidirectional streams until a MAX_STREAMS frame is sent. Setting bidirectional streams until a MAX_STREAMS frame is sent. Setting
this parameter is equivalent to sending a MAX_STREAMS this parameter is equivalent to sending a MAX_STREAMS
(Section 19.11) of the corresponding type with the same value. (Section 19.11) of the corresponding type with the same value.
initial_max_streams_uni (0x0009): The initial maximum unidirectional initial_max_streams_uni (0x09): The initial maximum unidirectional
streams parameter is an integer value that contains the initial streams parameter is an integer value that contains the initial
maximum number of unidirectional streams the peer may initiate. maximum number of unidirectional streams the peer may initiate.
If this parameter is absent or zero, the peer cannot open If this parameter is absent or zero, the peer cannot open
unidirectional streams until a MAX_STREAMS frame is sent. Setting unidirectional streams until a MAX_STREAMS frame is sent. Setting
this parameter is equivalent to sending a MAX_STREAMS this parameter is equivalent to sending a MAX_STREAMS
(Section 19.11) of the corresponding type with the same value. (Section 19.11) of the corresponding type with the same value.
ack_delay_exponent (0x000a): The ACK delay exponent is an integer ack_delay_exponent (0x0a): The ACK delay exponent is an integer
value indicating an exponent used to decode the ACK Delay field in value indicating an exponent used to decode the ACK Delay field in
the ACK frame (Section 19.3). If this value is absent, a default the ACK frame (Section 19.3). If this value is absent, a default
value of 3 is assumed (indicating a multiplier of 8). Values value of 3 is assumed (indicating a multiplier of 8). Values
above 20 are invalid. above 20 are invalid.
max_ack_delay (0x000b): The maximum ACK delay is an integer value max_ack_delay (0x0b): The maximum ACK delay is an integer value
indicating the maximum amount of time in milliseconds by which the indicating the maximum amount of time in milliseconds by which the
endpoint will delay sending acknowledgments. This value SHOULD endpoint will delay sending acknowledgments. This value SHOULD
include the receiver's expected delays in alarms firing. For include the receiver's expected delays in alarms firing. For
example, if a receiver sets a timer for 5ms and alarms commonly example, if a receiver sets a timer for 5ms and alarms commonly
fire up to 1ms late, then it should send a max_ack_delay of 6ms. fire up to 1ms late, then it should send a max_ack_delay of 6ms.
If this value is absent, a default of 25 milliseconds is assumed. If this value is absent, a default of 25 milliseconds is assumed.
Values of 2^14 or greater are invalid. Values of 2^14 or greater are invalid.
disable_active_migration (0x000c): The disable active migration disable_active_migration (0x0c): The disable active migration
transport parameter is included if the endpoint does not support transport parameter is included if the endpoint does not support
active connection migration (Section 9). Peers of an endpoint active connection migration (Section 9). Peers of an endpoint
that sets this transport parameter MUST NOT send any packets, that sets this transport parameter MUST NOT send any packets,
including probing packets (Section 9.1), from a local address or including probing packets (Section 9.1), from a local address or
port other than that used to perform the handshake. This port other than that used to perform the handshake. This
parameter is a zero-length value. parameter is a zero-length value.
preferred_address (0x000d): The server's preferred address is used preferred_address (0x0d): The server's preferred address is used to
to effect a change in server address at the end of the handshake, effect a change in server address at the end of the handshake, as
as described in Section 9.6. The format of this transport described in Section 9.6. The format of this transport parameter
parameter is shown in Figure 18. This transport parameter is only is shown in Figure 18. This transport parameter is only sent by a
sent by a server. Servers MAY choose to only send a preferred server. Servers MAY choose to only send a preferred address of
address of one address family by sending an all-zero address and one address family by sending an all-zero address and port
port (0.0.0.0:0 or ::.0) for the other family. IP addresses are (0.0.0.0:0 or ::.0) for the other family. IP addresses are
encoded in network byte order. The CID Length field contains the encoded in network byte order. The CID Length field contains the
length of the Connection ID field. length of the Connection ID field.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Address (32) | | IPv4 Address (32) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Port (16) | | IPv4 Port (16) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 110, line 37 skipping to change at page 110, line 37
+ + + +
| | | |
+ Stateless Reset Token (128) + + Stateless Reset Token (128) +
| | | |
+ + + +
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 18: Preferred Address format Figure 18: Preferred Address format
active_connection_id_limit (0x000e): The active connection ID limit active_connection_id_limit (0x0e): The active connection ID limit is
is an integer value specifying the maximum number of connection an integer value specifying the maximum number of connection IDs
IDs from the peer that an endpoint is willing to store. This from the peer that an endpoint is willing to store. This value
value includes the connection ID received during the handshake, includes the connection ID received during the handshake, that
that received in the preferred_address transport parameter, and received in the preferred_address transport parameter, and those
those received in NEW_CONNECTION_ID frames. Unless a zero-length received in NEW_CONNECTION_ID frames. Unless a zero-length
connection ID is being used, the value of the connection ID is being used, the value of the
active_connection_id_limit parameter MUST be no less than 2. If active_connection_id_limit parameter MUST be no less than 2. If
this transport parameter is absent, a default of 2 is assumed. this transport parameter is absent, a default of 2 is assumed.
When a zero-length connection ID is being used, the When a zero-length connection ID is being used, the
active_connection_id_limit parameter MUST NOT be sent. active_connection_id_limit parameter MUST NOT be sent.
If present, transport parameters that set initial flow control limits If present, transport parameters that set initial flow control limits
(initial_max_stream_data_bidi_local, (initial_max_stream_data_bidi_local,
initial_max_stream_data_bidi_remote, and initial_max_stream_data_uni) initial_max_stream_data_bidi_remote, and initial_max_stream_data_uni)
are equivalent to sending a MAX_STREAM_DATA frame (Section 19.10) on are equivalent to sending a MAX_STREAM_DATA frame (Section 19.10) on
skipping to change at page 147, line 22 skipping to change at page 147, line 22
All registrations in this document are assigned a permanent status All registrations in this document are assigned a permanent status
and list as contact both the IESG (ietf@ietf.org) and the QUIC and list as contact both the IESG (ietf@ietf.org) and the QUIC
working group (quic@ietf.org). working group (quic@ietf.org).
22.2. QUIC Transport Parameter Registry 22.2. QUIC Transport Parameter Registry
IANA [SHALL add/has added] a registry for "QUIC Transport Parameters" IANA [SHALL add/has added] a registry for "QUIC Transport Parameters"
under a "QUIC" heading. under a "QUIC" heading.
The "QUIC Transport Parameters" registry governs a 16-bit space. The "QUIC Transport Parameters" registry governs a 62-bit space.
This registry follows the registration policy from Section 22.1. This registry follows the registration policy from Section 22.1.
Permanent registrations in this registry are assigned using the Permanent registrations in this registry are assigned using the
Specification Required policy [RFC8126]. Specification Required policy [RFC8126].
In addition to the fields in Section 22.1.1, permanent registrations In addition to the fields in Section 22.1.1, permanent registrations
in this registry MUST include the following fields: in this registry MUST include the following fields:
Parameter Name: A short mnemonic for the parameter. Parameter Name: A short mnemonic for the parameter.
The initial contents of this registry are shown in Table 6. The initial contents of this registry are shown in Table 6.
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| Value | Parameter Name | Specification | | Value | Parameter Name | Specification |
+========+=====================================+===============+ +=======+=====================================+===============+
| 0x0000 | original_connection_id | Section 18.2 | | 0x00 | original_connection_id | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x0001 | max_idle_timeout | Section 18.2 | | 0x01 | max_idle_timeout | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x0002 | stateless_reset_token | Section 18.2 | | 0x02 | stateless_reset_token | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x0003 | max_packet_size | Section 18.2 | | 0x03 | max_packet_size | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x0004 | initial_max_data | Section 18.2 | | 0x04 | initial_max_data | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x0005 | initial_max_stream_data_bidi_local | Section 18.2 | | 0x05 | initial_max_stream_data_bidi_local | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x0006 | initial_max_stream_data_bidi_remote | Section 18.2 | | 0x06 | initial_max_stream_data_bidi_remote | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x0007 | initial_max_stream_data_uni | Section 18.2 | | 0x07 | initial_max_stream_data_uni | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x0008 | initial_max_streams_bidi | Section 18.2 | | 0x08 | initial_max_streams_bidi | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x0009 | initial_max_streams_uni | Section 18.2 | | 0x09 | initial_max_streams_uni | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x000a | ack_delay_exponent | Section 18.2 | | 0x0a | ack_delay_exponent | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x000b | max_ack_delay | Section 18.2 | | 0x0b | max_ack_delay | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x000c | disable_active_migration | Section 18.2 | | 0x0c | disable_active_migration | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x000d | preferred_address | Section 18.2 | | 0x0d | preferred_address | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
| 0x000e | active_connection_id_limit | Section 18.2 | | 0x0e | active_connection_id_limit | Section 18.2 |
+--------+-------------------------------------+---------------+ +-------+-------------------------------------+---------------+
Table 6: Initial QUIC Transport Parameters Entries Table 6: Initial QUIC Transport Parameters Entries
Additionally, each value of the format "31 * N + 27" for integer Additionally, each value of the format "31 * N + 27" for integer
values of N (that is, "27", "58", "89", ...) are reserved and MUST values of N (that is, "27", "58", "89", ...) are reserved and MUST
NOT be assigned by IANA. NOT be assigned by IANA.
22.3. QUIC Frame Type Registry 22.3. QUIC Frame Type Registry
IANA [SHALL add/has added] a registry for "QUIC Frame Types" under a IANA [SHALL add/has added] a registry for "QUIC Frame Types" under a
"QUIC" heading. "QUIC" heading.
skipping to change at page 151, line 23 skipping to change at page 151, line 23
<http://www.ietf.org/internet-drafts/draft-ietf-tsvwg- <http://www.ietf.org/internet-drafts/draft-ietf-tsvwg-
datagram-plpmtud-08.txt>. datagram-plpmtud-08.txt>.
[IPv4] Postel, J., "Internet Protocol", STD 5, RFC 791, [IPv4] Postel, J., "Internet Protocol", STD 5, RFC 791,
DOI 10.17487/RFC0791, September 1981, DOI 10.17487/RFC0791, September 1981,
<https://www.rfc-editor.org/info/rfc791>. <https://www.rfc-editor.org/info/rfc791>.
[QUIC-RECOVERY] [QUIC-RECOVERY]
Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection
and Congestion Control", Work in Progress, Internet-Draft, and Congestion Control", Work in Progress, Internet-Draft,
draft-ietf-quic-recovery-26, 21 February 2020, draft-ietf-quic-recovery-27, 21 February 2020,
<https://tools.ietf.org/html/draft-ietf-quic-recovery-26>. <https://tools.ietf.org/html/draft-ietf-quic-recovery-27>.
[QUIC-TLS] Thomson, M., Ed. and S. Turner, Ed., "Using Transport [QUIC-TLS] Thomson, M., Ed. and S. Turner, Ed., "Using Transport
Layer Security (TLS) to Secure QUIC", Work in Progress, Layer Security (TLS) to Secure QUIC", Work in Progress,
Internet-Draft, draft-ietf-quic-tls-26, 21 February 2020, Internet-Draft, draft-ietf-quic-tls-27, 21 February 2020,
<https://tools.ietf.org/html/draft-ietf-quic-tls-26>. <https://tools.ietf.org/html/draft-ietf-quic-tls-27>.
[RFC1191] Mogul, J.C. and S.E. Deering, "Path MTU discovery", [RFC1191] Mogul, J.C. and S.E. Deering, "Path MTU discovery",
RFC 1191, DOI 10.17487/RFC1191, November 1990, RFC 1191, DOI 10.17487/RFC1191, November 1990,
<https://www.rfc-editor.org/info/rfc1191>. <https://www.rfc-editor.org/info/rfc1191>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
skipping to change at page 156, line 33 skipping to change at page 156, line 33
marked packets are discarded by the path, the short duration of the marked packets are discarded by the path, the short duration of the
testing period limits the number of losses incurred. testing period limits the number of losses incurred.
Appendix C. Change Log Appendix C. Change Log
*RFC Editor's Note:* Please remove this section prior to *RFC Editor's Note:* Please remove this section prior to
publication of a final version of this document. publication of a final version of this document.
Issue and pull request numbers are listed with a leading octothorp. Issue and pull request numbers are listed with a leading octothorp.
C.1. Since draft-ietf-quic-transport-24 C.1. Since draft-ietf-quic-transport-26
* Change format of transport paramters to use varints (#3294, #3169)
C.2. Since draft-ietf-quic-transport-25
* Define the use of CONNECTION_CLOSE prior to establishing
connection state (#3269, #3297, #3292)
* Allow use of address validation tokens after client address
changes (#3307, #3308)
* Define the timer for address validation (#2910, #3339)
C.3. Since draft-ietf-quic-transport-24
* Added HANDSHAKE_DONE to signal handshake confirmation (#2863, * Added HANDSHAKE_DONE to signal handshake confirmation (#2863,
#3142, #3145) #3142, #3145)
* Add integrity check to Retry packets (#3014, #3274, #3120) * Add integrity check to Retry packets (#3014, #3274, #3120)
* Specify handling of reordered NEW_CONNECTION_ID frames (#3194, * Specify handling of reordered NEW_CONNECTION_ID frames (#3194,
#3202) #3202)
* Require checking of sequence numbers in RETIRE_CONNECTION_ID * Require checking of sequence numbers in RETIRE_CONNECTION_ID
skipping to change at page 157, line 38 skipping to change at page 158, line 5
* Idle timeout is symmetric (#2602, #3099) * Idle timeout is symmetric (#2602, #3099)
* Prohibit IP fragmentation (#3243, #3280) * Prohibit IP fragmentation (#3243, #3280)
* Define the use of provisional registration for all registries * Define the use of provisional registration for all registries
(#3109, #3020, #3102, #3170) (#3109, #3020, #3102, #3170)
* Packets on one path must not adjust values for a different path * Packets on one path must not adjust values for a different path
(#2909, #3139) (#2909, #3139)
C.2. Since draft-ietf-quic-transport-23 C.4. Since draft-ietf-quic-transport-23
* Allow ClientHello to span multiple packets (#2928, #3045) * Allow ClientHello to span multiple packets (#2928, #3045)
* Client Initial size constraints apply to UDP datagram payload * Client Initial size constraints apply to UDP datagram payload
(#3053, #3051) (#3053, #3051)
* Stateless reset changes (#2152, #2993) * Stateless reset changes (#2152, #2993)
- tokens need to be compared in constant time - tokens need to be compared in constant time
skipping to change at page 158, line 26 skipping to change at page 158, line 41
* CONNECTION_CLOSE is not ack-eliciting (#3097, #3098) * CONNECTION_CLOSE is not ack-eliciting (#3097, #3098)
* Frame encoding error conditions updated (#3027, #3042) * Frame encoding error conditions updated (#3027, #3042)
* Non-ack-eliciting packets cannot be sent in response to non-ack- * Non-ack-eliciting packets cannot be sent in response to non-ack-
eliciting packets (#3100, #3104) eliciting packets (#3100, #3104)
* Servers have to change connection IDs in Retry (#2837, #3147) * Servers have to change connection IDs in Retry (#2837, #3147)
C.3. Since draft-ietf-quic-transport-22 C.5. Since draft-ietf-quic-transport-22
* Rules for preventing correlation by connection ID tightened * Rules for preventing correlation by connection ID tightened
(#2084, #2929) (#2084, #2929)
* Clarified use of CONNECTION_CLOSE in Handshake packets (#2151, * Clarified use of CONNECTION_CLOSE in Handshake packets (#2151,
#2541, #2688) #2541, #2688)
* Discourage regressions of largest acknowledged in ACK (#2205, * Discourage regressions of largest acknowledged in ACK (#2205,
#2752) #2752)
skipping to change at page 159, line 32 skipping to change at page 159, line 48
#2840, #2841) #2840, #2841)
* Explanation of the effect of Retry on 0-RTT packets (#2842, #2852) * Explanation of the effect of Retry on 0-RTT packets (#2842, #2852)
* Cryptographic handshake needs to provide server transport * Cryptographic handshake needs to provide server transport
parameter encryption (#2920, #2921) parameter encryption (#2920, #2921)
* Moved ACK generation guidance from recovery draft to transport * Moved ACK generation guidance from recovery draft to transport
draft (#1860, #2916). draft (#1860, #2916).
C.4. Since draft-ietf-quic-transport-21 C.6. Since draft-ietf-quic-transport-21
* Connection ID lengths are now one octet, but limited in version 1 * Connection ID lengths are now one octet, but limited in version 1
to 20 octets of length (#2736, #2749) to 20 octets of length (#2736, #2749)
C.5. Since draft-ietf-quic-transport-20 C.7. Since draft-ietf-quic-transport-20
* Error codes are encoded as variable-length integers (#2672, #2680) * Error codes are encoded as variable-length integers (#2672, #2680)
* NEW_CONNECTION_ID includes a request to retire old connection IDs * NEW_CONNECTION_ID includes a request to retire old connection IDs
(#2645, #2769) (#2645, #2769)
* Tighter rules for generating and explicitly eliciting ACK frames * Tighter rules for generating and explicitly eliciting ACK frames
(#2546, #2794) (#2546, #2794)
* Recommend having only one packet per encryption level in a * Recommend having only one packet per encryption level in a
skipping to change at page 160, line 33 skipping to change at page 160, line 49
* PATH_RESPONSE no longer needs to be received on the validated path * PATH_RESPONSE no longer needs to be received on the validated path
(#2582, #2580, #2579, #2637) (#2582, #2580, #2579, #2637)
* PATH_RESPONSE frames are not stored and retransmitted (#2724, * PATH_RESPONSE frames are not stored and retransmitted (#2724,
#2729) #2729)
* Document hack for enabling routing of ICMP when doing PMTU probing * Document hack for enabling routing of ICMP when doing PMTU probing
(#1243, #2402) (#1243, #2402)
C.6. Since draft-ietf-quic-transport-19 C.8. Since draft-ietf-quic-transport-19
* Refine discussion of 0-RTT transport parameters (#2467, #2464) * Refine discussion of 0-RTT transport parameters (#2467, #2464)
* Fewer transport parameters need to be remembered for 0-RTT (#2624, * Fewer transport parameters need to be remembered for 0-RTT (#2624,
#2467) #2467)
* Spin bit text incorporated (#2564) * Spin bit text incorporated (#2564)
* Close the connection when maximum stream ID in MAX_STREAMS exceeds * Close the connection when maximum stream ID in MAX_STREAMS exceeds
2^62 - 1 (#2499, #2487) 2^62 - 1 (#2499, #2487)
* New connection ID required for intentional migration (#2414, * New connection ID required for intentional migration (#2414,
#2413) #2413)
skipping to change at page 161, line 4 skipping to change at page 161, line 18
* Close the connection when maximum stream ID in MAX_STREAMS exceeds * Close the connection when maximum stream ID in MAX_STREAMS exceeds
2^62 - 1 (#2499, #2487) 2^62 - 1 (#2499, #2487)
* New connection ID required for intentional migration (#2414, * New connection ID required for intentional migration (#2414,
#2413) #2413)
* Connection ID issuance can be rate-limited (#2436, #2428) * Connection ID issuance can be rate-limited (#2436, #2428)
* The "QUIC bit" is ignored in Version Negotiation (#2400, #2561) * The "QUIC bit" is ignored in Version Negotiation (#2400, #2561)
* Initial packets from clients need to be padded to 1200 unless a * Initial packets from clients need to be padded to 1200 unless a
Handshake packet is sent as well (#2522, #2523) Handshake packet is sent as well (#2522, #2523)
* CRYPTO frames can be discarded if too much data is buffered * CRYPTO frames can be discarded if too much data is buffered
(#1834, #2524) (#1834, #2524)
* Stateless reset uses a short header packet (#2599, #2600) * Stateless reset uses a short header packet (#2599, #2600)
C.7. Since draft-ietf-quic-transport-18 C.9. Since draft-ietf-quic-transport-18
* Removed version negotiation; version negotiation, including * Removed version negotiation; version negotiation, including
authentication of the result, will be addressed in the next authentication of the result, will be addressed in the next
version of QUIC (#1773, #2313) version of QUIC (#1773, #2313)
* Added discussion of the use of IPv6 flow labels (#2348, #2399) * Added discussion of the use of IPv6 flow labels (#2348, #2399)
* A connection ID can't be retired in a packet that uses that * A connection ID can't be retired in a packet that uses that
connection ID (#2101, #2420) connection ID (#2101, #2420)
* Idle timeout transport parameter is in milliseconds (from seconds) * Idle timeout transport parameter is in milliseconds (from seconds)
(#2453, #2454) (#2453, #2454)
* Endpoints are required to use new connection IDs when they use new * Endpoints are required to use new connection IDs when they use new
network paths (#2413, #2414) network paths (#2413, #2414)
* Increased the set of permissible frames in 0-RTT (#2344, #2355) * Increased the set of permissible frames in 0-RTT (#2344, #2355)
C.8. Since draft-ietf-quic-transport-17 C.10. Since draft-ietf-quic-transport-17
* Stream-related errors now use STREAM_STATE_ERROR (#2305) * Stream-related errors now use STREAM_STATE_ERROR (#2305)
* Endpoints discard initial keys as soon as handshake keys are * Endpoints discard initial keys as soon as handshake keys are
available (#1951, #2045) available (#1951, #2045)
* Expanded conditions for ignoring ICMP packet too big messages * Expanded conditions for ignoring ICMP packet too big messages
(#2108, #2161) (#2108, #2161)
* Remove rate control from PATH_CHALLENGE/PATH_RESPONSE (#2129, * Remove rate control from PATH_CHALLENGE/PATH_RESPONSE (#2129,
skipping to change at page 162, line 23 skipping to change at page 162, line 37
#2301) #2301)
* Allow server preferred address for both IPv4 and IPv6 (#2122, * Allow server preferred address for both IPv4 and IPv6 (#2122,
#2296) #2296)
* Corrected requirements for migration to a preferred address * Corrected requirements for migration to a preferred address
(#2146, #2349) (#2146, #2349)
* ACK of non-existent packet is illegal (#2298, #2302) * ACK of non-existent packet is illegal (#2298, #2302)
C.9. Since draft-ietf-quic-transport-16 C.11. Since draft-ietf-quic-transport-16
* Stream limits are defined as counts, not maximums (#1850, #1906) * Stream limits are defined as counts, not maximums (#1850, #1906)
* Require amplification attack defense after closing (#1905, #1911) * Require amplification attack defense after closing (#1905, #1911)
* Remove reservation of application error code 0 for STOPPING * Remove reservation of application error code 0 for STOPPING
(#1804, #1922) (#1804, #1922)
* Renumbered frames (#1945) * Renumbered frames (#1945)
skipping to change at page 163, line 29 skipping to change at page 163, line 44
* Tokens are repeated in all Initial packets (#2089) * Tokens are repeated in all Initial packets (#2089)
* Clarified how PING frames are sent after loss (#2094) * Clarified how PING frames are sent after loss (#2094)
* Initial keys are discarded once Handshake are available (#1951, * Initial keys are discarded once Handshake are available (#1951,
#2045) #2045)
* ICMP PTB validation clarifications (#2161, #2109, #2108) * ICMP PTB validation clarifications (#2161, #2109, #2108)
C.10. Since draft-ietf-quic-transport-15 C.12. Since draft-ietf-quic-transport-15
Substantial editorial reorganization; no technical changes. Substantial editorial reorganization; no technical changes.
C.11. Since draft-ietf-quic-transport-14 C.13. Since draft-ietf-quic-transport-14
* Merge ACK and ACK_ECN (#1778, #1801) * Merge ACK and ACK_ECN (#1778, #1801)
* Explicitly communicate max_ack_delay (#981, #1781) * Explicitly communicate max_ack_delay (#981, #1781)
* Validate original connection ID after Retry packets (#1710, #1486, * Validate original connection ID after Retry packets (#1710, #1486,
#1793) #1793)
* Idle timeout is optional and has no specified maximum (#1765) * Idle timeout is optional and has no specified maximum (#1765)
* Update connection ID handling; add RETIRE_CONNECTION_ID type * Update connection ID handling; add RETIRE_CONNECTION_ID type
(#1464, #1468, #1483, #1484, #1486, #1495, #1729, #1742, #1799, (#1464, #1468, #1483, #1484, #1486, #1495, #1729, #1742, #1799,
#1821) #1821)
* Include a Token in all Initial packets (#1649, #1794) * Include a Token in all Initial packets (#1649, #1794)
* Prevent handshake deadlock (#1764, #1824) * Prevent handshake deadlock (#1764, #1824)
C.12. Since draft-ietf-quic-transport-13 C.14. Since draft-ietf-quic-transport-13
* Streams open when higher-numbered streams of the same type open * Streams open when higher-numbered streams of the same type open
(#1342, #1549) (#1342, #1549)
* Split initial stream flow control limit into 3 transport * Split initial stream flow control limit into 3 transport
parameters (#1016, #1542) parameters (#1016, #1542)
* All flow control transport parameters are optional (#1610) * All flow control transport parameters are optional (#1610)
* Removed UNSOLICITED_PATH_RESPONSE error code (#1265, #1539) * Removed UNSOLICITED_PATH_RESPONSE error code (#1265, #1539)
skipping to change at page 164, line 43 skipping to change at page 165, line 7
* Permit 0-RTT after receiving Version Negotiation or Retry (#1507, * Permit 0-RTT after receiving Version Negotiation or Retry (#1507,
#1514, #1621) #1514, #1621)
* Permit Retry in response to 0-RTT (#1547, #1552) * Permit Retry in response to 0-RTT (#1547, #1552)
* Looser verification of ECN counters to account for ACK loss * Looser verification of ECN counters to account for ACK loss
(#1555, #1481, #1565) (#1555, #1481, #1565)
* Remove frame type field from APPLICATION_CLOSE (#1508, #1528) * Remove frame type field from APPLICATION_CLOSE (#1508, #1528)
C.13. Since draft-ietf-quic-transport-12 C.15. Since draft-ietf-quic-transport-12
* Changes to integration of the TLS handshake (#829, #1018, #1094, * Changes to integration of the TLS handshake (#829, #1018, #1094,
#1165, #1190, #1233, #1242, #1252, #1450, #1458) #1165, #1190, #1233, #1242, #1252, #1450, #1458)
- The cryptographic handshake uses CRYPTO frames, not stream 0 - The cryptographic handshake uses CRYPTO frames, not stream 0
- QUIC packet protection is used in place of TLS record - QUIC packet protection is used in place of TLS record
protection protection
- Separate QUIC packet number spaces are used for the handshake - Separate QUIC packet number spaces are used for the handshake
skipping to change at page 165, line 38 skipping to change at page 165, line 50
* Fixed sampling method for packet number encryption; the length * Fixed sampling method for packet number encryption; the length
field in long headers includes the packet number field in addition field in long headers includes the packet number field in addition
to the packet payload (#1387, #1389) to the packet payload (#1387, #1389)
* Stateless Reset is now symmetric and subject to size constraints * Stateless Reset is now symmetric and subject to size constraints
(#466, #1346) (#466, #1346)
* Added frame type extension mechanism (#58, #1473) * Added frame type extension mechanism (#58, #1473)
C.14. Since draft-ietf-quic-transport-11 C.16. Since draft-ietf-quic-transport-11
* Enable server to transition connections to a preferred address * Enable server to transition connections to a preferred address
(#560, #1251) (#560, #1251)
* Packet numbers are encrypted (#1174, #1043, #1048, #1034, #850, * Packet numbers are encrypted (#1174, #1043, #1048, #1034, #850,
#990, #734, #1317, #1267, #1079) #990, #734, #1317, #1267, #1079)
* Packet numbers use a variable-length encoding (#989, #1334) * Packet numbers use a variable-length encoding (#989, #1334)
* STREAM frames can now be empty (#1350) * STREAM frames can now be empty (#1350)
C.15. Since draft-ietf-quic-transport-10 C.17. Since draft-ietf-quic-transport-10
* Swap payload length and packed number fields in long header * Swap payload length and packed number fields in long header
(#1294) (#1294)
* Clarified that CONNECTION_CLOSE is allowed in Handshake packet * Clarified that CONNECTION_CLOSE is allowed in Handshake packet
(#1274) (#1274)
* Spin bit reserved (#1283) * Spin bit reserved (#1283)
* Coalescing multiple QUIC packets in a UDP datagram (#1262, #1285) * Coalescing multiple QUIC packets in a UDP datagram (#1262, #1285)
skipping to change at page 166, line 38 skipping to change at page 166, line 50
* STOP_SENDING is now prohibited before streams are used (#1050) * STOP_SENDING is now prohibited before streams are used (#1050)
* Recommend including ACK in Retry packets and allow PADDING (#1067, * Recommend including ACK in Retry packets and allow PADDING (#1067,
#882) #882)
* Endpoints now become closing after an idle timeout (#1178, #1179) * Endpoints now become closing after an idle timeout (#1178, #1179)
* Remove implication that Version Negotiation is sent when a packet * Remove implication that Version Negotiation is sent when a packet
of the wrong version is received (#1197) of the wrong version is received (#1197)
C.16. Since draft-ietf-quic-transport-09 C.18. Since draft-ietf-quic-transport-09
* Added PATH_CHALLENGE and PATH_RESPONSE frames to replace PING with * Added PATH_CHALLENGE and PATH_RESPONSE frames to replace PING with
Data and PONG frame. Changed ACK frame type from 0x0e to 0x0d. Data and PONG frame. Changed ACK frame type from 0x0e to 0x0d.
(#1091, #725, #1086) (#1091, #725, #1086)
* A server can now only send 3 packets without validating the client * A server can now only send 3 packets without validating the client
address (#38, #1090) address (#38, #1090)
* Delivery order of stream data is no longer strongly specified * Delivery order of stream data is no longer strongly specified
(#252, #1070) (#252, #1070)
skipping to change at page 167, line 4 skipping to change at page 167, line 15
Data and PONG frame. Changed ACK frame type from 0x0e to 0x0d. Data and PONG frame. Changed ACK frame type from 0x0e to 0x0d.
(#1091, #725, #1086) (#1091, #725, #1086)
* A server can now only send 3 packets without validating the client * A server can now only send 3 packets without validating the client
address (#38, #1090) address (#38, #1090)
* Delivery order of stream data is no longer strongly specified * Delivery order of stream data is no longer strongly specified
(#252, #1070) (#252, #1070)
* Rework of packet handling and version negotiation (#1038) * Rework of packet handling and version negotiation (#1038)
* Stream 0 is now exempt from flow control until the handshake * Stream 0 is now exempt from flow control until the handshake
completes (#1074, #725, #825, #1082) completes (#1074, #725, #825, #1082)
* Improved retransmission rules for all frame types: information is * Improved retransmission rules for all frame types: information is
retransmitted, not packets or frames (#463, #765, #1095, #1053) retransmitted, not packets or frames (#463, #765, #1095, #1053)
* Added an error code for server busy signals (#1137) * Added an error code for server busy signals (#1137)
* Endpoints now set the connection ID that their peer uses. * Endpoints now set the connection ID that their peer uses.
Connection IDs are variable length. Removed the Connection IDs are variable length. Removed the
omit_connection_id transport parameter and the corresponding short omit_connection_id transport parameter and the corresponding short
header flag. (#1089, #1052, #1146, #821, #745, #821, #1166, #1151) header flag. (#1089, #1052, #1146, #821, #745, #821, #1166, #1151)
C.17. Since draft-ietf-quic-transport-08 C.19. Since draft-ietf-quic-transport-08
* Clarified requirements for BLOCKED usage (#65, #924) * Clarified requirements for BLOCKED usage (#65, #924)
* BLOCKED frame now includes reason for blocking (#452, #924, #927, * BLOCKED frame now includes reason for blocking (#452, #924, #927,
#928) #928)
* GAP limitation in ACK Frame (#613) * GAP limitation in ACK Frame (#613)
* Improved PMTUD description (#614, #1036) * Improved PMTUD description (#614, #1036)
skipping to change at page 167, line 45 skipping to change at page 168, line 10
* Stateless reset clarified as version-specific (#930, #986) * Stateless reset clarified as version-specific (#930, #986)
* initial_max_stream_id_x transport parameters are optional (#970, * initial_max_stream_id_x transport parameters are optional (#970,
#971) #971)
* Ack Delay assumes a default value during the handshake (#1007, * Ack Delay assumes a default value during the handshake (#1007,
#1009) #1009)
* Removed transport parameters from NewSessionTicket (#1015) * Removed transport parameters from NewSessionTicket (#1015)
C.18. Since draft-ietf-quic-transport-07 C.20. Since draft-ietf-quic-transport-07
* The long header now has version before packet number (#926, #939) * The long header now has version before packet number (#926, #939)
* Rename and consolidate packet types (#846, #822, #847) * Rename and consolidate packet types (#846, #822, #847)
* Packet types are assigned new codepoints and the Connection ID * Packet types are assigned new codepoints and the Connection ID
Flag is inverted (#426, #956) Flag is inverted (#426, #956)
* Removed type for Version Negotiation and use Version 0 (#963, * Removed type for Version Negotiation and use Version 0 (#963,
#968) #968)
* Streams are split into unidirectional and bidirectional (#643, * Streams are split into unidirectional and bidirectional (#643,
#656, #720, #872, #175, #885) #656, #720, #872, #175, #885)
- Stream limits now have separate uni- and bi-directional - Stream limits now have separate uni- and bi-directional
skipping to change at page 168, line 42 skipping to change at page 169, line 5
* Address validation for connection migration (#161, #732, #878) * Address validation for connection migration (#161, #732, #878)
* Clearly defined retransmission rules for BLOCKED (#452, #65, #924) * Clearly defined retransmission rules for BLOCKED (#452, #65, #924)
* negotiated_version is sent in server transport parameters (#710, * negotiated_version is sent in server transport parameters (#710,
#959) #959)
* Increased the range over which packet numbers are randomized * Increased the range over which packet numbers are randomized
(#864, #850, #964) (#864, #850, #964)
C.19. Since draft-ietf-quic-transport-06 C.21. Since draft-ietf-quic-transport-06
* Replaced FNV-1a with AES-GCM for all "Cleartext" packets (#554) * Replaced FNV-1a with AES-GCM for all "Cleartext" packets (#554)
* Split error code space between application and transport (#485) * Split error code space between application and transport (#485)
* Stateless reset token moved to end (#820) * Stateless reset token moved to end (#820)
* 1-RTT-protected long header types removed (#848) * 1-RTT-protected long header types removed (#848)
* No acknowledgments during draining period (#852) * No acknowledgments during draining period (#852)
* Remove "application close" as a separate close type (#854) * Remove "application close" as a separate close type (#854)
* Remove timestamps from the ACK frame (#841) * Remove timestamps from the ACK frame (#841)
* Require transport parameters to only appear once (#792) * Require transport parameters to only appear once (#792)
C.20. Since draft-ietf-quic-transport-05 C.22. Since draft-ietf-quic-transport-05
* Stateless token is server-only (#726) * Stateless token is server-only (#726)
* Refactor section on connection termination (#733, #748, #328, * Refactor section on connection termination (#733, #748, #328,
#177) #177)
* Limit size of Version Negotiation packet (#585) * Limit size of Version Negotiation packet (#585)
* Clarify when and what to ack (#736) * Clarify when and what to ack (#736)
* Renamed STREAM_ID_NEEDED to STREAM_ID_BLOCKED * Renamed STREAM_ID_NEEDED to STREAM_ID_BLOCKED
* Clarify Keep-alive requirements (#729) * Clarify Keep-alive requirements (#729)
C.21. Since draft-ietf-quic-transport-04 C.23. Since draft-ietf-quic-transport-04
* Introduce STOP_SENDING frame, RESET_STREAM only resets in one * Introduce STOP_SENDING frame, RESET_STREAM only resets in one
direction (#165) direction (#165)
* Removed GOAWAY; application protocols are responsible for graceful * Removed GOAWAY; application protocols are responsible for graceful
shutdown (#696) shutdown (#696)
* Reduced the number of error codes (#96, #177, #184, #211) * Reduced the number of error codes (#96, #177, #184, #211)
* Version validation fields can't move or change (#121) * Version validation fields can't move or change (#121)
skipping to change at page 170, line 4 skipping to change at page 170, line 13
NewSessionTicket message (#547) NewSessionTicket message (#547)
* Clarify the meaning of "bytes in flight" (#550) * Clarify the meaning of "bytes in flight" (#550)
* Public reset is now stateless reset and not visible to the path * Public reset is now stateless reset and not visible to the path
(#215) (#215)
* Reordered bits and fields in STREAM frame (#620) * Reordered bits and fields in STREAM frame (#620)
* Clarifications to the stream state machine (#572, #571) * Clarifications to the stream state machine (#572, #571)
* Increased the maximum length of the Largest Acknowledged field in * Increased the maximum length of the Largest Acknowledged field in
ACK frames to 64 bits (#629) ACK frames to 64 bits (#629)
* truncate_connection_id is renamed to omit_connection_id (#659) * truncate_connection_id is renamed to omit_connection_id (#659)
* CONNECTION_CLOSE terminates the connection like TCP RST (#330, * CONNECTION_CLOSE terminates the connection like TCP RST (#330,
#328) #328)
* Update labels used in HKDF-Expand-Label to match TLS 1.3 (#642) * Update labels used in HKDF-Expand-Label to match TLS 1.3 (#642)
C.22. Since draft-ietf-quic-transport-03 C.24. Since draft-ietf-quic-transport-03
* Change STREAM and RESET_STREAM layout * Change STREAM and RESET_STREAM layout
* Add MAX_STREAM_ID settings * Add MAX_STREAM_ID settings
C.23. Since draft-ietf-quic-transport-02 C.25. Since draft-ietf-quic-transport-02
* The size of the initial packet payload has a fixed minimum (#267, * The size of the initial packet payload has a fixed minimum (#267,
#472) #472)
* Define when Version Negotiation packets are ignored (#284, #294, * Define when Version Negotiation packets are ignored (#284, #294,
#241, #143, #474) #241, #143, #474)
* The 64-bit FNV-1a algorithm is used for integrity protection of * The 64-bit FNV-1a algorithm is used for integrity protection of
unprotected packets (#167, #480, #481, #517) unprotected packets (#167, #480, #481, #517)
skipping to change at page 171, line 4 skipping to change at page 171, line 13
different handshake protocol (#516) different handshake protocol (#516)
* STREAM frames have a reduced number of offset lengths (#543, #430) * STREAM frames have a reduced number of offset lengths (#543, #430)
* Split some frames into separate connection- and stream- level * Split some frames into separate connection- and stream- level
frames (#443) frames (#443)
- WINDOW_UPDATE split into MAX_DATA and MAX_STREAM_DATA (#450) - WINDOW_UPDATE split into MAX_DATA and MAX_STREAM_DATA (#450)
- BLOCKED split to match WINDOW_UPDATE split (#454) - BLOCKED split to match WINDOW_UPDATE split (#454)
- Define STREAM_ID_NEEDED frame (#455) - Define STREAM_ID_NEEDED frame (#455)
* A NEW_CONNECTION_ID frame supports connection migration without * A NEW_CONNECTION_ID frame supports connection migration without
linkability (#232, #491, #496) linkability (#232, #491, #496)
* Transport parameters for 0-RTT are retained from a previous * Transport parameters for 0-RTT are retained from a previous
connection (#405, #513, #512) connection (#405, #513, #512)
- A client in 0-RTT no longer required to reset excess streams - A client in 0-RTT no longer required to reset excess streams
(#425, #479) (#425, #479)
* Expanded security considerations (#440, #444, #445, #448) * Expanded security considerations (#440, #444, #445, #448)
C.24. Since draft-ietf-quic-transport-01 C.26. Since draft-ietf-quic-transport-01
* Defined short and long packet headers (#40, #148, #361) * Defined short and long packet headers (#40, #148, #361)
* Defined a versioning scheme and stable fields (#51, #361) * Defined a versioning scheme and stable fields (#51, #361)
* Define reserved version values for "greasing" negotiation (#112, * Define reserved version values for "greasing" negotiation (#112,
#278) #278)
* The initial packet number is randomized (#35, #283) * The initial packet number is randomized (#35, #283)
skipping to change at page 173, line 17 skipping to change at page 173, line 25
* Remove error code and reason phrase from GOAWAY (#352, #355) * Remove error code and reason phrase from GOAWAY (#352, #355)
* GOAWAY includes a final stream number for both directions (#347) * GOAWAY includes a final stream number for both directions (#347)
* Error codes for RESET_STREAM and CONNECTION_CLOSE are now at a * Error codes for RESET_STREAM and CONNECTION_CLOSE are now at a
consistent offset (#249) consistent offset (#249)
* Defined priority as the responsibility of the application protocol * Defined priority as the responsibility of the application protocol
(#104, #303) (#104, #303)
C.25. Since draft-ietf-quic-transport-00 C.27. Since draft-ietf-quic-transport-00
* Replaced DIVERSIFICATION_NONCE flag with KEY_PHASE flag * Replaced DIVERSIFICATION_NONCE flag with KEY_PHASE flag
* Defined versioning * Defined versioning
* Reworked description of packet and frame layout * Reworked description of packet and frame layout
* Error code space is divided into regions for each component * Error code space is divided into regions for each component
* Use big endian for all numeric values * Use big endian for all numeric values
C.26. Since draft-hamilton-quic-transport-protocol-01 C.28. Since draft-hamilton-quic-transport-protocol-01
* Adopted as base for draft-ietf-quic-tls * Adopted as base for draft-ietf-quic-tls
* Updated authors/editors list * Updated authors/editors list
* Added IANA Considerations section * Added IANA Considerations section
* Moved Contributors and Acknowledgments to appendices * Moved Contributors and Acknowledgments to appendices
Contributors Contributors
 End of changes. 61 change blocks. 
131 lines changed or deleted 149 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/