draft-mcquistin-quic-augmented-diagrams-02.txt   draft-mcquistin-quic-augmented-diagrams-03.txt 
Network Working Group S. McQuistin Network Working Group S. McQuistin
Internet-Draft V. Band Internet-Draft V. Band
Intended status: Experimental D. Jacob Intended status: Experimental D. Jacob
Expires: 14 January 2021 C. S. Perkins Expires: 6 May 2021 C. S. Perkins
University of Glasgow University of Glasgow
13 July 2020 2 November 2020
Describing QUIC's Protocol Data Units with Augmented Packet Header Describing QUIC's Protocol Data Units with Augmented Packet Header
Diagrams Diagrams
draft-mcquistin-quic-augmented-diagrams-02 draft-mcquistin-quic-augmented-diagrams-03
Abstract Abstract
This document describes the core transport protocol data units used This document describes the core transport protocol data units used
in the QUIC protocol using a machine-readable augmented packet header in the QUIC protocol using a machine-readable augmented packet header
diagram format. It is intended as an example of the packet header diagram format. It is intended as an example of the augmented packet
diagram language, and not as a contribution to the development of the header diagram language, and not as a contribution to the development
QUIC protocol. of the QUIC protocol.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on 14 January 2021. This Internet-Draft will expire on 6 May 2021.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2020 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/ Provisions Relating to IETF Documents (https://trustee.ietf.org/
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 . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Header and Packet Protection . . . . . . . . . . . . . . . . 3 2. Header and Packet Protection . . . . . . . . . . . . . . . . 3
3. Variable Length Integer Encoding . . . . . . . . . . . . . . 4 3. Variable Length Integer . . . . . . . . . . . . . . . . . . . 4
4. Stateless Reset . . . . . . . . . . . . . . . . . . . . . . . 4 4. Stateless Reset . . . . . . . . . . . . . . . . . . . . . . . 4
5. Version Negotiation Packet . . . . . . . . . . . . . . . . . 5 5. Version Negotiation Packet . . . . . . . . . . . . . . . . . 5
6. Long Header Packets . . . . . . . . . . . . . . . . . . . . . 6 6. Long Header Packets . . . . . . . . . . . . . . . . . . . . . 6
6.1. Initial Packet . . . . . . . . . . . . . . . . . . . . . 9 6.1. Initial Packet . . . . . . . . . . . . . . . . . . . . . 9
6.2. 0RTT Packet . . . . . . . . . . . . . . . . . . . . . . . 11 6.2. 0RTT Packet . . . . . . . . . . . . . . . . . . . . . . . 11
6.3. Handshake Packet . . . . . . . . . . . . . . . . . . . . 12 6.3. Handshake Packet . . . . . . . . . . . . . . . . . . . . 13
6.4. Retry Packet . . . . . . . . . . . . . . . . . . . . . . 13 6.4. Retry Packet . . . . . . . . . . . . . . . . . . . . . . 14
7. Short Header Packets . . . . . . . . . . . . . . . . . . . . 14 7. Short Header Packets . . . . . . . . . . . . . . . . . . . . 15
8. Frames and Frame Formats . . . . . . . . . . . . . . . . . . 17 8. Frames and Frame Formats . . . . . . . . . . . . . . . . . . 18
8.1. PADDING frame . . . . . . . . . . . . . . . . . . . . . . 17 8.1. PADDING frame . . . . . . . . . . . . . . . . . . . . . . 18
8.2. PING frame . . . . . . . . . . . . . . . . . . . . . . . 17 8.2. PING frame . . . . . . . . . . . . . . . . . . . . . . . 18
8.3. ACK frame . . . . . . . . . . . . . . . . . . . . . . . . 17 8.3. ACK frame . . . . . . . . . . . . . . . . . . . . . . . . 19
8.4. RESET_STREAM frame . . . . . . . . . . . . . . . . . . . 20 8.4. RESET_STREAM frame . . . . . . . . . . . . . . . . . . . 21
8.5. STOP_SENDING frame . . . . . . . . . . . . . . . . . . . 20 8.5. STOP_SENDING frame . . . . . . . . . . . . . . . . . . . 21
8.6. CRYPTO frame . . . . . . . . . . . . . . . . . . . . . . 21 8.6. CRYPTO frame . . . . . . . . . . . . . . . . . . . . . . 22
8.7. NEW_TOKEN frame . . . . . . . . . . . . . . . . . . . . . 21 8.7. NEW_TOKEN frame . . . . . . . . . . . . . . . . . . . . . 23
8.8. STREAM frame . . . . . . . . . . . . . . . . . . . . . . 22 8.8. STREAM frame . . . . . . . . . . . . . . . . . . . . . . 23
8.9. MAX_DATA frame . . . . . . . . . . . . . . . . . . . . . 23 8.9. MAX_DATA frame . . . . . . . . . . . . . . . . . . . . . 25
8.10. MAX_STREAM_DATA frame . . . . . . . . . . . . . . . . . . 24 8.10. MAX_STREAM_DATA frame . . . . . . . . . . . . . . . . . . 25
8.11. MAX_STREAMS frame . . . . . . . . . . . . . . . . . . . . 24 8.11. MAX_STREAMS frame . . . . . . . . . . . . . . . . . . . . 26
8.12. DATA_BLOCKED frame . . . . . . . . . . . . . . . . . . . 25 8.12. DATA_BLOCKED frame . . . . . . . . . . . . . . . . . . . 26
8.13. STREAM_DATA_BLOCKED frame . . . . . . . . . . . . . . . . 25 8.13. STREAM_DATA_BLOCKED frame . . . . . . . . . . . . . . . . 26
8.14. STREAMS_BLOCKED frame . . . . . . . . . . . . . . . . . . 26 8.14. STREAMS_BLOCKED frame . . . . . . . . . . . . . . . . . . 27
8.15. NEW_CONNECTION_ID frame . . . . . . . . . . . . . . . . . 26 8.15. NEW_CONNECTION_ID frame . . . . . . . . . . . . . . . . . 27
8.16. RETIRE_CONNECTION_ID frame . . . . . . . . . . . . . . . 27 8.16. RETIRE_CONNECTION_ID frame . . . . . . . . . . . . . . . 28
8.17. PATH_CHALLENGE frame . . . . . . . . . . . . . . . . . . 27 8.17. PATH_CHALLENGE frame . . . . . . . . . . . . . . . . . . 29
8.18. PATH_RESPONSE frame . . . . . . . . . . . . . . . . . . . 28 8.18. PATH_RESPONSE frame . . . . . . . . . . . . . . . . . . . 29
8.19. CONNECTION_CLOSE frame . . . . . . . . . . . . . . . . . 28 8.19. CONNECTION_CLOSE frame . . . . . . . . . . . . . . . . . 30
8.20. HANDSHAKE_DONE frame . . . . . . . . . . . . . . . . . . 29 8.20. HANDSHAKE_DONE frame . . . . . . . . . . . . . . . . . . 31
9. Informative References . . . . . . . . . . . . . . . . . . . 30 9. Informative References . . . . . . . . . . . . . . . . . . . 31
Appendix A. Source code repository . . . . . . . . . . . . . . . 30 Appendix A. Source code repository . . . . . . . . . . . . . . . 31
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 32
1. Introduction 1. Introduction
The augmented packet header diagram format [AUGMENTED-DIAGRAMS] The augmented packet header diagram format [AUGMENTED-DIAGRAMS]
enables documents to specify the syntax of protocol data units in a enables documents to specify the syntax of protocol data units in a
way that enables support for automated parser generation, while way that enables support for automated parser generation, while
maintaining human readability. maintaining human readability.
To demonstrate how this approach can be applied, and the value that To demonstrate how this approach can be applied, and the value that
it can provide, this document describes QUIC [QUIC-TRANSPORT] using it can provide, this document describes QUIC [QUIC-TRANSPORT] using
the augment packet header diagram format. the augment packet header diagram format. It is intended as an
example of the augmented packet header diagram language, and not as a
contribution to the development of the QUIC protocol.
This document is not an exhaustive description of the QUIC protocol. This document is not an exhaustive description of the QUIC protocol.
It contains only those elements necessary to demonstrate the It contains only those elements necessary to demonstrate the
augmented packet header diagram format, and should be read as an augmented packet header diagram format, and should be read as an
example of the use of that format. example of the use of that format.
This document describes the QUIC protocol. The QUIC protocol uses This document describes the QUIC protocol. The QUIC protocol uses
Stateless Reset Packets, Protected Packets, Retry Packets, and Stateless Reset Packets, Protected Packets, Retry Packets, and
Version Negotiation Packets. Version Negotiation Packets.
skipping to change at page 4, line 5 skipping to change at page 4, line 12
apply_protection function. The apply_protection function is defined apply_protection function. The apply_protection function is defined
as: as:
func apply_protection(to: Unprotected Packet) func apply_protection(to: Unprotected Packet)
-> Protected Packet: -> Protected Packet:
apply packet protection to payload apply packet protection to payload
apply header protection to first_byte and packet_number apply header protection to first_byte and packet_number
construct appropriate Protected Packet based on first_byte construct appropriate Protected Packet based on first_byte
return Protected Packet return Protected Packet
3. Variable Length Integer Encoding 3. Variable Length Integer
A Variable Length Integer Encoding is formatted as follows: A Variable Length Integer is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Len| |Len|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Value ... | Value ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
skipping to change at page 10, line 11 skipping to change at page 10, line 29
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload ... | Payload ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Long Header (LH): 1 Long Header; LH.T == 0. An Initial packet uses Long Header (LH): 1 Long Header; LH.T == 0. An Initial packet uses
long headers with a type value of 0x0. On receipt, the value of long headers with a type value of 0x0. On receipt, the value of
LH.DCID is stored as Initial DCID. LH.DCID is stored as Initial DCID.
Token Length (TL): 1 Variable Length Integer Encoding. A variable- Token Length (TL): 1 Variable Length Integer. A variable-length
length integer specifying the length of the Token field, in bytes. integer specifying the length of the Token field, in bytes.
Token: TL bytes; present only when TL > 0. The value of the token Token: TL bytes; present only when TL > 0. The value of the token
that was previously provided in a Retry packet or NEW_TOKEN frame. that was previously provided in a Retry packet or NEW_TOKEN frame.
Length: 1 Variable Length Integer Encoding. The length of the Length: 1 Variable Length Integer. The length of the remainder of
remainder of the packet (that is, the Packet Number and Payload the packet (that is, the Packet Number and Payload fields) in
fields) in bytes, encoded as a variable-length integer. bytes, encoded as a variable-length integer.
Packet Number: LH.P+1 bytes. The packet number field. Packet Number: LH.P+1 bytes. The packet number field.
Payload: [Frame]. The payload field, comprised of multiple frames. Payload: [Frame]. The payload field, comprised of multiple frames.
A Protected Initial packet is formatted as follows: A Protected Initial packet is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 10, line 50 skipping to change at page 11, line 28
| Protected Packet Number ... | Protected Packet Number ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protected Payload ... | Protected Payload ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Long Header (LH): 1 Long Header; LH.T == 0. An Initial packet uses Long Header (LH): 1 Long Header; LH.T == 0. An Initial packet uses
long headers with a type value of 0x0. long headers with a type value of 0x0.
Token Length (TL): 1 Variable Length Integer Encoding. A variable- Token Length (TL): 1 Variable Length Integer. A variable-length
length integer specifying the length of the Token field, in bytes. integer specifying the length of the Token field, in bytes.
Token: TL bytes; present only when TL > 0. The value of the token Token: TL bytes; present only when TL > 0. The value of the token
that was previously provided in a Retry packet or NEW_TOKEN frame. that was previously provided in a Retry packet or NEW_TOKEN frame.
Length: 1 Variable Length Integer Encoding. The length of the Length: 1 Variable Length Integer. The length of the remainder of
remainder of the packet (that is, the Packet Number and Payload the packet (that is, the Packet Number and Payload fields) in
fields) in bytes, encoded as a variable-length integer. bytes, encoded as a variable-length integer.
Protected Packet Number: LH.P+1 bytes. The packet number field, with Protected Packet Number: LH.P+1 bytes. The packet number field, with
header protection. header protection.
Protected Payload: (Length-(LH.P+1)) bytes. The protected payload Protected Payload: (Length-(LH.P+1)) bytes. The protected payload
field. field.
6.2. 0RTT Packet 6.2. 0RTT Packet
A 0RTT Packet is formatted as follows: A 0RTT Packet is formatted as follows:
skipping to change at page 11, line 41 skipping to change at page 12, line 24
| Packet Number ... | Packet Number ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload ... | Payload ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Long Header (LH): 1 Long Header; LH.T == 1. A 0-RTT packet uses long Long Header (LH): 1 Long Header; LH.T == 1. A 0-RTT packet uses long
headers with a type value of 0x1. headers with a type value of 0x1.
Length: 1 Variable Length Integer Encoding. The length of the Length: 1 Variable Length Integer. The length of the remainder of
remainder of the packet (that is, the Packet Number and Payload the packet (that is, the Packet Number and Payload fields) in
fields) in bytes, encoded as a variable-length integer. bytes, encoded as a variable-length integer.
Packet Number: LH.P+1 bytes. The packet number field. Packet Number: LH.P+1 bytes. The packet number field.
Payload: [Frame]. The payload field, comprised of multiple frames. Payload: [Frame]. The payload field, comprised of multiple frames.
A Protected 0RTT Packet is formatted as follows: A Protected 0RTT Packet is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 12, line 24 skipping to change at page 13, line 5
| Protected Packet Number ... | Protected Packet Number ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protected Payload ... | Protected Payload ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Long Header (LH): 1 Long Header; LH.T == 1. A 0-RTT packet uses long Long Header (LH): 1 Long Header; LH.T == 1. A 0-RTT packet uses long
headers with a type value of 0x1. headers with a type value of 0x1.
Length: 1 Variable Length Integer Encoding. The length of the Length: 1 Variable Length Integer. The length of the remainder of
remainder of the packet (that is, the Packet Number and Payload the packet (that is, the Packet Number and Payload fields) in
fields) in bytes, encoded as a variable-length integer. bytes, encoded as a variable-length integer.
Protected Packet Number: LH.P+1 bytes. The packet number field, with Protected Packet Number: LH.P+1 bytes. The packet number field, with
header protection. header protection.
Protected Payload: (Length-(LH.P+1)) bytes. The protected payload Protected Payload: (Length-(LH.P+1)) bytes. The protected payload
field. field.
6.3. Handshake Packet 6.3. Handshake Packet
A Handshake Packet is formatted as follows: A Handshake Packet is formatted as follows:
skipping to change at page 13, line 8 skipping to change at page 13, line 38
| Packet Number ... | Packet Number ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload ... | Payload ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Long Header (LH): 1 Long Header; LH.T == 2. A Handshake packet uses Long Header (LH): 1 Long Header; LH.T == 2. A Handshake packet uses
long headers with a type value of 0x2. long headers with a type value of 0x2.
Length: 1 Variable Length Integer Encoding. The length of the Length: 1 Variable Length Integer. The length of the remainder of
remainder of the packet (that is, the Packet Number and Payload the packet (that is, the Packet Number and Payload fields) in
fields) in bytes, encoded as a variable-length integer. bytes, encoded as a variable-length integer.
Packet Number: LH.P+1 bytes. The packet number field. Packet Number: LH.P+1 bytes. The packet number field.
Payload: [Frame]. The payload field, comprised of multiple frames. Payload: [Frame]. The payload field, comprised of multiple frames.
A Protected Handshake packet is formatted as follows: A Protected Handshake packet is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 13, line 37 skipping to change at page 14, line 24
| Protected Packet Number ... | Protected Packet Number ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protected Payload ... | Protected Payload ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Long Header (LH): 1 Long Header; LH.T == 2. A Handshake packet uses Long Header (LH): 1 Long Header; LH.T == 2. A Handshake packet uses
long headers with a type value of 0x2. long headers with a type value of 0x2.
Length: 1 Variable Length Integer Encoding. The length of the Length: 1 Variable Length Integer. The length of the remainder of
remainder of the packet (that is, the Packet Number and Payload the packet (that is, the Packet Number and Payload fields) in
fields) in bytes, encoded as a variable-length integer. bytes, encoded as a variable-length integer.
Protected Packet Number: LH.P+1 bytes. The packet number field, with Protected Packet Number: LH.P+1 bytes. The packet number field, with
header protection. header protection.
Protected Payload: (Length-(LH.P+1)) bytes. The protected payload Protected Payload: (Length-(LH.P+1)) bytes. The protected payload
field. field.
6.4. Retry Packet 6.4. Retry Packet
A Retry Packet is formatted as follows: A Retry Packet is formatted as follows:
skipping to change at page 16, line 8 skipping to change at page 17, line 8
from packet protection. The length of the packet number field is from packet protection. The length of the packet number field is
encoded in Packet Number Length field. encoded in Packet Number Length field.
Payload: [Frame]. The payload field, comprised of multiple frames. Payload: [Frame]. The payload field, comprised of multiple frames.
A Protected Short Header Packet is formatted as follows: A Protected Short Header Packet is formatted as follows:
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
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|0|1|S| ProcRKP | |0|1|S| R |K| P |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Connection ID ... | Destination Connection ID ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protected Packet Number ... | Protected Packet Number ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| : | :
: Protected Payload : : Protected Payload :
: | : |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 16, line 31 skipping to change at page 17, line 31
Header Form (HF): 1 bit; HF == 0. The most significant bit (0x80) of Header Form (HF): 1 bit; HF == 0. The most significant bit (0x80) of
byte 0 (the first byte) is set to 0 for short headers. byte 0 (the first byte) is set to 0 for short headers.
Fixed Bit (FB): 1 bit; FB == 1. The next bit (0x40) of byte 0 is set Fixed Bit (FB): 1 bit; FB == 1. The next bit (0x40) of byte 0 is set
to 1. Packets containing a zero value for this bit are not valid to 1. Packets containing a zero value for this bit are not valid
packets in this version and MUST be discarded. packets in this version and MUST be discarded.
Spin Bit (S): 1 bit. The third most significant bit (0x20) of byte 0 Spin Bit (S): 1 bit. The third most significant bit (0x20) of byte 0
is the latency spin bit. is the latency spin bit.
Protected Bits (ProcRKP): 5 bits. Five header protected bits. Reserved Bits (R): 2 bits. The next two bits (those with a mask of
0x18) of byte 0 are reserved. These bits are protected using
header protection. The value included prior to protection MUST be
set to 0.
Key Phase (K): 1 bit. The next bit (0x04) of byte 0 indicates the
key phase, which allows a recipient of a packet to identify the
packet protection keys that are used to protect the packet. This
bit is protected using header protection.
Packet Number Length (P): 2 bits. In packet types which contain a
Packet Number field, the least significant two bits (those with a
mask of 0x03) of byte 0 contain the length of the packet number,
encoded as an unsigned, two-bit integer that is one less than the
length of the packet number field in bytes. These bits are
protected using header protection.
Destination Connection ID: 20 bytes. The Destination Connection ID Destination Connection ID: 20 bytes. The Destination Connection ID
is a connection ID that is chosen by the intended recipient of the is a connection ID that is chosen by the intended recipient of the
packet. packet.
Packet Number. The packet number field is 1 to 4 bytes long. The Packet Number: P+1 bytes. The packet number field is 1 to 4 bytes
packet number has confidentiality protection separate from packet long. The packet number has confidentiality protection separate
protection. The length of the packet number field is encoded in from packet protection. The length of the packet number field is
Packet Number Length field. encoded in Packet Number Length field.
Protected Payload: [Frame]. Packets with a short header always Protected Payload: [Frame]. Packets with a short header always
include a 1-RTT protected payload. include a 1-RTT protected payload.
8. Frames and Frame Formats 8. Frames and Frame Formats
A Frame is one of: a PADDING Frame, a PING Frame, an ACK Frame, a A Frame is one of: a PADDING Frame, a PING Frame, an ACK Frame, a
RESET_STREAM Frame, a STOP_SENDING Frame, a CRYPTO Frame, a NEW_TOKEN RESET_STREAM Frame, a STOP_SENDING Frame, a CRYPTO Frame, a NEW_TOKEN
Frame, a STREAM Frame, a MAX_DATA Frame, a MAX_STREAM_DATA Frame, a Frame, a STREAM Frame, a MAX_DATA Frame, a MAX_STREAM_DATA Frame, a
MAX_STREAMS Frame, a DATA_BLOCKED Frame, a STREAM_DATA_BLOCKED Frame, MAX_STREAMS Frame, a DATA_BLOCKED Frame, a STREAM_DATA_BLOCKED Frame,
skipping to change at page 17, line 27 skipping to change at page 18, line 33
A PADDING Frame is formatted as follows: A PADDING Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 0. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 0. Frame
type, set to 0 for PADDING frames. type, set to 0 for PADDING frames.
8.2. PING frame 8.2. PING frame
A PING Frame is formatted as follows: A PING Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 | | 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 1. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 1. Frame
type, set to 1 for PING frames. type, set to 1 for PING frames.
8.3. ACK frame 8.3. ACK frame
An ACK Range is formatted as follows: An ACK Range is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Gap ... | Gap ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ACK Packet Range ... | ACK Packet Range ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Gap: 1 Variable Length Integer Encoding. A variable-length integer Gap: 1 Variable Length Integer. A variable-length integer indicating
indicating the number of contiguous unacknowledged packets the number of contiguous unacknowledged packets preceding the
preceding the packet number one lower than the smallest in the packet number one lower than the smallest in the preceding ACK
preceding ACK Range. Range.
ACK Packet Range: 1 Variable Length Integer Encoding. A variable- ACK Packet Range: 1 Variable Length Integer. A variable-length
length integer indicating the number of contiguous acknowledged integer indicating the number of contiguous acknowledged packets
packets preceding the largest packet number, as determined by the preceding the largest packet number, as determined by the
preceding Gap. preceding Gap.
An ECN Count is formatted as follows: An ECN Count is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ECT0 Count ... | ECT0 Count ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ECT1 Count ... | ECT1 Count ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ECNCE Count ... | ECNCE Count ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
ECT0 Count: 1 Variable Length Integer Encoding. A variable-length ECT0 Count: 1 Variable Length Integer. A variable-length integer
integer representing the total number of packets received with the representing the total number of packets received with the ECT(0)
ECT(0) codepoint in the packet number space of the ACK frame. codepoint in the packet number space of the ACK frame.
ECT1 Count: 1 Variable Length Integer Encoding. A variable-length ECT1 Count: 1 Variable Length Integer. A variable-length integer
integer representing the total number of packets received with the representing the total number of packets received with the ECT(1)
ECT(1) codepoint in the packet number space of the ACK frame. codepoint in the packet number space of the ACK frame.
ECNCE Count: 1 Variable Length Integer Encoding. A variable-length ECNCE Count: 1 Variable Length Integer. A variable-length integer
integer representing the total number of packets received with the representing the total number of packets received with the CE
CE codepoint in the packet number space of the ACK frame. codepoint in the packet number space of the ACK frame.
An ACK Frame is formatted as follows: An ACK Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Frame Type | | Frame Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Largest Acknowledged ... | Largest Acknowledged ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 19, line 25 skipping to change at page 20, line 29
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| First ACK Range ... | First ACK Range ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| [Other ACK Ranges] ... | [Other ACK Ranges] ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ECN Counts ... | ECN Counts ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; (FT == 3) || Frame Type (FT): 1 Variable Length Integer; (FT.Value == 3) ||
(FT == 4). Frame type, set to 3 or 4 for ACK frames. (FT.Value == 4). Frame type, set to 3 or 4 for ACK frames.
Largest Acknowledged: 1 Variable Length Integer Encoding. A Largest Acknowledged: 1 Variable Length Integer. A variable-length
variable-length integer representing the largest packet number the integer representing the largest packet number the peer is
peer is acknowledging; this is usually the largest packet number acknowledging; this is usually the largest packet number that the
that the peer has received prior to generating the ACK frame. peer has received prior to generating the ACK frame. Unlike the
Unlike the packet number in the QUIC long or short header, the packet number in the QUIC long or short header, the value in an
value in an ACK frame is not truncated. ACK frame is not truncated.
ACK Delay: 1 Variable Length Integer Encoding. A variable-length ACK Delay: 1 Variable Length Integer. A variable-length integer
integer representing the time delta in microseconds between when representing the time delta in microseconds between when this ACK
this ACK was sent and when the largest acknowledged packet, as was sent and when the largest acknowledged packet, as indicated in
indicated in the Largest Acknowledged field, was received by this the Largest Acknowledged field, was received by this peer.
peer.
ACK Range Count: 1 Variable Length Integer Encoding. A variable- ACK Range Count: 1 Variable Length Integer. A variable-length
length integer specifying the number of Gap and ACK Range fields integer specifying the number of Gap and ACK Range fields in the
in the frame. frame.
First ACK Range: 1 ACK Range. The First ACK Range is encoded as an First ACK Range: 1 ACK Range. The First ACK Range is encoded as an
ACK Range starting from the Largest Acknowledged. ACK Range starting from the Largest Acknowledged.
Other ACK Ranges: [ACK Range]. Contains additional ranges of packets Other ACK Ranges: [ACK Range]. Contains additional ranges of packets
which are alternately not acknowledged and acknowledged. which are alternately not acknowledged and acknowledged.
ECN Counts: 1 ECN Count; present only when FT == 3. The three ECN ECN Counts: 1 ECN Count; present only when FT.Value == 3. The three
Counts. ECN Counts.
8.4. RESET_STREAM frame 8.4. RESET_STREAM frame
A RESET_STREAM Frame is formatted as follows: A RESET_STREAM Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4 | | 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream ID ... | Stream ID ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Application Error Code ... | Application Error Code ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Final Size ... | Final Size ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 4. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 4. Frame
type, set to 4 for RESET_STREAM frames. type, set to 4 for RESET_STREAM frames.
Stream ID: 1 Variable Length Integer Encoding. A variable-length Stream ID: 1 Variable Length Integer. A variable-length integer
integer encoding of the Stream ID of the stream being terminated. encoding of the Stream ID of the stream being terminated.
Application Error Code: 1 Variable Length Integer Encoding. A variab Application Error Code: 1 Variable Length Integer. A variable-length
le-length integer containing the application protocol error code integer containing the application protocol error code which
which indicates why the stream is being closed. indicates why the stream is being closed.
Final Size: 1 Variable Length Integer Encoding. A variable-length Final Size: 1 Variable Length Integer. A variable-length integer
integer indicating the final size of the stream by the indicating the final size of the stream by the RESET_STREAM
RESET_STREAM sender, in unit of bytes. sender, in unit of bytes.
8.5. STOP_SENDING frame 8.5. STOP_SENDING frame
A STOP_SENDING Frame is formatted as follows: A STOP_SENDING Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 5 | | 5 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream ID ... | Stream ID ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Application Error Code ... | Application Error Code ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 5. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 5. Frame
type, set to 5 for STOP_SENDING frames. type, set to 5 for STOP_SENDING frames.
Stream ID: 1 Variable Length Integer Encoding. A variable-length Stream ID: 1 Variable Length Integer. A variable-length integer
integer carrying the Stream ID of the stream being ignored. carrying the Stream ID of the stream being ignored.
Application Error Code: 1 Variable Length Integer Encoding. A variab Application Error Code: 1 Variable Length Integer. A variable-length
le-length integer containing the application-specified reason the integer containing the application-specified reason the sender is
sender is ignoring the stream. ignoring the stream.
8.6. CRYPTO frame 8.6. CRYPTO frame
A CRYPTO Frame is formatted as follows: A CRYPTO Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 6 | | 6 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 21, line 35 skipping to change at page 22, line 47
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length ... | Length ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| : | :
: Crypto Data : : Crypto Data :
: | : |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 6. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 6. Frame
type, set to 6 for CRYPTO frames. type, set to 6 for CRYPTO frames.
Offset: 1 Variable Length Integer Encoding. A variable-length Offset: 1 Variable Length Integer. A variable-length integer
integer specifying the byte offset in the stream for the data in specifying the byte offset in the stream for the data in this
this CRYPTO frame.
Length: 1 Variable Length Integer Encoding. A variable-length
integer specifying the length of the Crypto Data field in this
CRYPTO frame. CRYPTO frame.
Length: 1 Variable Length Integer. A variable-length integer
specifying the length of the Crypto Data field in this CRYPTO
frame.
Crypto Data: Length bytes. The cryptographic message data. Crypto Data: Length bytes. The cryptographic message data.
8.7. NEW_TOKEN frame 8.7. NEW_TOKEN frame
A NEW_TOKEN Frame is formatted as follows: A NEW_TOKEN Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 7 | | 7 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Token Length ... | Token Length ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| : | :
: Token : : Token :
: | : |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 7. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 7. Frame
type, set to 7 for NEW_TOKEN frames. type, set to 7 for NEW_TOKEN frames.
Token Length (TL): 1 Variable Length Integer Encoding. A variable- Token Length (TL): 1 Variable Length Integer. A variable-length
length integer specifying the length of the token in bytes. integer specifying the length of the token in bytes.
Token: TL bytes. An opaque blob that the client may use with a Token: TL bytes. An opaque blob that the client may use with a
future Initial packet. future Initial packet.
8.8. STREAM frame 8.8. STREAM frame
A STREAM Frame is formatted as follows: A STREAM Frame is formatted as follows:
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
skipping to change at page 23, line 14 skipping to change at page 24, line 35
OFF bit (O): 1 bit. Set to indicate that there is an Offset field OFF bit (O): 1 bit. Set to indicate that there is an Offset field
present. present.
LEN bit (L): 1 bit. Set to indicate that there is a Length field LEN bit (L): 1 bit. Set to indicate that there is a Length field
present. present.
FIN bit (F): 1 bit. Set only on frames that contain the final size FIN bit (F): 1 bit. Set only on frames that contain the final size
of the stream. of the stream.
Stream ID: 1 Variable Length Integer Encoding. A variable-length Stream ID: 1 Variable Length Integer. A variable-length integer
integer indicating the stream ID of the stream. indicating the stream ID of the stream.
Offset: 1 Variable Length Integer Encoding; present only when O == Offset: 1 Variable Length Integer; present only when O == 1. A varia
1. A variable-length integer specifying the byte offset in the ble-length integer specifying the byte offset in the stream for
stream for the data in this STREAM frame. the data in this STREAM frame.
Length: 1 Variable Length Integer Encoding; present only when L == Length: 1 Variable Length Integer; present only when L == 1. A varia
1. A variable-length integer specifying the length of the Stream ble-length integer specifying the length of the Stream Data field
Data field in this STREAM frame. This field is present when the in this STREAM frame. This field is present when the LEN bit is
LEN bit is set to 1. When the LEN bit is set to 0, the Stream set to 1. When the LEN bit is set to 0, the Stream Data field
Data field consumes all the remaining bytes in the packet. consumes all the remaining bytes in the packet.
Stream Data: Length bytes. The bytes from the designated stream to Stream Data: Length bytes. The bytes from the designated stream to
be delivered. be delivered.
8.9. MAX_DATA frame 8.9. MAX_DATA frame
A MAX_DATA Frame is formatted as follows: A MAX_DATA Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 16 | | 16 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Maximum Data ... | Maximum Data ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 16. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 16. Frame
type, set to 16 for MAX_DATA frames. type, set to 16 for MAX_DATA frames.
Maximum Data: 1 Variable Length Integer Encoding. A variable-length Maximum Data: 1 Variable Length Integer. A variable-length integer
integer indicating the maximum amount of data that can be sent on indicating the maximum amount of data that can be sent on the
the entire connection, in units of bytes. entire connection, in units of bytes.
8.10. MAX_STREAM_DATA frame 8.10. MAX_STREAM_DATA frame
A MAX_STREAM_DATA Frame is formatted as follows: A MAX_STREAM_DATA Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 17 | | 17 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream ID ... | Stream ID ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Maximum Stream Data ... | Maximum Stream Data ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 17. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 17. Frame
type, set to 17 for MAX_STREAM_DATA frames. type, set to 17 for MAX_STREAM_DATA frames.
Stream ID: 1 Variable Length Integer Encoding. The stream ID of the Stream ID: 1 Variable Length Integer. The stream ID of the stream
stream that is affected encoded as a variable-length integer. that is affected encoded as a variable-length integer.
Maximum Stream Data: 1 Variable Length Integer Encoding. A variable- Maximum Stream Data: 1 Variable Length Integer. A variable-length
length integer indicating the maximum amount of data that can be integer indicating the maximum amount of data that can be sent on
sent on the identified stream, in units of bytes. the identified stream, in units of bytes.
8.11. MAX_STREAMS frame 8.11. MAX_STREAMS frame
A MAX_STREAMS Frame is formatted as follows: A MAX_STREAMS Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FT | | FT |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Maximum Streams ... | Maximum Streams ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; (FT == 18) || Frame Type (FT): 1 Variable Length Integer; (FT.Value == 18) ||
(FT == 19). Frame type, set to 18 or 19 for MAX_STREAMS frames. (FT.Value == 19). Frame type, set to 18 or 19 for MAX_STREAMS
frames.
Maximum Streams: 1 Variable Length Integer Encoding. A count of the Maximum Streams: 1 Variable Length Integer. A count of the
cumulative number of streams of the corresponding type that can be cumulative number of streams of the corresponding type that can be
opened over the lifetime of the connection. opened over the lifetime of the connection.
8.12. DATA_BLOCKED frame 8.12. DATA_BLOCKED frame
A DATA_BLOCKED Frame is formatted as follows: A DATA_BLOCKED Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 20 | | 20 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data Limit ... | Data Limit ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 20. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 20. Frame
type, set to 20 for DATA_BLOCKED frames. type, set to 20 for DATA_BLOCKED frames.
Data Limit: 1 Variable Length Integer Encoding. A variable-length Data Limit: 1 Variable Length Integer. A variable-length integer
integer indicating the connection-level limit at which blocking indicating the connection-level limit at which blocking occurred.
occurred.
8.13. STREAM_DATA_BLOCKED frame 8.13. STREAM_DATA_BLOCKED frame
A STREAM_DATA_BLOCKED Frame is formatted as follows: A STREAM_DATA_BLOCKED Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 21 | | 21 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream ID ... | Stream ID ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream Data Limit ... | Stream Data Limit ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 21. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 21. Frame
type, set to 21 for STREAM_DATA_BLOCKED frames. type, set to 21 for STREAM_DATA_BLOCKED frames.
Stream ID: 1 Variable Length Integer Encoding. A variable-length Stream ID: 1 Variable Length Integer. A variable-length integer
integer indicating the stream which is flow control blocked. indicating the stream which is flow control blocked.
Maximum Stream Data: 1 Variable Length Integer Encoding. A variable- Maximum Stream Data: 1 Variable Length Integer. A variable-length
length integer indicating the offset of the stream at which the integer indicating the offset of the stream at which the blocking
blocking occurred. occurred.
8.14. STREAMS_BLOCKED frame 8.14. STREAMS_BLOCKED frame
A STREAMS_BLOCKED Frame is formatted as follows: A STREAMS_BLOCKED Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FT | | FT |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream Limit ... | Stream Limit ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; (FT == 22) || Frame Type (FT): 1 Variable Length Integer; (FT.Value == 22) ||
(FT == 23). Frame type, set to 22 or 23 for STREAMS_BLOCKED frames. (FT.Value == 23). Frame type, set to 22 or 23 for STREAMS_BLOCKED
frames.
Stream Limit: 1 Variable Length Integer Encoding. A variable-length Stream Limit: 1 Variable Length Integer. A variable-length integer
integer indicating the stream limit at the time the frame was indicating the stream limit at the time the frame was sent.
sent.
8.15. NEW_CONNECTION_ID frame 8.15. NEW_CONNECTION_ID frame
A NEW_CONNECTION_ID Frame is formatted as follows: A NEW_CONNECTION_ID Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 24 | | 24 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 27, line 5 skipping to change at page 28, line 29
+ + + +
| | | |
+ Stateless Reset Token + + Stateless Reset Token +
| | | |
+ + + +
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 24. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 24. Frame
type, set to 24 for NEW_CONNECTION_ID frames. type, set to 24 for NEW_CONNECTION_ID frames.
Sequence Number: 1 Variable Length Integer Encoding. The sequence Sequence Number: 1 Variable Length Integer. The sequence number
number assigned to the connection ID by the sender. assigned to the connection ID by the sender.
Retire Prior To: 1 Variable Length Integer Encoding. A variable- Retire Prior To: 1 Variable Length Integer. A variable-length
length integer indicating which connection IDs should be retired. integer indicating which connection IDs should be retired.
Length: 1 byte. An 8-bit unsigned integer containing the length of Length: 1 byte. An 8-bit unsigned integer containing the length of
the connection ID. Values less than 1 and greater than 20 are the connection ID. Values less than 1 and greater than 20 are
invalid and MUST be treated as a connection error of type invalid and MUST be treated as a connection error of type
FRAME_ENCODING_ERROR. FRAME_ENCODING_ERROR.
Connection ID: Length bytes. A connection ID of the specified Connection ID: Length bytes. A connection ID of the specified
length. length.
Stateless Reset Token: 128 bits. A 128-bit value that will be used Stateless Reset Token: 128 bits. A 128-bit value that will be used
skipping to change at page 27, line 39 skipping to change at page 29, line 15
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 25 | | 25 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number ... | Sequence Number ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 25. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 25. Frame
type, set to 25 for RETIRE_CONNECTION_ID frames. type, set to 25 for RETIRE_CONNECTION_ID frames.
Sequence Number: 1 Variable Length Integer Encoding. The sequence Sequence Number: 1 Variable Length Integer. The sequence number of
number of the connection ID being retired. the connection ID being retired.
8.17. PATH_CHALLENGE frame 8.17. PATH_CHALLENGE frame
A PATH_CHALLENGE Frame is formatted as follows: A PATH_CHALLENGE Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 26 | | 26 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
+ Data + + Data +
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 26. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 26. Frame
type, set to 26 for PATH_CHALLENGE frames. type, set to 26 for PATH_CHALLENGE frames.
Data: 64 bits. This 8-byte field contains arbitrary data. Data: 64 bits. This 8-byte field contains arbitrary data.
8.18. PATH_RESPONSE frame 8.18. PATH_RESPONSE frame
A PATH_RESPONSE Frame is formatted as follows: A PATH_RESPONSE Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 27 | | 27 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
+ Data + + Data +
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 27. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 27. Frame
type, set to 27 for PATH_RESPONSE frames. type, set to 27 for PATH_RESPONSE frames.
Data: 64 bits. This 8-byte field contains arbitrary data. Data: 64 bits. This 8-byte field contains arbitrary data.
8.19. CONNECTION_CLOSE frame 8.19. CONNECTION_CLOSE frame
A CONNECTION_CLOSE Frame is formatted as follows: A CONNECTION_CLOSE Frame is formatted as follows:
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
skipping to change at page 29, line 23 skipping to change at page 30, line 44
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Phrase Length ... | Phrase Length ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| : | :
: Reason Phrase : : Reason Phrase :
: | : |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 28 || Frame Type (FT): 1 Variable Length Integer; FT.Value == 28 ||
FT == 29. Frame type, set to 28 or 29 for CONNECTION_CLOSE frames. FT.Value == 29. Frame type, set to 28 or 29 for CONNECTION_CLOSE
frames.
Error Code: 1 Variable Length Integer Encoding. A variable length Error Code: 1 Variable Length Integer. A variable length integer
integer error code which indicates the reason for closing this error code which indicates the reason for closing this connection.
connection.
Frame Type: 1 Variable Length Integer Encoding; present only when Frame Type: 1 Variable Length Integer; present only when FT.Value
FT == 28. A variable-length integer encoding the type of frame that == 28. A variable-length integer encoding the type of frame that
triggered the error. triggered the error.
Phrase Length (Length): 1 Variable Length Integer Encoding. A variab Phrase Length (Length): 1 Variable Length Integer. A variable-length
le-length integer specifying the length of the reason phrase in integer specifying the length of the reason phrase in bytes.
bytes.
Reason Phrase: Length bytes. A human-readable explanation for why Reason Phrase: Length bytes. A human-readable explanation for why
the connection was closed. the connection was closed.
8.20. HANDSHAKE_DONE frame 8.20. HANDSHAKE_DONE frame
A HANDSHAKE_DONE Frame is formatted as follows: A HANDSHAKE_DONE Frame is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 30 | | 30 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Frame Type (FT): 1 Variable Length Integer Encoding; FT == 30. Frame Frame Type (FT): 1 Variable Length Integer; FT.Value == 30. Frame
type, set to 30 for HANDSHAKE_DONE frames. type, set to 30 for HANDSHAKE_DONE frames.
9. Informative References 9. Informative References
[QUIC-TRANSPORT] [QUIC-TRANSPORT]
Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed
and Secure Transport", Work in Progress, Internet-Draft, and Secure Transport", Work in Progress, Internet-Draft,
draft-ietf-quic-transport-27, 21 February 2020, draft-ietf-quic-transport-27, 21 February 2020,
<http://www.ietf.org/internet-drafts/draft-ietf-quic- <http://www.ietf.org/internet-drafts/draft-ietf-quic-
transport-27.txt>. transport-27.txt>.
[AUGMENTED-DIAGRAMS] [AUGMENTED-DIAGRAMS]
McQuistin, S., Band, V., Jacob, D., and C. S. Perkins, McQuistin, S., Band, V., Jacob, D., and C. S. Perkins,
"Describing Protocol Data Units with Augmented Packet "Describing Protocol Data Units with Augmented Packet
Header Diagrams", Work in Progress, Internet-Draft, draft- Header Diagrams", Work in Progress, Internet-Draft, draft-
mcquistin-augmented-ascii-diagrams-06, 13 July 2020, mcquistin-augmented-ascii-diagrams-07, 2 November 2020,
<http://www.ietf.org/internet-drafts/draft-mcquistin- <http://www.ietf.org/internet-drafts/draft-mcquistin-
augmented-ascii-diagrams-06.txt>. augmented-ascii-diagrams-07.txt>.
Appendix A. Source code repository Appendix A. Source code repository
The source for this draft is available from https://github.com/ The source for this draft is available from https://github.com/
glasgow-ipl/draft-mcquistin-quic-augmented-diagrams. glasgow-ipl/draft-mcquistin-quic-augmented-diagrams.
The source code for tooling that can be used to parse this document The source code for tooling that can be used to parse this document
is available from https://github.com/glasgow-ipl/ips-protodesc-code. is available from https://github.com/glasgow-ipl/ips-protodesc-code.
Authors' Addresses Authors' Addresses
 End of changes. 76 change blocks. 
188 lines changed or deleted 203 lines changed or added

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