Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compatible version upgrade #1901

Closed
wants to merge 30 commits into from
Closed
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
4dc5e0d
Compatible version upgrade
martinthomson Oct 24, 2018
7483395
There are only two things, which means no list
martinthomson Oct 24, 2018
f997b10
Marten's editorial suggestions
martinthomson Oct 24, 2018
f12becd
Thwart downgrade attacks between incompatible versions
martinthomson Oct 25, 2018
4235f75
unplural
nibanks Oct 25, 2018
0e0df73
article
nibanks Oct 25, 2018
48ae25f
joiner
nibanks Oct 25, 2018
87bcb71
Nick's suggestions
martinthomson Oct 25, 2018
847445b
No common versions means fail
martinthomson Oct 25, 2018
7533873
Move some text up to get the flow right
martinthomson Oct 25, 2018
2b02ccd
Split into supported and unsupported
martinthomson Oct 26, 2018
34b19da
The packet definitely always changes
martinthomson Oct 26, 2018
a2c5c6a
Moar words about what it means for a version to be supported by a client
martinthomson Oct 26, 2018
0de8a0c
Cleanup, don't create conflicting requirements
martinthomson Oct 26, 2018
8ffb306
discard, not ignore
igorlord Oct 29, 2018
67a815e
Fix the RETIRE_CONNECTION_ID frame type again
martinthomson Oct 24, 2018
4edf5b3
Don't recommend stateless reset
martinthomson Oct 25, 2018
4417e03
Add missing sections to document structure
martinthomson Oct 25, 2018
8f69ad1
Forward reference ECN verification
martinthomson Oct 25, 2018
7c4b04d
Take suggestion
martinthomson Oct 25, 2018
270243e
Use octets rather than bytes throughout
martinthomson Oct 25, 2018
0143d41
Use octets for units; size for packet sizes
martinthomson Oct 25, 2018
bbf55a5
Use bytes instead of octets throughout
martinthomson Oct 25, 2018
a4f4c9f
Reflow
martinthomson Oct 25, 2018
9d50417
Update draft-ietf-quic-recovery.md
ianswett Oct 28, 2018
3f330f6
clarify
ianswett Oct 28, 2018
f0b5080
unhypenate - the name of my new startup
martinthomson Oct 28, 2018
4578287
rewrap
martinthomson Oct 28, 2018
aa3ddc1
Reflow
martinthomson Oct 29, 2018
d59f429
Merge branch 'master' into vn-mkII
martinthomson Oct 29, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
32 changes: 16 additions & 16 deletions draft-ietf-quic-http.md
Expand Up @@ -182,7 +182,7 @@ includes an explicit port.

This document defines the "quic" parameter for Alt-Svc, which MAY be used to
provide version-negotiation hints to HTTP/QUIC clients. QUIC versions are
four-octet sequences with no additional constraints on format. Leading zeros
four-byte sequences with no additional constraints on format. Leading zeros
SHOULD be omitted for brevity.

Syntax:
Expand Down Expand Up @@ -303,9 +303,9 @@ or specify a value of zero for the QUIC transport parameter
## Unidirectional Streams

Unidirectional streams, in either direction, are used for a range of purposes.
The purpose is indicated by a stream type, which is sent as a single octet
header at the start of the stream. The format and structure of data that follows
this header is determined by the stream type.
The purpose is indicated by a stream type, which is sent as a single byte header
at the start of the stream. The format and structure of data that follows this
header is determined by the stream type.

~~~~~~~~~~ drawing
0 1 2 3 4 5 6 7
Expand Down Expand Up @@ -423,15 +423,15 @@ A frame includes the following fields:
: A payload, the semantics of which are determined by the Type field.

Each frame's payload MUST contain exactly the identified fields. A frame that
contains additional octets after the identified fields or a frame that
terminates before the end of the identified fields MUST be treated as a
connection error of type HTTP_MALFORMED_FRAME.
contains additional bytes after the identified fields or a frame that terminates
before the end of the identified fields MUST be treated as a connection error of
type HTTP_MALFORMED_FRAME.

## Frame Definitions {#frames}

### DATA {#frame-data}

DATA frames (type=0x0) convey arbitrary, variable-length sequences of octets
DATA frames (type=0x0) convey arbitrary, variable-length sequences of bytes
associated with an HTTP request or response payload.

DATA frames MUST be associated with an HTTP request or response. If a DATA
Expand Down Expand Up @@ -736,7 +736,7 @@ made in relation to every response in which server push might be needed without
duplicating pushes.

A server that uses the same Push ID in multiple PUSH_PROMISE frames MUST include
the same header fields each time. The octets of the header block MAY be
the same header fields each time. The bytes of the header block MAY be
different due to differing encoding, but the header fields and their values MUST
be identical. Note that ordering of header fields is significant. A client
MUST treat receipt of a PUSH_PROMISE with conflicting header field values for
Expand Down Expand Up @@ -921,11 +921,11 @@ head-of-line blocking. See that document for additional details.

An HTTP/QUIC implementation MAY impose a limit on the maximum size of the header
it will accept on an individual HTTP message. This limit is conveyed as a
number of octets in the `SETTINGS_MAX_HEADER_LIST_SIZE` parameter. The size of
a header list is calculated based on the uncompressed size of header fields,
including the length of the name and value in octets plus an overhead of 32
octets for each header field. Encountering a message header larger than this
value SHOULD be treated as a stream error of type `HTTP_EXCESSIVE_LOAD`.
number of bytes in the `SETTINGS_MAX_HEADER_LIST_SIZE` parameter. The size of a
header list is calculated based on the uncompressed size of header fields,
including the length of the name and value in bytes plus an overhead of 32 bytes
for each header field. Encountering a message header larger than this value
SHOULD be treated as a stream error of type `HTTP_EXCESSIVE_LOAD`.

### Request Cancellation

Expand Down Expand Up @@ -1343,8 +1343,8 @@ HTTP_GENERAL_PROTOCOL_ERROR (0x00FF):

HTTP_MALFORMED_FRAME (0x01XX):
: An error in a specific frame type. The frame type is included as the last
octet of the error code. For example, an error in a MAX_PUSH_ID frame would
be indicated with the code (0x10D).
byte of the error code. For example, an error in a MAX_PUSH_ID frame would be
indicated with the code (0x10D).


# Security Considerations
Expand Down
28 changes: 14 additions & 14 deletions draft-ietf-quic-invariants.md
Expand Up @@ -123,7 +123,7 @@ A QUIC packet is the content of the UDP datagrams exchanged by QUIC endpoints.
This document describes the contents of those datagrams.

QUIC defines two types of packet header: long and short. Packets with long
headers are identified by the most significant bit of the first octet being set;
headers are identified by the most significant bit of the first byte being set;
packets with a short header have that bit cleared.

Aside from the values described here, the payload of QUIC packets is
Expand Down Expand Up @@ -154,21 +154,21 @@ version-specific semantics are marked with an X.
~~~
{: #fig-long title="QUIC Long Header"}

A QUIC packet with a long header has the high bit of the first octet set to 1.
All other bits in that octet are version specific.
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.

The next four octets include a 32-bit Version field (see {{version}}).
The next four bytes include a 32-bit Version field (see {{version}}).

The next octet contains the length in octets of the two Connection IDs (see
The next byte contains the length in bytes of the two Connection IDs (see
{{connection-id}}) that follow. Each length is encoded as a 4-bit unsigned
integer. The length of the Destination Connection ID (DCIL) occupies the high
bits of the octet and the length of the Source Connection ID (SCIL) occupies
the low bits of the octet. An encoded length of 0 indicates that the connection
ID is also 0 octets in length. Non-zero encoded lengths are increased by 3 to
get the full length of the connection ID; the final value is therefore either 0
or between 4 and 18 octets in length (inclusive). For example, an octet with
the value 0xe0 describes a 17 octet Destination Connection ID and a zero octet
Source Connection ID.
bits of the byte and the length of the Source Connection ID (SCIL) occupies the
low bits of the byte. An encoded length of 0 indicates that the connection ID
is also 0 bytes in length. Non-zero encoded lengths are increased by 3 to get
the full length of the connection ID; the final value is therefore either 0 or
between 4 and 18 bytes in length (inclusive). For example, an byte with the
value 0xe0 describes a 17 byte Destination Connection ID and a zero byte Source
Connection ID.

The connection ID lengths are followed by two connection IDs. The connection
ID associated with the recipient of the packet (the Destination Connection ID)
Expand Down Expand Up @@ -196,7 +196,7 @@ version-specific semantics are marked with an X.
~~~~~
{: #fig-short title="QUIC Short Header"}

A QUIC packet with a short header has the high bit of the first octet set to 0.
A QUIC packet with a short header has the high bit of the first byte set to 0.

A QUIC packet with a short header includes a Destination Connection ID. The
short header does not include the Connection ID Lengths, Source Connection ID,
Expand Down Expand Up @@ -239,7 +239,7 @@ either does not understand or does not support might send a Version Negotiation
packet in response. Packets with a short header do not trigger version
negotiation.

A Version Negotiation packet sets the high bit of the first octet, and thus it
A Version Negotiation packet sets the high bit of the first byte, and thus it
conforms with the format of a packet with a long header as defined in
{{long-header}}. A Version Negotiation packet is identifiable as such by the
Version field, which is set to 0x00000000.
Expand Down
22 changes: 12 additions & 10 deletions draft-ietf-quic-qpack.md
Expand Up @@ -165,6 +165,7 @@ The dynamic table can contain duplicate entries (i.e., entries with the same
name and same value). Therefore, duplicate entries MUST NOT be treated as an
error by a decoder.


### Maximum Table Size

The encoder decides how to update the dynamic table and as such can control how
Expand All @@ -184,12 +185,13 @@ the dynamic table is less than or equal to the maximum size.
This mechanism can be used to completely clear entries from the dynamic table by
setting a maximum size of 0, which can subsequently be restored.


### Calculating Table Size

The size of the dynamic table is the sum of the size of its entries.

The size of an entry is the sum of its name's length in octets (as defined in
{{string-literals}}), its value's length in octets, and 32.
The size of an entry is the sum of its name's length in bytes (as defined in
{{string-literals}}), its value's length in bytes, and 32.

The size of an entry is calculated using the length of its name and value
without any Huffman encoding applied.
Expand Down Expand Up @@ -464,7 +466,7 @@ This string format includes optional Huffman encoding.

HPACK defines string literals to begin on a byte boundary. They begin with a
single flag (indicating whether the string is Huffman-coded), followed by the
Length encoded as a 7-bit prefix integer, and finally Length octets of data.
Length encoded as a 7-bit prefix integer, and finally Length bytes of data.
When Huffman encoding is enabled, the Huffman table from Appendix B of [RFC7541]
is used without modification.

Expand Down Expand Up @@ -507,7 +509,7 @@ string literal (see Section 5.2 of [RFC7541]).
+---+---+-----------------------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
| Value String (Length bytes) |
+-------------------------------+
~~~~~~~~~~
{: title="Insert Header Field -- Indexed Name"}
Expand All @@ -527,11 +529,11 @@ represented as an 8-bit prefix string literal.
+---+---+---+---+---+---+---+---+
| 0 | 1 | H | Name Length (5+) |
+---+---+---+-------------------+
| Name String (Length octets) |
| Name String (Length bytes) |
+---+---------------------------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
| Value String (Length bytes) |
+-------------------------------+
~~~~~~~~~~
{: title="Insert Header Field -- New Name"}
Expand Down Expand Up @@ -846,7 +848,7 @@ values that are not to be put at risk by compressing them (see Section 7.1 of
+---+---+---+---+---------------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
| Value String (Length bytes) |
+-------------------------------+
~~~~~~~~~~
{: title="Literal Header Field With Name Reference"}
Expand All @@ -870,7 +872,7 @@ the header field name is represented using the post-base index of that entry
+---+---+---+---+---+-----------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
| Value String (Length bytes) |
+-------------------------------+
~~~~~~~~~~
{: title="Literal Header Field With Post-Base Name Reference"}
Expand Down Expand Up @@ -899,11 +901,11 @@ represented as an 8-bit prefix string literal.
+---+---+---+---+---+---+---+---+
| 0 | 0 | 1 | N | H |NameLen(3+)|
+---+---+---+---+---+-----------+
| Name String (Length octets) |
| Name String (Length bytes) |
+---+---------------------------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
| Value String (Length bytes) |
+-------------------------------+
~~~~~~~~~~
{: title="Literal Header Field Without Name Reference"}
Expand Down