Re: More on demultiplexing

Ian Swett <ianswett@google.com> Thu, 07 December 2017 21:48 UTC

Return-Path: <ianswett@google.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 0679D127286 for <quic@ietfa.amsl.com>; Thu, 7 Dec 2017 13:48:49 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.699
X-Spam-Level:
X-Spam-Status: No, score=-2.699 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.com
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 xysUxd1Kg0Jl for <quic@ietfa.amsl.com>; Thu, 7 Dec 2017 13:48:46 -0800 (PST)
Received: from mail-it0-x236.google.com (mail-it0-x236.google.com [IPv6:2607:f8b0:4001:c0b::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 71F80126CF9 for <quic@ietf.org>; Thu, 7 Dec 2017 13:48:46 -0800 (PST)
Received: by mail-it0-x236.google.com with SMTP id b5so533681itc.3 for <quic@ietf.org>; Thu, 07 Dec 2017 13:48:46 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=TPb3wGl/54798sdmFEyLu397OeIdOsrLjn2siCnf1u0=; b=PV4JDNfAglx9LtBb8QmZnSKK+/Ba3CQqn3wUP40Am+X7B4t9Kcu1yzuyrO57vtWtra BB6OfXmmeZyPalgvbTEUkK2Zqe7vDd3/01mZ1rD2zvSQOAoxm00ZNHVsUAvSiypDcSx8 ERFt5njxxCkFa3YSz+Q7w9+ZxPMPtQ+7xzn9sd+PCLhBSwZkpCgmugiJfxIoJdvOmMAe vmDiEQa6rSljG+nKYqoivOEfQLgLLBqUL5F8AsndDbxdbbaAU0z771FRNKCK7z+s6RoV oMt5BlK+YKHV3NhIPKBbZJINQtF053KbLA5FoR4WFIpHknb4IjCAdsxudgJVALGAkAhR vXlQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=TPb3wGl/54798sdmFEyLu397OeIdOsrLjn2siCnf1u0=; b=UtZWyZaZrB0ietbujd6PIb5bTdMvI/GawG2LmWHJewFJ+Zem/MAU6QRYpGgzymeWqh uMnZINUmvsvIJHvJWixmIK9IHpylqJf6VKAf8xzDQ5fkkfWrwo7kheDFOJQL2Awa4C60 JCw2ZsVD9f2oxBAQcb0QB86PopIL99w15v6SC02jhGXbJsSoKkmJz32Cr7u5ByemE5p3 3iIKaUf5kV76SePmNpy/+vnZ6PDNLwZYe+Es1O3uI20mtcCw9FWfsePsH4t3lzPJBRaj VUeO3DdoSnI9Wncnud79KB4uwF1I6DAUuI/SRn++rQMAYnGR0/Zt/tHMeaZTBTHv9rYh fDkg==
X-Gm-Message-State: AKGB3mIcCWw1Re4UVUBagkHxrEjMiSsAAo2l9LmvhFufu3LyRcacJHCA tMsa5p2SpQHms/p6+mtssnls/eJcrbxXW/Pfff9/dw==
X-Google-Smtp-Source: AGs4zMazjHnNGZHCgO08FzyLThcADHnUyQxLTQyqjN/ODxEPnb3JW9ai/xjCkRgSSZAAG2nWWkWBuAkBoyO2tI0pVCg=
X-Received: by 10.36.145.203 with SMTP id i194mr3159549ite.73.1512683325538; Thu, 07 Dec 2017 13:48:45 -0800 (PST)
MIME-Version: 1.0
Received: by 10.107.101.16 with HTTP; Thu, 7 Dec 2017 13:48:24 -0800 (PST)
In-Reply-To: <CAGD1bZZNJQ-V=nvTc0RVigKg5gLRg2tj7w+rRgbfdjLhND1k0A@mail.gmail.com>
References: <CABcZeBO=WCTLuuxaOJXKzQdiBduOxLdoqNtMpvPatBOAwNjZkQ@mail.gmail.com> <CA+9kkMAc3NopLuEGQvuvu82X2LpuL-RiCoKzdfiWYUSfzfhRKA@mail.gmail.com> <1726D0F2-CE76-418C-BE24-CA3492F4CC27@iii.ca> <65c4d1cd-8927-1a96-a45c-734e743279ac@huitema.net> <CAGD1bZZNJQ-V=nvTc0RVigKg5gLRg2tj7w+rRgbfdjLhND1k0A@mail.gmail.com>
From: Ian Swett <ianswett@google.com>
Date: Thu, 07 Dec 2017 16:48:24 -0500
Message-ID: <CAKcm_gNyyAjs8SknrSkAL8T+r7t+TTpmuL=v8MJOtZPwHj_+AA@mail.gmail.com>
Subject: Re: More on demultiplexing
To: Jana Iyengar <jri@google.com>
Cc: Christian Huitema <huitema@huitema.net>, Ted Hardie <ted.ietf@gmail.com>, IETF QUIC WG <quic@ietf.org>, Eric Rescorla <ekr@rtfm.com>, Cullen Jennings <fluffy@iii.ca>
Content-Type: multipart/alternative; boundary="94eb2c0ef6504749ef055fc708ad"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/P_hpLrYQIrwtXbrHHOsyCHVgzkk>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.22
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: Thu, 07 Dec 2017 21:48:49 -0000

I was thinking along those lines as well, Jana, since I think we have a
pretty general problem here, and if we grease the type byte, I think we can
create a fairly simple solution.

As you mentioned, the WebRTC over QUIC mapping would have to specify which
QUIC codepoints could not be used in the short and long header.  As a
slight tweak on your idea, I think that only the application should specify
what codepoints cannot be greased for the long header, but the transport
params can contain additional codepoints which are to be avoided by the
peer in the short header.  So the list of codepoints to avoid are not
negotiated, but communicated.(ie: the client might be fine with anything
and the server might exclude DTLS codepoints).  And any codepoints the
application mapping specifies should be avoided do not need to be
communicated in transport params.

As an example, this means that even if the types are 0 through 3, those
codepoints may be excluded and never sent on the wire and in reality,
numbers more similar to the submitted PR#956 may be sent on wire.

This means there may be conflicts between the long header and a different
application that happens to be running on a given port, but those can be
handled by looking for long headers and checking the version before doing
any more expensive processing.

Cases like WebRTC should be easy to handle by excluding the problematic
codepoints in the WebRTC over QUIC mapping.

The only(obvious) rule is that you can't exclude all ways to express a
given type, but that's dependent upon the exact type byte greasing
approach, which hopefully we can separate from the multiplexing approach.

On Thu, Dec 7, 2017 at 3:00 PM, Jana Iyengar <jri@google.com> wrote:

> On Thu, Dec 7, 2017 at 11:51 AM, Christian Huitema <huitema@huitema.net>
> wrote:
>
>> On 12/7/2017 10:59 AM, Cullen Jennings wrote:
>>
>> >> On Dec 6, 2017, at 12:15 PM, Ted Hardie <ted.ietf@gmail.com> wrote:
>> >>
>> >> I think if you bundled all the media on one 5-tuple and had QUIC on
>> another, the core NAT exhaustion problem would not be that bad.
>> > It would be twice as bad :-) When creating the offer, the device that
>> creates it does not know if it will be getting QUIC based stuff or not so
>> you want to include both in the offer. For the same reason we don't want to
>> gather two ports for RTC and RTCP, I think we will want to run both on same
>> port. I think google's data showed that nat traversal success rates were
>> worse when using two ports instead of one.
>> >
>> > So my preference would be to be able to multiplex WebRTC using QUIC and
>> and WebRTC not using QUIC on the same port.
>> >
>> +1. When dealing with NAT, there is a cost per port to "opening a hole
>> for the port", in terms of messages to open the port, risks to cause
>> resource exhaustion in a local NAT, and requirement to keep the port
>> alive. Everything on one port is nice.
>>
>
> I agree on this point. It's more than just nice -- it avoids strange
> partial failures when one part of the communication works (over one port)
> but the other part (over the other port) doesn't.
>
>
>> By the way, how strongly do we feel about making decisions based on
>> first byte alone? In the case of QUIC, the connection ID provides a
>> pretty big clue. If we use that, demux becomes significantly simpler.
>> There are still issues during the connection phase, as the first message
>> from the peer carries an unknown connection ID, but that could be
>> handled with special logic. Also, don't STUN messages carry a magic
>> number precisely to help demuxing?
>>
>
> Why have the same conversation once in one place when we can have it twice
> in two places :-) I raised this  point in #426
> <https://github.com/quicwg/base-drafts/issues/426>, and Colin responded
> there, you may want to take a look. He does suggest using connection ID,
> but it's not yet clear to me that the C bit needs to be changed in that
> case.
>