From 0276c89e5f4f9d7cae4e59d46e49559cdd9847a3 Mon Sep 17 00:00:00 2001 From: Martin Thomson Date: Thu, 30 Nov 2017 08:06:30 +1100 Subject: [PATCH 1/4] Make initial_max_stream_id_* optional and default to zero --- draft-ietf-quic-transport.md | 42 ++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index 56fd577317..18a6d26901 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -1128,17 +1128,6 @@ initial_max_data (0x0001): sending a MAX_DATA ({{frame-max-data}}) for the connection immediately after completing the handshake. -initial_max_stream_id_bidi (0x0002): - -: The initial maximum stream ID parameter contains the initial maximum stream - number the peer may initiate for bidirectional streams, encoded as an unsigned - 32-bit integer. This value MUST be a valid bidirectional stream ID for a - peer-initiated stream (that is, the two least significant bits are set to 0 by - a server and to 1 by a client). If an invalid value is provided, the - recipient MUST generate a connection error of type TRANSPORT_PARAMETER_ERROR. - This is equivalent to sending a MAX_STREAM_ID ({{frame-max-stream-id}}) - immediately after completing the handshake. - idle_timeout (0x0003): : The idle timeout is a value in seconds that is encoded as an unsigned 16-bit @@ -1151,6 +1140,27 @@ stateless_reset_token (0x0006): : The Stateless Reset Token is used in verifying a stateless reset, see {{stateless-reset}}. This parameter is a sequence of 16 octets. +A client MUST NOT include a stateless reset token. A server MUST treat receipt +of a stateless_reset_token transport parameter as a connection error of type +TRANSPORT_PARAMETER_ERROR. + +An endpoint MAY use the following transport parameters: + +initial_max_stream_id_bidi (0x0002): + +: The initial maximum stream ID parameter contains the initial maximum stream + number the peer may initiate for bidirectional streams, encoded as an unsigned + 32-bit integer. This value MUST be a valid bidirectional stream ID for a + peer-initiated stream (that is, the two least significant bits are set to 0 by + a server and to 1 by a client). If an invalid value is provided, the + recipient MUST generate a connection error of type TRANSPORT_PARAMETER_ERROR. + This is equivalent to sending a MAX_STREAM_ID ({{frame-max-stream-id}}) + immediately after completing the handshake. The maximum stream ID is set to 0 + if this parameter is absent, preventing the creation of new unidirectional + streams until a MAX_STREAM_ID frame is sent. Note that a default value of 0 + does not prevent the the cryptographic handshake stream (that is, stream 0) to + be used. + initial_max_stream_id_uni (0x0008): : The initial maximum stream ID parameter contains the initial maximum stream @@ -1160,13 +1170,9 @@ initial_max_stream_id_uni (0x0008): and to 3 by a client). If an invalid value is provided, the recipient MUST generate a connection error of type TRANSPORT_PARAMETER_ERROR. This is equivalent to sending a MAX_STREAM_ID ({{frame-max-stream-id}}) immediately - after completing the handshake. - -A client MUST NOT include a stateless reset token. A server MUST treat receipt -of a stateless_reset_token transport parameter as a connection error of type -TRANSPORT_PARAMETER_ERROR. - -An endpoint MAY use the following transport parameters: + after completing the handshake. The maximum stream ID is set to 0 if this + parameter is absent, preventing the creation of new unidirectional streams + until a MAX_STREAM_ID frame is sent. omit_connection_id (0x0004): From 654f8e542a61b367c205f02de0e21c73d822bc2f Mon Sep 17 00:00:00 2001 From: Martin Thomson Date: Thu, 30 Nov 2017 08:14:17 +1100 Subject: [PATCH 2/4] Warn against silly values for 0-RTT --- draft-ietf-quic-transport.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index 18a6d26901..2dcdf22f08 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -1223,6 +1223,11 @@ initial_max_stream_data that are smaller than the remembered value of those parameters. Similarly, a server MUST NOT reduce the value of initial_max_stream_id_bidi or initial_max_stream_id_uni. +Omitting or setting a zero value for certain transport parameters can result in +0-RTT data being enabled, but not usable. The following transport parameters +SHOULD be set to non-zero values for 0-RTT: initial_max_stream_id_bidi, +initial_max_stream_id_uni, initial_max_data, initial_max_stream_data. + A server MUST reject 0-RTT data or even abort a handshake if the implied values for transport parameters cannot be supported. From 4dfd06b56e41074bfab53d7dc5ce51fab82b2e30 Mon Sep 17 00:00:00 2001 From: Martin Thomson Date: Thu, 30 Nov 2017 11:29:05 +1100 Subject: [PATCH 3/4] Correct far too many nits --- draft-ietf-quic-transport.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index 2dcdf22f08..f14008e991 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -1154,12 +1154,12 @@ initial_max_stream_id_bidi (0x0002): peer-initiated stream (that is, the two least significant bits are set to 0 by a server and to 1 by a client). If an invalid value is provided, the recipient MUST generate a connection error of type TRANSPORT_PARAMETER_ERROR. - This is equivalent to sending a MAX_STREAM_ID ({{frame-max-stream-id}}) - immediately after completing the handshake. The maximum stream ID is set to 0 - if this parameter is absent, preventing the creation of new unidirectional - streams until a MAX_STREAM_ID frame is sent. Note that a default value of 0 - does not prevent the the cryptographic handshake stream (that is, stream 0) to - be used. + Setting this parameter is equivalent to sending a MAX_STREAM_ID + ({{frame-max-stream-id}}) immediately after completing the handshake. The + maximum bidirectional stream ID is set to 0 if this parameter is absent, + preventing the creation of new bidirectional streams until a MAX_STREAM_ID + frame is sent. Note that a default value of 0 does not prevent the + cryptographic handshake stream (that is, stream 0) to be used. initial_max_stream_id_uni (0x0008): @@ -1168,11 +1168,11 @@ initial_max_stream_id_uni (0x0008): unsigned 32-bit integer. The value MUST be a valid unidirectional ID for the recipient (that is, the two least significant bits are set to 2 by a server and to 3 by a client). If an invalid value is provided, the recipient MUST - generate a connection error of type TRANSPORT_PARAMETER_ERROR. This is - equivalent to sending a MAX_STREAM_ID ({{frame-max-stream-id}}) immediately - after completing the handshake. The maximum stream ID is set to 0 if this - parameter is absent, preventing the creation of new unidirectional streams - until a MAX_STREAM_ID frame is sent. + generate a connection error of type TRANSPORT_PARAMETER_ERROR. Setting this + parameter is equivalent to sending a MAX_STREAM_ID ({{frame-max-stream-id}}) + immediately after completing the handshake. The maximum unidirectional stream + ID is set to 0 if this parameter is absent, preventing the creation of new + unidirectional streams until a MAX_STREAM_ID frame is sent. omit_connection_id (0x0004): From 43609515e3c9cd7184d24cc889d68a20d5fc780a Mon Sep 17 00:00:00 2001 From: Martin Thomson Date: Thu, 30 Nov 2017 12:00:52 +1100 Subject: [PATCH 4/4] Grammar booboo --- draft-ietf-quic-transport.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index f14008e991..55d1a49343 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -1159,7 +1159,7 @@ initial_max_stream_id_bidi (0x0002): maximum bidirectional stream ID is set to 0 if this parameter is absent, preventing the creation of new bidirectional streams until a MAX_STREAM_ID frame is sent. Note that a default value of 0 does not prevent the - cryptographic handshake stream (that is, stream 0) to be used. + cryptographic handshake stream (that is, stream 0) from being used. initial_max_stream_id_uni (0x0008):