Skip to content

Commit 494a48f

Browse files
authored
Merge branch 'master' into push-id-seq
2 parents b38ae53 + 0741670 commit 494a48f

File tree

4 files changed

+98
-32
lines changed

4 files changed

+98
-32
lines changed

draft-ietf-quic-http.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,10 @@ DATA frames MUST be associated with an HTTP request or response. If a DATA
423423
frame is received on the control stream, the recipient MUST respond with a
424424
connection error ({{errors}}) of type HTTP_WRONG_STREAM.
425425

426+
DATA frames MUST contain a non-zero-length payload. If a DATA frame is received
427+
with a payload length of zero, the recipient MUST respond with a stream error
428+
({{errors}}) of type HTTP_MALFORMED_DATA.
429+
426430
### HEADERS {#frame-headers}
427431

428432
The HEADERS frame (type=0x1) is used to carry part of a header set, compressed
@@ -1301,6 +1305,10 @@ The original authors of this specification were Robbie Shade and Mike Warres.
13011305
> **RFC Editor's Note:** Please remove this section prior to publication of a
13021306
> final version of this document.
13031307

1308+
## Since draft-ietf-quic-http-05
1309+
1310+
- Made push ID sequential, add MAX_PUSH_ID, remove SETTINGS_ENABLE_PUSH (#709)
1311+
13041312
## Since draft-ietf-quic-http-04
13051313

13061314
- Cite RFC 5234 (#404)
@@ -1309,7 +1317,7 @@ The original authors of this specification were Robbie Shade and Mike Warres.
13091317
- SETTINGS_ENABLE_PUSH instead of SETTINGS_DISABLE_PUSH (#477)
13101318
- Restored GOAWAY (#696)
13111319
- Identify server push using Push ID rather than a stream ID (#702,#281)
1312-
- Made push ID sequential, add MAX_PUSH_ID, remove SETTINGS_ENABLE_PUSH (#709)
1320+
- DATA frames cannot be empty (#700)
13131321

13141322
## Since draft-ietf-quic-http-03
13151323

draft-ietf-quic-recovery.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,14 @@ This document has no IANA actions. Yet.
733733
> **RFC Editor's Note:** Please remove this section prior to
734734
> publication of a final version of this document.
735735

736+
## Since draft-ietf-quic-recovery-04
737+
738+
No significant changes.
739+
740+
## Since draft-ietf-quic-recovery-03
741+
742+
No significant changes.
743+
736744
## Since draft-ietf-quic-recovery-02
737745

738746
- Integrate F-RTO (#544, #409)

draft-ietf-quic-tls.md

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ older than 1.3 is negotiated.
541541

542542
QUIC requires that the initial handshake packet from a client fit within the
543543
payload of a single packet. The size limits on QUIC packets mean that a record
544-
containing a ClientHello needs to fit within 1197 octets.
544+
containing a ClientHello needs to fit within 1171 octets.
545545

546546
A TLS ClientHello can fit within this limit with ample space remaining.
547547
However, there are several variables that could cause this limit to be exceeded.
@@ -1262,25 +1262,27 @@ able to inject these packets. Timing and packet retransmission information from
12621262
`ACK` frames is critical to the functioning of the protocol, but these frames
12631263
might be spoofed or altered.
12641264

1265-
Endpoints MUST NOT use an unprotected `ACK` frame to acknowledge data that was
1266-
protected by 0-RTT or 1-RTT keys. An endpoint MUST ignore an unprotected `ACK`
1267-
frame if it claims to acknowledge data that was sent in a protected packet.
1268-
Such an acknowledgement can only serve as a denial of service, since an endpoint
1265+
Endpoints MUST NOT use an `ACK` frame in an unprotected packet to acknowledge
1266+
packets that were protected by 0-RTT or 1-RTT keys. An endpoint MUST treat
1267+
receipt of an `ACK` frame in an unprotected packet that claims to acknowledge
1268+
protected packets as a connection error of type OPTIMISTIC_ACK. An endpoint
12691269
that can read protected data is always able to send protected data.
12701270

1271-
ISSUE:
1271+
Note:
12721272

1273-
: What about 0-RTT data? Should we allow acknowledgment of 0-RTT with
1274-
unprotected frames? If we don't, then 0-RTT data will be unacknowledged until
1275-
the handshake completes. This isn't a problem if the handshake completes
1276-
without loss, but it could mean that 0-RTT stalls when a handshake packet
1277-
disappears for any reason.
1273+
: 0-RTT data can be acknowledged by the server as it receives it, but any
1274+
packets containing acknowledgments of 0-RTT data cannot have packet protection
1275+
removed by the client until the TLS handshake is complete. The 1-RTT keys
1276+
necessary to remove packet protection cannot be derived until the client
1277+
receives all server handshake messages.
12781278

1279-
An endpoint SHOULD use data from unprotected or 0-RTT-protected `ACK` frames
1280-
only during the initial handshake and while they have insufficient information
1281-
from 1-RTT-protected `ACK` frames. Once sufficient information has been
1282-
obtained from protected messages, information obtained from less reliable
1283-
sources can be discarded.
1279+
An endpoint SHOULD use data from `ACK` frames carried in unprotected packets or
1280+
packets protected with 0-RTT keys only during the initial handshake. All `ACK`
1281+
frames contained in unprotected packets that are received after successful
1282+
receipt of a packet protected with 1-RTT keys MUST be discarded. An endpoint
1283+
SHOULD therefore include acknowledgments for unprotected and any packets
1284+
protected with 0-RTT keys until it sees an acknowledgment for a packet that is
1285+
both protected with 1-RTT keys and contains an `ACK` frame.
12841286

12851287

12861288
### Updates to Data and Stream Limits
@@ -1559,6 +1561,14 @@ many others.
15591561

15601562
Issue and pull request numbers are listed with a leading octothorp.
15611563

1564+
## Since draft-ietf-quic-tls-04
1565+
1566+
- Update labels used in HKDF-Expand-Label to match TLS 1.3 (#642)
1567+
1568+
## Since draft-ietf-quic-tls-03
1569+
1570+
No significant changes.
1571+
15621572
## Since draft-ietf-quic-tls-02
15631573

15641574
- Updates to match changes in transport draft

draft-ietf-quic-transport.md

Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,10 @@ from the triggering client packet. This allows clients some assurance that the
522522
server received the packet and that the Version Negotiation packet was not
523523
carried in a packet with a spoofed source address.
524524

525+
A Version Negotiation packet is never explicitly acknowledged in an ACK frame by
526+
a client. Receiving another Client Initial packet implicitly acknowledges a
527+
Version Negotiation packet.
528+
525529
The payload of the Version Negotiation packet is a list of 32-bit versions which
526530
the server supports, as shown below.
527531

@@ -570,11 +574,11 @@ the packet contents increment the packet number by one, see
570574
({{packet-numbers}}).
571575

572576
The payload of a Client Initial packet consists of a STREAM frame (or frames)
573-
for stream 0 containing a cryptographic handshake message, plus any PADDING
574-
frames necessary to ensure that the packet is at least the minimum PMTU size
575-
(see {{packetization}}). The stream in this packet always starts at an offset
576-
of 0 (see {{stateless-retry}}) and the complete cyptographic handshake message
577-
MUST fit in a single packet (see {{handshake}}).
577+
for stream 0 containing a cryptographic handshake message, with enough PADDING
578+
frames that the packet is at least 1200 octets (see {{packetization}}). The
579+
stream in this packet always starts at an offset of 0 (see {{stateless-retry}})
580+
and the complete cyptographic handshake message MUST fit in a single packet (see
581+
{{handshake}}).
578582

579583
The client uses the Client Initial Packet type for any packet that contains an
580584
initial cryptographic handshake message. This includes all cases where a new
@@ -595,6 +599,10 @@ The packet number and connection ID fields echo the corresponding fields from
595599
the triggering client packet. This allows a client to verify that the server
596600
received its packet.
597601

602+
A Server Stateless Retry packet is never explicitly acknowledged in an ACK frame
603+
by a client. Receiving another Client Initial packet implicitly acknowledges a
604+
Server Stateless Retry packet.
605+
598606
After receiving a Server Stateless Retry packet, the client uses a new Client
599607
Initial packet containing the next cryptographic handshake message. The client
600608
retains the state of its cryptographic handshake, but discards all transport
@@ -1084,11 +1092,17 @@ idle_timeout (0x0003):
10841092
: The idle timeout is a value in seconds that is encoded as an unsigned 16-bit
10851093
integer. The maximum value is 600 seconds (10 minutes).
10861094

1087-
stateless_reset_token (0x0005):
1095+
A server MUST include the following transport parameters:
1096+
1097+
stateless_reset_token (0x0006):
10881098

10891099
: The Stateless Reset Token is used in verifying a stateless reset, see
10901100
{{stateless-reset}}. This parameter is a sequence of 16 octets.
10911101

1102+
A client MUST NOT include a stateless reset token. A server MUST treat receipt
1103+
of a stateless_reset_token transport parameter as a connection error of type
1104+
TRANSPORT_PARAMETER_ERROR.
1105+
10921106
An endpoint MAY use the following transport parameters:
10931107

10941108
omit_connection_id (0x0004):
@@ -1106,7 +1120,7 @@ max_packet_size (0x0005):
11061120
the endpoint is willing to receive, encoded as an unsigned 16-bit integer.
11071121
This indicates that packets larger than this limit will be dropped. The
11081122
default for this parameter is the maximum permitted UDP payload of 65527.
1109-
Values below 1252 are invalid. This limit only applies to protected packets
1123+
Values below 1200 are invalid. This limit only applies to protected packets
11101124
({{packet-protected}}).
11111125

11121126

@@ -1199,6 +1213,15 @@ client MUST terminate with a VERSION_NEGOTIATION_ERROR error code if
11991213
version negotiation occurred but it would have selected a different version
12001214
based on the value of the supported_versions list.
12011215

1216+
When an endpoint accepts multiple QUIC versions, it can potentially interpret
1217+
transport parameters as they are defined by any of the QUIC versions it
1218+
supports. The version field in the QUIC packet header is authenticated using
1219+
transport parameters. The position and the format of the version fields in
1220+
transport parameters MUST either be identical across different QUIC versions, or
1221+
be unambiguously different to ensure no confusion about their interpretation.
1222+
One way that a new format could be introduced is to define a TLS extension with
1223+
a different codepoint.
1224+
12021225

12031226
## Stateless Retries {#stateless-retry}
12041227

@@ -1918,6 +1941,10 @@ Unlike TCP SACKs, QUIC ACK blocks are irrevocable. Once a packet has
19181941
been acknowledged, even if it does not appear in a future ACK frame,
19191942
it remains acknowledged.
19201943

1944+
A client MUST NOT acknowledge Version Negotiation or Server Stateless Retry
1945+
packets. These packet types contain packet numbers selected by the client, not
1946+
the server.
1947+
19211948
QUIC ACK frames contain a timestamp section with up to 255 timestamps.
19221949
Timestamps enable better congestion control, but are not required for correct
19231950
loss recovery, and old timestamps are less valuable, so it is not guaranteed
@@ -2268,19 +2295,18 @@ An endpoint MUST NOT reduce their MTU below this number, even if it receives
22682295
signals that indicate a smaller limit might exist.
22692296

22702297
Clients MUST ensure that the first packet in a connection, and any
2271-
retransmissions of those octets, has a QUIC packet size of least 1232 octets for
2272-
an IPv6 packet and 1252 octets for an IPv4 packet. In the absence of extensions
2273-
to the IP header, padding to exactly these values will result in an IP packet
2274-
that is 1280 octets.
2298+
retransmissions of those octets, has a QUIC packet size of least 1200 octets.
2299+
The packet size for a QUIC packet includes the QUIC header and integrity check,
2300+
but not the UDP or IP header.
22752301

2276-
The initial client packet SHOULD be padded to exactly these values unless the
2302+
The initial client packet SHOULD be padded to exactly 1200 octets unless the
22772303
client has a reasonable assurance that the PMTU is larger. Sending a packet of
22782304
this size ensures that the network path supports an MTU of this size and helps
22792305
reduce the amplitude of amplification attacks caused by server responses toward
22802306
an unverified client address.
22812307

22822308
Servers MUST ignore an initial plaintext packet from a client if its total size
2283-
is less than 1232 octets for IPv6 or 1252 octets for IPv4.
2309+
is less than 1200 octets.
22842310

22852311
If a QUIC endpoint determines that the PMTU between any pair of local and remote
22862312
IP addresses has fallen below 1280 octets, it MUST immediately cease sending
@@ -3193,8 +3219,22 @@ Issue and pull request numbers are listed with a leading octothorp.
31933219
31943220
## Since draft-ietf-quic-transport-04
31953221
3196-
- Introduce STOP_SENDING frame (#165)
3197-
- Removed GOAWAY (#696)
3222+
- Introduce STOP_SENDING frame, RST_STREAM only resets in one direction (#165)
3223+
- Removed GOAWAY; application protocols are responsible for graceful shutdown
3224+
(#696)
3225+
- Reduced the number of error codes (#96, #177, #184, #211)
3226+
- Version validation fields can't move or change (#121)
3227+
- Removed versions from the transport parameters in a NewSessionTicket message
3228+
(#547)
3229+
- Clarify the meaning of "bytes in flight" (#550)
3230+
- Public reset is now stateless reset and not visible to the path (#215)
3231+
- Reordered bits and fields in STREAM frame (#620)
3232+
- Clarifications to the stream state machine (#572, #571)
3233+
- Increased the maximum length of the Largest Acknowledged field in ACK frames
3234+
to 64 bits (#629)
3235+
- truncate_connection_id is renamed to omit_connection_id (#659)
3236+
- CONNECTION_CLOSE terminates the connection like TCP RST (#330, #328)
3237+
- Update labels used in HKDF-Expand-Label to match TLS 1.3 (#642)
31983238
31993239
## Since draft-ietf-quic-transport-03
32003240

0 commit comments

Comments
 (0)