Subject: [quicwg/base-drafts] Latency Spin Bit, 2018 edition (#1046)

From: Brian Trammell <[email-masked]>
Date: Tue, 09 Jan 2018 07:32:46 -0800

This PR adds a latency spin bit, taking text from [draft-trammell-quic-spin](https://tools.ietf.org/html/draft-trammell-quic-spin). It updates and replaces #609, and addresses #631. Information on usage of the Latency Spin Bit will appear in a separate PR on the manageability draft.

This version of the PR represents the minimum change. It does not grease the spin bit; spin bit greasing is discussed in [Section 6 of draft-trammell-quic-spin](https://tools.ietf.org/html/draft-trammell-quic-spin-01#section-6). It neither proposes a two-bit spin nor a spin-valid bit, the properties of which are explored in [Section 3.3 of draft-trammell-quic-spin](https://tools.ietf.org/html/draft-trammell-quic-spin-01#section-3.3).
You can view, comment on, or merge this pull request online at:

  https://github.com/quicwg/base-drafts/pull/1046

-- Commit Summary --

  * add spin bit from draft-trammell-quic-spin

-- File Changes --

    M draft-ietf-quic-transport.md (38)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/1046.patch
https://github.com/quicwg/base-drafts/pull/1046.diff

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046

---

From: ianswett <[email-masked]>
Date: Tue, 09 Jan 2018 13:45:48 -0800

ianswett commented on this pull request.

A few small suggestions, but thanks for the updated PR.

> @@ -788,6 +793,29 @@ Implementations MUST assume that an unsupported version uses an unknown packet
 format. All other fields MUST be ignored when processing a packet that contains
 an unsupported version.
 
+## The Latency Spin Bit {#spin-bit}
+
+The latency spin bit enables latency monitoring from observation points on the
+network path. Each endpoint, client and server, maintains a spin value, 0 or
+1, for each QUIC connection, and sets the spin bit on packets it sends for
+that connection to the appropriate value. It also maintains the highest packet
+number seen from its peer on the connection. The value is then determined at
+each endpoint as follows:
+
+* The server initializes its spin value to 0. When it receives a packet from
+  the client, if that packet has a short header and if it increments the

increments -> increases, since packets may be lost or reordered.

> @@ -788,6 +793,29 @@ Implementations MUST assume that an unsupported version uses an unknown packet
 format. All other fields MUST be ignored when processing a packet that contains
 an unsupported version.
 
+## The Latency Spin Bit {#spin-bit}
+
+The latency spin bit enables latency monitoring from observation points on the
+network path. Each endpoint, client and server, maintains a spin value, 0 or
+1, for each QUIC connection, and sets the spin bit on packets it sends for
+that connection to the appropriate value. It also maintains the highest packet
+number seen from its peer on the connection. The value is then determined at
+each endpoint as follows:
+
+* The server initializes its spin value to 0. When it receives a packet from

I would probably start with the client, since it initiates the process.  Also, it seems it doesn't matter what the server initializes to, since it always echoes the received client's value, so I would omit this sentence.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046#pullrequestreview-87667969

---

From: MikkelFJ <[email-masked]>
Date: Tue, 09 Jan 2018 21:48:51 +0000 (UTC)

It might be better to have the server flip the spin bit because I could imagine a lot of client only libraries that simply ignores or fail to test the spin bit, whereas merely copying it has a greater chance of success.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046#issuecomment-356425162

---

From: Brian Trammell <[email-masked]>
Date: Wed, 10 Jan 2018 09:48:23 +0000 (UTC)

britram commented on this pull request.

Will change the order. 

However, since spinning only happens on the short header, I think it needs to be specified like this to handle the case that the server starts sending short header packets before the client does (e.g., because it's done sending all the non-ACK frames it needs to in the 0RTT part of the connection)

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046#discussion_r160630438

---

From: Brian Trammell <[email-masked]>
Date: Wed, 10 Jan 2018 01:48:28 -0800

will fix, thanks!

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046#discussion_r160630462

---

From: Brian Trammell <[email-masked]>
Date: Wed, 10 Jan 2018 09:51:32 +0000 (UTC)

re client vs server flip: it's worth noting that the endpoint responsible for flipping the bit has slightly more de facto ability to decide not to participate. For that reason, I'd leave the flip on the client side, as it is.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046#issuecomment-356554072

---

From: Brian Trammell <[email-masked]>
Date: Wed, 10 Jan 2018 09:55:24 +0000 (UTC)

@britram pushed 1 commit.

2437a93  address Ian's comments; fix ref

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046/files/4e7295168fc906a9debf34f05ef36df50576fe76..2437a93b2c0b779648a15e3cf3c3026034a6f0dd

---

From: ianswett <[email-masked]>
Date: Wed, 10 Jan 2018 13:32:26 +0000 (UTC)

Thanks, looks good modulo the endless conversation about whether we should do this.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046#pullrequestreview-87834051

---

From: Brian Trammell <[email-masked]>
Date: Wed, 10 Jan 2018 15:44:13 +0000 (UTC)

758c0dc  grr trailing whitespace

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046/files/2437a93b2c0b779648a15e3cf3c3026034a6f0dd..758c0dc8136ac28f5d1f123b11ddda9de92bde49

---

From: Brian Trammell <[email-masked]>
Date: Wed, 10 Jan 2018 16:50:33 +0000 (UTC)

007a59d  stateless resets have a spin bit, too

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/1046/files/758c0dc8136ac28f5d1f123b11ddda9de92bde49..007a59d12fd5e49101bff72770bfde1a87599812