@@ -516,13 +516,13 @@ A Version Negotiation packet has a type octet of 0x81 and is sent only by
516
516
servers. The Version Negotiation packet is a response to a client packet that
517
517
contains a version that is not supported by the server.
518
518
519
- The connection ID field contains a connection ID that the client should use for
520
- subsequent packets, see {{connection-id}}.
519
+ The connection ID field contains a server-selected connection ID that the client
520
+ MUST use for subsequent packets, see {{connection-id}}.
521
521
522
- The packet number and version fields contain the values from the client packet
523
- that triggered the Version Negotiation packet. This allows clients some
524
- assurance that the server received the packet and that the Version Negotiation
525
- packet does not contain a spoofed source address.
522
+ The packet number and version fields echo corresponding values from the
523
+ triggering client packet. This allows clients some assurance that the server
524
+ received the packet and that the Version Negotiation packet was not carried in a
525
+ packet with a spoofed source address.
526
526
527
527
The payload of the Version Negotiation packet is a list of 32-bit versions which
528
528
the server supports, as shown below.
@@ -550,14 +550,7 @@ process.
550
550
551
551
Cleartext packets are sent during the handshake prior to key negotiation.
552
552
553
- Cleartext packets all contain the current QUIC version in the version field.
554
-
555
- The packet number is randomized for the Client Initial packet
556
- ({{packet-client-initial}} and the first Server Cleartext packet
557
- ({{packet-server-cleartext}}). It increases by one for each packet sent
558
- thereafter, see {{packet-numbers}} for details. The Server Stateless Retry
559
- packet ({{packet-server-stateless}}) contains the packet number of the packet
560
- that it is responding to.
553
+ All cleartext packets contain the current QUIC version in the version field.
561
554
562
555
The payload of cleartext packets also includes an integrity check, which is
563
556
described in {{QUIC-TLS}}.
@@ -574,13 +567,14 @@ selected values. The randomized packet number is incremented for each
574
567
subsequent packet (see {{packet-numbers}}).
575
568
576
569
The payload of a Client Initial packet consists of a STREAM frame (or frames)
577
- for stream 0 containing a cryptographic handshake message, plus PADDING frames
578
- that increase the size of the packet to a minimum size (see {{packetization}}).
570
+ for stream 0 containing a cryptographic handshake message, plus any PADDING
571
+ frames necessary to ensure that the packet is at least the minimum size (see
572
+ {{packetization}}).
579
573
580
574
The client uses the Client Initial Packet type for any packet that contains an
581
575
initial cryptographic handshake message. This includes all cases where a new
582
576
packet containing the initial cryptographic message needs to be created, either
583
- in response to a Version Negotiation packet, in response to a stateless retry
577
+ in response to a Version Negotiation packet, or in response to a stateless retry
584
578
({{packet-server-stateless}}).
585
579
586
580
@@ -593,8 +587,8 @@ that wishes to perform a stateless retry (see {{stateless-retry}}).
593
587
The connection ID field in a Server Stateless Retry packet contains a server
594
588
selected value, see {{connection-id}}.
595
589
596
- The packet number contains the packet number from the packet that caused it to
597
- be sent . This allows a client to verify that the server received its packet.
590
+ The packet number field echoes the packet number of the triggering client
591
+ packet . This allows a client to verify that the server received its packet.
598
592
599
593
After receiving a Server Stateless Retry packet, the next cryptographic
600
594
handshake message MUST be sent by the client on stream 0 at an offset of 0. The
@@ -605,21 +599,24 @@ connection is reset. Continuing the cryptographic handshake is necessary to
605
599
ensure that an attacker cannot force a downgrade of any cryptographic
606
600
parameters.
607
601
602
+ The payload of the Server Stateless Retry packet contains STREAM frames and
603
+ could contain PADDING and ACK frames.
604
+
608
605
The client constructs a new Client Cleartext packet
609
606
({{packet-client-cleartext}}) for subsequent cryptographic handshake messages.
610
607
611
- The payload of this packet contains STREAM frames and could contain PADDING and
612
- ACK frames.
613
-
614
608
615
609
# ## Client Cleartext Packet {#packet-client-cleartext}
616
610
617
611
A Client Cleartext packet has a type octet of 0x84 and is sent when the client
618
612
has received a packet from the server, which will be either a Server Cleartext
619
613
packet or a Version Negotiation packet.
620
614
621
- The connection ID field in a Client Cleartext packet contains a connection ID
622
- that was selected by the server (see {{connection-id}}).
615
+ The connection ID field in a Client Cleartext packet contains a server-selected
616
+ connection ID, see {{connection-id}}.
617
+
618
+ The packet number field is incremented for each Client Cleartext packet sent,
619
+ see {{packet-numbers}}.
623
620
624
621
The payload of this packet contains STREAM frames and could contain PADDING and
625
622
ACK frames. If this packet is sent in response to a Version Negotiation
@@ -636,16 +633,20 @@ acknowledgments and cryptographic handshake messages from the server.
636
633
The connection ID field in a Server Cleartext packet contains a connection ID
637
634
that is chosen by the server (see {{connection-id}}).
638
635
636
+ The first Server Cleartext packet contains a randomized packet number. This
637
+ value is increased for each subsequent packet as described in
638
+ {{packet-numbers}}.
639
+
639
640
The payload of this packet contains STREAM frames and could contain PADDING and
640
641
ACK frames.
641
642
642
643
643
644
# # Encrypted Packets {#packet-encrypted}
644
645
645
- Packets that are protected with 0-RTT packets are sent with long headers.
646
- Packets that are protected with 1-RTT keys MAY be sent with long headers. The
647
- different packet types explicitly indicate the encryption level and therefore
648
- the keys that are used to remove packet protection.
646
+ Packets that are protected with 0-RTT keys are sent with long headers. Packets
647
+ that are protected with 1-RTT keys MAY be sent with long headers. The different
648
+ packet types explicitly indicate the encryption level and therefore the keys
649
+ that are used to remove packet protection.
649
650
650
651
Packets protected with 0-RTT keys use a type octet of 0x85. The connection ID
651
652
field for a 0-RTT packet is selected by the client, unless the client has
@@ -656,7 +657,7 @@ it uses for 0-RTT packets.
656
657
657
658
Packets protected with 1-RTT keys use a type octet of 0x86 for key phase 0 and
658
659
0x87 for key phase 1; see {{QUIC-TLS}} for more details on the use of key
659
- phases. The connection ID field for these packet types contains the value
660
+ phases. The connection ID field for these packet types MUST contain the value
660
661
selected by the server, see {{connection-id}}.
661
662
662
663
The version field for encrypted packets is the current QUIC version.
@@ -1198,8 +1199,8 @@ based on the value of the supported_versions list.
1198
1199
1199
1200
# # Stateless Retries {#stateless-retry}
1200
1201
1201
- A server can process a the initial cryptographic handshake messages from a
1202
- client without committing any state. This allows a server to perform address
1202
+ A server can process an initial cryptographic handshake messages from a client
1203
+ without committing any state. This allows a server to perform address
1203
1204
validation ({{address-validation}}, or to defer connection establishment costs.
1204
1205
1205
1206
In order to ensure consistent state regarding stream offsets and packet numbers,
@@ -1216,7 +1217,7 @@ remember a randomized initial packet number: the Server Stateless Retry packet
1216
1217
includes a copy of the packet number from the client packet.
1217
1218
1218
1219
A server MUST NOT send multiple Server Stateless Retry packets in response to a
1219
- client handshake packet. Thus, any cryptographic handshake message that is used
1220
+ client handshake packet. Thus, any cryptographic handshake message that is sent
1220
1221
MUST fit within a single packet.
1221
1222
1222
1223
In TLS, the Server Stateless Retry packet type is used to carry the
0 commit comments