| draft-ietf-quic-invariants-latest.txt | draft-ietf-quic-invariants-auth48.txt | |||
|---|---|---|---|---|
| skipping to change at page 2, line 7 ¶ | skipping to change at line 45 ¶ | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. An Extremely Abstract Description of QUIC . . . . . . . . . . 2 | 1. An Extremely Abstract Description of QUIC | |||
| 2. Fixed Properties of All QUIC Versions . . . . . . . . . . . . 2 | 2. Fixed Properties of All QUIC Versions | |||
| 3. Conventions and Definitions . . . . . . . . . . . . . . . . . 3 | 3. Conventions and Definitions | |||
| 4. Notational Conventions . . . . . . . . . . . . . . . . . . . 3 | 4. Notational Conventions | |||
| 5. QUIC Packets . . . . . . . . . . . . . . . . . . . . . . . . 4 | 5. QUIC Packets | |||
| 5.1. Long Header . . . . . . . . . . . . . . . . . . . . . . . 4 | 5.1. Long Header | |||
| 5.2. Short Header . . . . . . . . . . . . . . . . . . . . . . 5 | 5.2. Short Header | |||
| 5.3. Connection ID . . . . . . . . . . . . . . . . . . . . . . 6 | 5.3. Connection ID | |||
| 5.4. Version . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.4. Version | |||
| 6. Version Negotiation . . . . . . . . . . . . . . . . . . . . . 6 | 6. Version Negotiation | |||
| 7. Security and Privacy Considerations . . . . . . . . . . . . . 8 | 7. Security and Privacy Considerations | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 8. References | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 8 | 8.1. Normative References | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 8 | 8.2. Informative References | |||
| Appendix A. Incorrect Assumptions . . . . . . . . . . . . . . . 9 | Appendix A. Incorrect Assumptions | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 10 | Author's Address | |||
| 1. An Extremely Abstract Description of QUIC | 1. An Extremely Abstract Description of QUIC | |||
| QUIC is a connection-oriented protocol between two endpoints. Those | QUIC is a connection-oriented protocol between two endpoints. Those | |||
| endpoints exchange UDP datagrams. These UDP datagrams contain QUIC | endpoints exchange UDP datagrams. These UDP datagrams contain QUIC | |||
| packets. QUIC endpoints use QUIC packets to establish a QUIC | packets. QUIC endpoints use QUIC packets to establish a QUIC | |||
| connection, which is shared protocol state between those endpoints. | connection, which is shared protocol state between those endpoints. | |||
| 2. Fixed Properties of All QUIC Versions | 2. Fixed Properties of All QUIC Versions | |||
| skipping to change at page 4, line 13 ¶ | skipping to change at line 147 ¶ | |||
| Figure 1 shows an example structure: | Figure 1 shows an example structure: | |||
| Example Structure { | Example Structure { | |||
| One-bit Field (1), | One-bit Field (1), | |||
| 7-bit Field with Fixed Value (7) = 61, | 7-bit Field with Fixed Value (7) = 61, | |||
| Arbitrary-Length Field (..), | Arbitrary-Length Field (..), | |||
| Variable-Length Field (8..24), | Variable-Length Field (8..24), | |||
| Repeated Field (8) ..., | Repeated Field (8) ..., | |||
| } | } | |||
| Figure 1: Example Format | Figure 1: Example Format | |||
| 5. QUIC Packets | 5. QUIC Packets | |||
| QUIC endpoints exchange UDP datagrams that contain one or more QUIC | QUIC endpoints exchange UDP datagrams that contain one or more QUIC | |||
| packets. This section describes the invariant characteristics of a | packets. This section describes the invariant characteristics of a | |||
| QUIC packet. A version of QUIC could permit multiple QUIC packets in | QUIC packet. A version of QUIC could permit multiple QUIC packets in | |||
| a single UDP datagram, but the invariant properties only describe the | a single UDP datagram, but the invariant properties only describe the | |||
| first packet in a datagram. | first packet in a datagram. | |||
| QUIC defines two types of packet headers: long and short. Packets | QUIC defines two types of packet headers: long and short. Packets | |||
| skipping to change at page 4, line 50 ¶ | skipping to change at line 184 ¶ | |||
| Header Form (1) = 1, | Header Form (1) = 1, | |||
| Version-Specific Bits (7), | Version-Specific Bits (7), | |||
| Version (32), | Version (32), | |||
| Destination Connection ID Length (8), | Destination Connection ID Length (8), | |||
| Destination Connection ID (0..2040), | Destination Connection ID (0..2040), | |||
| Source Connection ID Length (8), | Source Connection ID Length (8), | |||
| Source Connection ID (0..2040), | Source Connection ID (0..2040), | |||
| Version-Specific Data (..), | Version-Specific Data (..), | |||
| } | } | |||
| Figure 2: QUIC Long Header | Figure 2: QUIC Long Header | |||
| A QUIC packet with a long header has the high bit of the first byte | A QUIC packet with a long header has the high bit of the first byte | |||
| set to 1. All other bits in that byte are version specific. | set to 1. All other bits in that byte are version specific. | |||
| The next four bytes include a 32-bit Version field. Versions are | The next four bytes include a 32-bit Version field. Versions are | |||
| described in Section 5.4. | described in Section 5.4. | |||
| The next byte contains the length in bytes of the Destination | The next byte contains the length in bytes of the Destination | |||
| Connection ID field that follows it. This length is encoded as an | Connection ID field that follows it. This length is encoded as an | |||
| 8-bit unsigned integer. The Destination Connection ID field follows | 8-bit unsigned integer. The Destination Connection ID field follows | |||
| skipping to change at page 7, line 16 ¶ | skipping to change at line 283 ¶ | |||
| Header Form (1) = 1, | Header Form (1) = 1, | |||
| Unused (7), | Unused (7), | |||
| Version (32) = 0, | Version (32) = 0, | |||
| Destination Connection ID Length (8), | Destination Connection ID Length (8), | |||
| Destination Connection ID (0..2040), | Destination Connection ID (0..2040), | |||
| Source Connection ID Length (8), | Source Connection ID Length (8), | |||
| Source Connection ID (0..2040), | Source Connection ID (0..2040), | |||
| Supported Version (32) ..., | Supported Version (32) ..., | |||
| } | } | |||
| Figure 4: Version Negotiation Packet | Figure 4: Version Negotiation Packet | |||
| Only the most significant bit of the first byte of a Version | Only the most significant bit of the first byte of a Version | |||
| Negotiation packet has any defined value. The remaining 7 bits, | Negotiation packet has any defined value. The remaining 7 bits, | |||
| labeled "Unused", can be set to any value when sending and MUST be | labeled "Unused", can be set to any value when sending and MUST be | |||
| ignored on receipt. | ignored on receipt. | |||
| After the Source Connection ID field, the Version Negotiation packet | After the Source Connection ID field, the Version Negotiation packet | |||
| contains a list of Supported Version fields, each identifying a | contains a list of Supported Version fields, each identifying a | |||
| version that the endpoint sending the packet supports. A Version | version that the endpoint sending the packet supports. A Version | |||
| Negotiation packet contains no other fields. An endpoint MUST ignore | Negotiation packet contains no other fields. An endpoint MUST ignore | |||
| skipping to change at page 8, line 42 ¶ | skipping to change at line 357 ¶ | |||
| 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>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| 8.2. Informative References | 8.2. Informative References | |||
| [QUIC-TLS] | [QUIC-TLS] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | |||
| Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | ||||
| QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | |||
| <https://www.rfc-editor.org/info/rfc9001>. | <https://www.rfc-editor.org/info/rfc9001>. | |||
| [QUIC-TRANSPORT] | [QUIC-TRANSPORT] | |||
| Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
| DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
| <https://www.rfc-editor.org/info/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
| [RFC5116] McGrew, D., "An Interface and Algorithms for Authenticated | [RFC5116] McGrew, D., "An Interface and Algorithms for Authenticated | |||
| skipping to change at page 9, line 23 ¶ | skipping to change at line 385 ¶ | |||
| changeable when a new version is deployed. | changeable when a new version is deployed. | |||
| This section lists a sampling of incorrect assumptions that might be | This section lists a sampling of incorrect assumptions that might be | |||
| made about QUIC based on knowledge of QUIC version 1. Some of these | made about QUIC based on knowledge of QUIC version 1. Some of these | |||
| statements are not even true for QUIC version 1. This is not an | statements are not even true for QUIC version 1. This is not an | |||
| exhaustive list; it is intended to be illustrative only. | exhaustive list; it is intended to be illustrative only. | |||
| *Any and all of the following statements can be false for a given | *Any and all of the following statements can be false for a given | |||
| QUIC version:* | QUIC version:* | |||
| o QUIC uses TLS [QUIC-TLS] and some TLS messages are visible on the | * QUIC uses TLS [QUIC-TLS], and some TLS messages are visible on the | |||
| wire. | wire. | |||
| o QUIC long headers are only exchanged during connection | * QUIC long headers are only exchanged during connection | |||
| establishment. | establishment. | |||
| o Every flow on a given 5-tuple will include a connection | * Every flow on a given 5-tuple will include a connection | |||
| establishment phase. | establishment phase. | |||
| o The first packets exchanged on a flow use the long header. | * The first packets exchanged on a flow use the long header. | |||
| o The last packet before a long period of quiescence might be | * The last packet before a long period of quiescence might be | |||
| assumed to contain only an acknowledgment. | assumed to contain only an acknowledgment. | |||
| o QUIC uses an Authenticated Encryption with Associated Data (AEAD) | * QUIC uses an Authenticated Encryption with Associated Data (AEAD) | |||
| function (AEAD_AES_128_GCM; see [RFC5116]) to protect the packets | function (AEAD_AES_128_GCM; see [RFC5116]) to protect the packets | |||
| it exchanges during connection establishment. | it exchanges during connection establishment. | |||
| o QUIC packet numbers are encrypted and appear as the first | * QUIC packet numbers are encrypted and appear as the first | |||
| encrypted bytes. | encrypted bytes. | |||
| o QUIC packet numbers increase by one for every packet sent. | * QUIC packet numbers increase by one for every packet sent. | |||
| o QUIC has a minimum size for the first handshake packet sent by a | * QUIC has a minimum size for the first handshake packet sent by a | |||
| client. | client. | |||
| o QUIC stipulates that a client speak first. | * QUIC stipulates that a client speak first. | |||
| o QUIC packets always have the second bit of the first byte (0x40) | * QUIC packets always have the second bit of the first byte (0x40) | |||
| set. | set. | |||
| o A QUIC Version Negotiation packet is only sent by a server. | * A QUIC Version Negotiation packet is only sent by a server. | |||
| o A QUIC connection ID changes infrequently. | * A QUIC connection ID changes infrequently. | |||
| o QUIC endpoints change the version they speak if they are sent a | * QUIC endpoints change the version they speak if they are sent a | |||
| Version Negotiation packet. | Version Negotiation packet. | |||
| o The Version field in a QUIC long header is the same in both | * The Version field in a QUIC long header is the same in both | |||
| directions. | directions. | |||
| o A QUIC packet with a particular value in the Version field means | * A QUIC packet with a particular value in the Version field means | |||
| that the corresponding version of QUIC is in use. | that the corresponding version of QUIC is in use. | |||
| o Only one connection at a time is established between any pair of | * Only one connection at a time is established between any pair of | |||
| QUIC endpoints. | QUIC endpoints. | |||
| Author's Address | Author's Address | |||
| Martin Thomson | Martin Thomson | |||
| Mozilla | Mozilla | |||
| Email: mt@lowentropy.net | Email: mt@lowentropy.net | |||
| End of changes. 22 change blocks. | ||||
| 38 lines changed or deleted | 37 lines changed or added | |||
This html diff was produced by rfcdiff 1.44jr. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||