Subject: [quicwg/base-drafts] Make transport parameters varint (#3087)

From: David Schinazi <[email-masked]>
Date: Fri, 11 Oct 2019 14:07:25 -0700

This PR moves transport parameters away from TLS presentation language to instead use QUIC notation. This allows us to encode small integer transport parameters as 3 bytes instead of 5, but the main goal is to make the identifiers a 62-bit space which will allow uncoordinated experiments without risking collisions.

This fixes #3020.
You can view, comment on, or merge this pull request online at:

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

-- Commit Summary --

  * Make transport parameters varint

-- File Changes --

    M draft-ietf-quic-tls.md (6)
    M draft-ietf-quic-transport.md (182)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/3087.patch
https://github.com/quicwg/base-drafts/pull/3087.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/3087

---

From: ekr <[email-masked]>
Date: Fri, 11 Oct 2019 14:55:32 -0700

This doesn't seem to have consensus, based on the issue discussion

-- 
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/3087#issuecomment-541237225

---

From: David Schinazi <[email-masked]>
Date: Fri, 11 Oct 2019 16:06:32 -0700

Agreed, the issue has not reached consensus yet. I wrote this PR to better describe what I was trying to change in the issue.

-- 
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/3087#issuecomment-541251834

---

From: Marten Seemann <[email-masked]>
Date: Sun, 13 Oct 2019 04:44:38 -0700

marten-seemann commented on this pull request.

Thanks for this PR! This clarifies what you're suggesting on the issue.

> @@ -4361,42 +4361,43 @@ connection.
 
 # Transport Parameter Encoding {#transport-parameter-encoding}
 
-The format of the transport parameters is the TransportParameters struct from
-{{figure-transport-parameters}}.  This is described using the presentation
-language from Section 3 of {{!TLS13=RFC8446}}.
+The `extension_data` field of the quic_transport_parameters extension defined in
+{{QUIC-TLS}} contains the QUIC transport parameters. They are encoded as a
+sequence of transport parameters, as shown in {{transport-parameter-sequence}}:

We could consider making this an ordered list. This would simplify the check that the peer didn't send any duplicate transport parameters.

-- 
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/3087#pullrequestreview-301045128

---

From: David Schinazi <[email-masked]>
Date: Sun, 13 Oct 2019 17:51:27 -0700

DavidSchinazi commented on this pull request.

 

I'm in favor of that idea (especially because it reduces fingerprinting surface), but I'd like it to be a separate issue/PR for now.

-- 
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/3087#discussion_r334307512

---

From: Mike Bishop <[email-masked]>
Date: Mon, 14 Oct 2019 12:50:06 -0700

MikeBishop commented on this pull request.

> -   struct {
-     opaque ipv4Address[4];
-     uint16 ipv4Port;
-     opaque ipv6Address[16];
-     uint16 ipv6Port;
-     opaque connectionId<0..20>;
-     opaque statelessResetToken[16];
-   } PreferredAddress;
+ 0                   1                   2                   3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|                       IPv4 Address (32)                       |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|         IPv4 Port (16)        |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|                     IPv6 Address (128)                      ...

This field isn't variable-length, so it shouldn't have the `...`.

> + 0                   1                   2                   3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|                       IPv4 Address (32)                       |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|         IPv4 Port (16)        |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|                     IPv6 Address (128)                      ...
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|         IPv6 Port (16)        |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| CID Length (8)|
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|                      Connection ID (*)                      ...
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|                 Stateless Reset Token (128)                 ...

Likewise.

-- 
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/3087#pullrequestreview-301506469

---

From: Martin Thomson <[email-masked]>
Date: Tue, 15 Oct 2019 16:19:06 -0700

martinthomson commented on this pull request.

This seems pretty clear, though like others I'm not convinced of the necessity.

-     opaque ipv4Address[4];
-     uint16 ipv4Port;

Rather than this taking two lines, would you have this take 5 lines, or 8?

> -| 0x000c | disable_active_migration    | {{transport-parameter-definitions}} |
-| 0x000d | preferred_address           | {{transport-parameter-definitions}} |
-| 0x000e | active_connection_id_limit  | {{transport-parameter-definitions}} |
+| Value | Parameter Name              | Specification                       |
+|:------|:----------------------------|:------------------------------------|
+|  0x0  | original_connection_id      | {{transport-parameter-definitions}} |
+|  0x1  | idle_timeout                | {{transport-parameter-definitions}} |
+|  0x2  | stateless_reset_token       | {{transport-parameter-definitions}} |
+|  0x3  | max_packet_size             | {{transport-parameter-definitions}} |
+|  0x4  | initial_max_data            | {{transport-parameter-definitions}} |
+|  0x5  | initial_max_stream_data_bidi_local | {{transport-parameter-definitions}} |
+|  0x6  | initial_max_stream_data_bidi_remote | {{transport-parameter-definitions}} |
+|  0x7  | initial_max_stream_data_uni | {{transport-parameter-definitions}} |
+|  0x8  | initial_max_streams_bidi    | {{transport-parameter-definitions}} |
+|  0x9  | initial_max_streams_uni     | {{transport-parameter-definitions}} |
+|  0xA  | ack_delay_exponent          | {{transport-parameter-definitions}} |

HeX IS LOWeRCaSe

```suggestion
|  0xa  | ack_delay_exponent          | {{transport-parameter-definitions}} |
```

-- 
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/3087#pullrequestreview-302248399

---

From: David Schinazi <[email-masked]>
Date: Thu, 17 Oct 2019 09:44:36 -0700

Closed #3087.

-- 
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/3087#event-2722009530

---

From: David Schinazi <[email-masked]>
Date: Thu, 17 Oct 2019 09:44:55 -0700

Closing this as it was replaced by #3108 and #3109.

-- 
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/3087#issuecomment-543262234