From 98961b029e7ea46d2e4068dce4fd9b27d5e41d4c Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 29 Aug 2018 20:18:55 -0400 Subject: [PATCH 1/3] Add max_bytes_before_ack to transport Possibly it needs to be mentioned in recovery as well? Fixed #1428 --- draft-ietf-quic-transport.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index 253c718d6c..5cf69a551c 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -1554,6 +1554,7 @@ language from Section 3 of {{!TLS13=RFC8446}}. disable_migration(9), initial_max_stream_data_bidi_remote(10), initial_max_stream_data_uni(11), + max_bytes_before_ack(12), (65535) } TransportParameterId; @@ -1670,6 +1671,13 @@ disable_migration (0x0009): NOT send any packets, including probing packets ({{probing}}), from a local address other than that used to perform the handshake. This parameter is a zero-length value. + +max_bytes_before_ack (0x000c): + +: An unsigned 32-bit integer that indicates the maximum number of bytes received + before an ACK frame should be sent. The peer sending this value indicates + to the receiver the value it should use. If this value is absent, the + receiver may use any conformant acknowledgement algorithm. Either peer MAY advertise an initial value for the flow control on each type of stream on which they might receive data. Each of the following transport @@ -3425,6 +3433,10 @@ immediately or when a delayed ack timer expires. The delayed ack timer MUST NOT delay an ACK for longer than an RTT, which ensures an ACK frame is sent at least once per RTT if new packets needing acknowledgement were received. +If the max_bytes_before_ack transport parameter has been received, the +receiver SHOULD send an ACK frame immediately once that many octets of packets +containing frames besides ACK or PADDING have been received. + To limit ACK blocks to those that have not yet been received by the sender, the receiver SHOULD track which ACK frames have been acknowledged by its peer. Once an ACK frame has been acknowledged, the packets it acknowledges SHOULD NOT be From 110e7ec99fd76456881310634a5d2a465f241b33 Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 29 Aug 2018 20:52:21 -0400 Subject: [PATCH 2/3] Update draft-ietf-quic-transport.md --- 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 5cf69a551c..bae1223aaf 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -1671,7 +1671,7 @@ disable_migration (0x0009): NOT send any packets, including probing packets ({{probing}}), from a local address other than that used to perform the handshake. This parameter is a zero-length value. - + max_bytes_before_ack (0x000c): : An unsigned 32-bit integer that indicates the maximum number of bytes received From 6978efe54b6c333bd80bab7997425dd48e4cef5c Mon Sep 17 00:00:00 2001 From: ianswett Date: Thu, 30 Aug 2018 08:20:19 -0400 Subject: [PATCH 3/3] Update draft-ietf-quic-transport.md --- draft-ietf-quic-transport.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index bae1223aaf..402a788d79 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -3434,8 +3434,11 @@ NOT delay an ACK for longer than an RTT, which ensures an ACK frame is sent at least once per RTT if new packets needing acknowledgement were received. If the max_bytes_before_ack transport parameter has been received, the -receiver SHOULD send an ACK frame immediately once that many octets of packets -containing frames besides ACK or PADDING have been received. +receiver SHOULD send an ACK frame immediately when at least that many octets +of packets containing frames besides ACK or PADDING have been received since +sending the previous ACK frame. If a receiver sends ACK frames less frequently, +it risks causing the sender to send more slowly, which may lower the delivery +rate at the receiver. To limit ACK blocks to those that have not yet been received by the sender, the receiver SHOULD track which ACK frames have been acknowledged by its peer. Once