Re: Connection ID lengths 1, 2 and 3

"Deval, Manasi" <manasi.deval@intel.com> Sun, 15 July 2018 17:04 UTC

Return-Path: <manasi.deval@intel.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9CC1A1294D0 for <quic@ietfa.amsl.com>; Sun, 15 Jul 2018 10:04:52 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.9
X-Spam-Level:
X-Spam-Status: No, score=-6.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id K6w0TRhzDhXC for <quic@ietfa.amsl.com>; Sun, 15 Jul 2018 10:04:50 -0700 (PDT)
Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 1064B130DFA for <quic@ietf.org>; Sun, 15 Jul 2018 10:04:50 -0700 (PDT)
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Jul 2018 10:04:49 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos; i="5.51,357,1526367600"; d="scan'208,217"; a="74967269"
Received: from orsmsx108.amr.corp.intel.com ([10.22.240.6]) by orsmga002.jf.intel.com with ESMTP; 15 Jul 2018 10:04:26 -0700
Received: from orsmsx152.amr.corp.intel.com (10.22.226.39) by ORSMSX108.amr.corp.intel.com (10.22.240.6) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 15 Jul 2018 10:04:26 -0700
Received: from orsmsx111.amr.corp.intel.com ([169.254.12.141]) by ORSMSX152.amr.corp.intel.com ([169.254.8.83]) with mapi id 14.03.0319.002; Sun, 15 Jul 2018 10:04:26 -0700
From: "Deval, Manasi" <manasi.deval@intel.com>
To: Marten Seemann <martenseemann@gmail.com>
CC: Ian Swett <ianswett@google.com>, IETF QUIC WG <quic@ietf.org>, Mikkel Fahnøe Jørgensen <mikkelfj@gmail.com>
Subject: Re: Connection ID lengths 1, 2 and 3
Thread-Topic: Connection ID lengths 1, 2 and 3
Thread-Index: AQHUEsvAi91oX8DVaUqbcldKc5Rk06R97QgAgBGLlvCAAOSi4IAAh0AA//+rWH+AAHgzgP//jiJF
Date: Sun, 15 Jul 2018 17:04:25 +0000
Message-ID: <4F5BCC2E-4DD0-403F-954A-FB79847E218B@intel.com>
References: <1F436ED13A22A246A59CA374CBC543998B86DF5E@ORSMSX111.amr.corp.intel.com> <CAKcm_gPmp=5pcM-UFWWU4UvNuuCOwbcj7s1=Qb4GW3cGhF3Bbw@mail.gmail.com> <0EA7393D-B7EC-4755-B13E-5177E24AA57A@intel.com>, <CAOYVs2q5C370LN4X-xJ4NuMxjt5ALsz4vFwczj6N2j5skvuFKw@mail.gmail.com>
In-Reply-To: <CAOYVs2q5C370LN4X-xJ4NuMxjt5ALsz4vFwczj6N2j5skvuFKw@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
Content-Type: multipart/alternative; boundary="_000_4F5BCC2E4DD0403F954AFB79847E218Bintelcom_"
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/Z-bftJ5ws-fEby5sDrh5sOy7YSQ>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.27
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 15 Jul 2018 17:04:53 -0000

There is a 32bit version number that precedes the length field. Until we have a thousand versions, we are always sending 3 extra bytes on the wire.

Thanks,
Manasi

On Jul 15, 2018, at 12:52 PM, Marten  <martenseemann@gmail.com<mailto:martenseemann@gmail.com>> wrote:

I don't think we should reduce the number of sizes available. Sending bytes on the wire is orders of magnitude more expensive than performing a simple transformation to a parsed value. I'd prefer if we could discuss this separately, since this is quite the opposite of what I was originally proposing.

To reiterate my argument, changing the invariants such that the values 1, 2 and 3 can be used would be a big benefit for p2p applications, since they would be able to use super-short connection IDs. Since this is a change that requires a change to the invariants, we need to make this decision very soon, if we want to enable this use case of QUIC.

On Sun, Jul 15, 2018 at 12:41 PM Deval, Manasi <manasi.deval@intel.com<mailto:manasi.deval@intel.com>> wrote:
I would still prefer if we can reduce the number of sizes supported.

Could a scheme where we support only 5 cids be used? Use a 3 bit size , shift left by 2 and not use the last 2 sizes of 24 and 28.


Thanks,
Manasi



On Jul 15, 2018, at 10:45 AM, Ian Swett <ianswett@google.com<mailto:ianswett@google.com>> wrote:

If one uses existing fast crypto primitives to encode connection ID, then 16 bytes is a natural size, and there was interest in having an extra byte for metadata(key rotation/length signaling/etc).

Unfortunately, that leaves us with a gap somewhere, and a gap at the beginning seemed the most natural at the time.

On Sun, Jul 15, 2018 at 10:35 AM Deval, Manasi <manasi.deval@intel.com<mailto:manasi.deval@intel.com>> wrote:
Another issue I noticed with the size of connection id was with regards to parsing the header field. The current steps are:

•        Parse DCid length,

•        Add 3,

•        Parse DCid length

•        Add 3,

•        Read DCID

•        Read SCID.

I really appreciate the fixed size length fields so we can know both destination and source Cid lengths in parallel. Implementing this in hardware has the following challenges though:

a.      There are 12 unique length types for each of the CiDs. This means either more stages of serial processing, which would be slower. Or it means more logic for parallel processing.

b.      In addition to this, the arithmetic logic to add 3 is a little more specialized than a logical operation, e..g.shift left.

Therefore, I would like to understand the basis for having 12 different lengths and if there is a chance to simplify this logic, we can have a 3 bit length and shift left 1, so we have lengths of 0,2,4… 14. Would the loss of longer CiD values from 15 to 18 be an issue?

Thanks,
Manasi

From: QUIC [mailto:quic-bounces@ietf.org<mailto:quic-bounces@ietf.org>] On Behalf Of Mikkel Fahnøe Jørgensen
Sent: Tuesday, July 03, 2018 6:06 AM
To: QUIC WG <quic@ietf.org<mailto:quic@ietf.org>>; Marten Seemann <martenseemann@gmail.com<mailto:martenseemann@gmail.com>>
Subject: Re: Connection ID lengths 1, 2 and 3

That is correct. Especially in low-power sensor mesh networks.



On 3 July 2018 at 14.45.30, Marten Seemann (martenseemann@gmail.com<mailto:martenseemann@gmail.com>) wrote:
First of all, I realise that I'm bringing this up late in the process, and maybe too late, since this would require a change to the invariants.

The connection IDs can be either 0 bytes or anything between 4 and 18 bytes (inclusive). Lengths of 1, 2 and 3 bytes are not possible.
For p2p applications, and for server deployments that are not doing connection ID based load balancing, it would be interesting to use shorter connection IDs. One might imagine that a peer encodes the length of the connection ID into the first few bits, and then starts using 1 byte connection IDs first, and successively moves to longer lengths only when handling more connections. A p2p host handling several thousand simultaneous connections (which will be enough for many p2p protocols) would never have to use anything longer than 2 byte connection IDs.

In the connection ID length field in the Long Header, we only have to 4 bit to encode a range of 19 values (we want 0 byte connection IDs, and we want to support 18 byte connection IDs), so *some* values have to be left out. However, leaving out 1, 2 and 3 seems a bit unfortunate, as there will be more use cases for these values than e.g. for 13, 14 and 15 bytes.