From abd97ecdc35782cc5bc0de38c85cdae3e1e45cad Mon Sep 17 00:00:00 2001 From: ianswett Date: Sun, 2 Apr 2017 08:29:14 -0400 Subject: [PATCH 1/2] Reduce the number of offset lengths in a stream frame --- draft-ietf-quic-transport.md | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index 33eab6d1a2..e6ed387d7b 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -788,8 +788,8 @@ explained in more detail as they are referenced later in the document. | 0x04 | WINDOW_UPDATE | {{frame-window-update}} | | 0x05 | BLOCKED | {{frame-blocked}} | | 0x07 | PING | {{frame-ping}} | -| 0x40 - 0x7f | ACK | {{frame-ack}} | -| 0x80 - 0xff | STREAM | {{frame-stream}} | +| 0xa0 - 0x7f | ACK | {{frame-ack}} | +| 0xc0 - 0xff | STREAM | {{frame-stream}} | {: #frame-types title="Frame Types"} # Life of a Connection @@ -1292,10 +1292,10 @@ subsequent sections. ## STREAM Frame {#frame-stream} STREAM frames implicitly create a stream and carry stream data. The type byte -for a STREAM frame contains embedded flags, and is formatted as `1FDOOOSS`. +for a STREAM frame contains embedded flags, and is formatted as `11FDOOSS`. These bits are parsed as follows: -* The leftmost bit must be set to 1, indicating that this is a STREAM frame. +* The first two bit must be set to 11, indicating that this is a STREAM frame. * `F` is the FIN bit, which is used for stream termination. @@ -1306,11 +1306,11 @@ These bits are parsed as follows: The option to omit the length should only be used when the packet is a "full-sized" packet, to avoid the risk of corruption via padding. -* The `OOO` bits encode the length of the Offset header field as 0, 16, 24, - 32, 40, 48, 56, or 64 bits long. +* The `OO` bits encode the length of the Offset header field as 0, 16, 32, + or 64 bits long. * The `SS` bits encode the length of the Stream ID header field as 8, 16, 24, - or 32 bits. (DISCUSS: Consider making this 8, 16, 32, 64.) + or 32 bits. A STREAM frame is shown below. @@ -1322,7 +1322,7 @@ A STREAM frame is shown below. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Stream ID (8/16/24/32) ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Offset (0/16/24/32/40/48/56/64) ... +| Offset (0/16/32/64) ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Stream Data (*) ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -1344,9 +1344,10 @@ Stream ID: Offset: : A variable-sized unsigned number specifying the byte offset in the stream for - the data in this STREAM frame. The first byte in the stream has an offset of - 0. The largest offset delivered on a stream - the sum of the re-constructed - offset and data length - MUST be less than 2^64. + the data in this STREAM frame. When the offset length is 0, the offset is 0. + The first byte in the stream has an offset of 0. The largest offset delivered + on a stream - the sum of the re-constructed offset and data length - MUST be + less than 2^64. Stream Data: @@ -1407,15 +1408,13 @@ entropy on demand, which should be adequate protection against most opportunistic acknowledgement attacks. The type byte for a ACK frame contains embedded flags, and is formatted as -`01NULLMM`. These bits are parsed as follows: +`101NLLMM`. These bits are parsed as follows: -* The first two bits must be set to 01 indicating that this is an ACK frame. +* The first two bits must be set to 101 indicating that this is an ACK frame. * The `N` bit indicates whether the frame has more than 1 range of acknowledged packets (i.e., whether the ACK Block Section contains a Num Blocks field). -* The `U` bit is unused and MUST be set to zero. - * The two `LL` bits encode the length of the Largest Acknowledged field as 1, 2, 4, or 6 bytes long. From ba217ff6139d3de9b5c7afa6906a9ea83f9de19d Mon Sep 17 00:00:00 2001 From: ianswett Date: Thu, 13 Apr 2017 20:24:03 -0400 Subject: [PATCH 2/2] Update draft-ietf-quic-transport.md --- draft-ietf-quic-transport.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index e6ed387d7b..4fdf320a42 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -1295,7 +1295,7 @@ STREAM frames implicitly create a stream and carry stream data. The type byte for a STREAM frame contains embedded flags, and is formatted as `11FDOOSS`. These bits are parsed as follows: -* The first two bit must be set to 11, indicating that this is a STREAM frame. +* The first two bits must be set to 11, indicating that this is a STREAM frame. * `F` is the FIN bit, which is used for stream termination. @@ -1410,7 +1410,7 @@ opportunistic acknowledgement attacks. The type byte for a ACK frame contains embedded flags, and is formatted as `101NLLMM`. These bits are parsed as follows: -* The first two bits must be set to 101 indicating that this is an ACK frame. +* The first three bits must be set to 101 indicating that this is an ACK frame. * The `N` bit indicates whether the frame has more than 1 range of acknowledged packets (i.e., whether the ACK Block Section contains a Num Blocks field).