Re: [iccrg] [tsvwg] New Version Notification for draft-welzl-irtf-iccrg-tcp-in-udp-00.txt

Tom Herbert <tom@herbertland.com> Fri, 25 March 2016 17:58 UTC

Return-Path: <tom@herbertland.com>
X-Original-To: iccrg@ietfa.amsl.com
Delivered-To: iccrg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id D075312D563 for <iccrg@ietfa.amsl.com>; Fri, 25 Mar 2016 10:58:53 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.6
X-Spam-Level:
X-Spam-Status: No, score=-2.6 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_LOW=-0.7] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=herbertland-com.20150623.gappssmtp.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 UBWiDzfxlBJo for <iccrg@ietfa.amsl.com>; Fri, 25 Mar 2016 10:58:52 -0700 (PDT)
Received: from mail-io0-x22e.google.com (mail-io0-x22e.google.com [IPv6:2607:f8b0:4001:c06::22e]) (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 F34F812D513 for <iccrg@irtf.org>; Fri, 25 Mar 2016 10:58:51 -0700 (PDT)
Received: by mail-io0-x22e.google.com with SMTP id 124so119542320iov.3 for <iccrg@irtf.org>; Fri, 25 Mar 2016 10:58:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=herbertland-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-transfer-encoding; bh=Qf+flL3oeWi0b/VES4kFT5hqBAmqHur6QxbGyAJ1GbU=; b=avFKENBtpACfzjW9+O4tzPxeTmJf254ypuXBuXVd7c2oBDlZLHoLkeyeY7clKaqCQe 85GceWJT719ZbxuFlm0oCHjaYzhrfAawu3mczqadeENowgFCG5hNfBKtsu8K+yGNnUJ1 iELOE+ZKCb+vYu3Leaob8m7AmHZGUktuRPndSeKCQgspDF60+9n4sP+O6xp7fWOtAMtk BQewxJmHDGWkHYtOTusfEOHwvwOkCDmUpZiJErCCw/Nh2vVrcUrliF+8xxuoS4368UhL RL04g1ZocaDxpwgA/mkGk7EAs2aJOQ8QuraG9g9qv9TlzUUZaq5GU2+oM4joiShue7BK Bj7w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-transfer-encoding; bh=Qf+flL3oeWi0b/VES4kFT5hqBAmqHur6QxbGyAJ1GbU=; b=f7KpGDteaKbWB5AqDrAyBkXCPekkbrBOo6F5F1Ey2FuatuvG8kuUhHtccDJu3j3cBq jl88S6rQDVpm4XkHFixRJCrA8Z8FJYbUZDmamYzjo2nxjsb6klXnNqZtGHK/0enVKeES bGP42z0Cr/uD/Y3GBtSfOMYlnyyrOnXOJobL5r2WhV6RLzuiX9MymJWsd6xL3GEy7Cch yS5Ica9tlp8pnFMTflzGzcNf4Geo7jiDupap5ZVzBkABzgebzbf4kesQUUPlabnrjp5L zmV3YMTTvO+vDh+stXa7x9o5gZwv96V6t6bXyr8d8NU3F2H4for46ECSHFyNvVzufEp4 I82A==
X-Gm-Message-State: AD7BkJLjP26GTnCu9+cHTQP9SujKTRm3sXtUxXSSseDMBse0zcNAybReHzg60YEZkHVlWRoBCKRqEej0+MZxSQ==
MIME-Version: 1.0
X-Received: by 10.107.152.142 with SMTP id a136mr15635762ioe.84.1458928731302; Fri, 25 Mar 2016 10:58:51 -0700 (PDT)
Received: by 10.107.130.198 with HTTP; Fri, 25 Mar 2016 10:58:51 -0700 (PDT)
In-Reply-To: <C43CBFF8-6D87-4B08-B80E-C20736AB8529@ifi.uio.no>
References: <E5DC1ACF-3403-4112-9DB8-9AAE4E5B7428@ifi.uio.no> <28FFF903-C446-46A1-AA9E-4BD2566F1088@ifi.uio.no> <CALx6S37-QdSaGTB9kXyaqvG36GPzd9e2A6jqG=qByrj2U1_rSA@mail.gmail.com> <C43CBFF8-6D87-4B08-B80E-C20736AB8529@ifi.uio.no>
Date: Fri, 25 Mar 2016 10:58:51 -0700
Message-ID: <CALx6S340EQvRrrnhpJST-jDcx9RC4Auo8a6SUWw-AdqUc+VjXQ@mail.gmail.com>
From: Tom Herbert <tom@herbertland.com>
To: Michael Welzl <michawe@ifi.uio.no>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <http://mailarchive.ietf.org/arch/msg/iccrg/ZsViBz7C5QIElEoSfYM-uxCINW0>
X-Mailman-Approved-At: Fri, 25 Mar 2016 11:52:53 -0700
Cc: iccrg@irtf.org
Subject: Re: [iccrg] [tsvwg] New Version Notification for draft-welzl-irtf-iccrg-tcp-in-udp-00.txt
X-BeenThere: iccrg@irtf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: "Discussions of Internet Congestion Control Research Group \(ICCRG\)" <iccrg.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/iccrg>, <mailto:iccrg-request@irtf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/iccrg/>
List-Post: <mailto:iccrg@irtf.org>
List-Help: <mailto:iccrg-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/iccrg>, <mailto:iccrg-request@irtf.org?subject=subscribe>
X-List-Received-Date: Fri, 25 Mar 2016 17:58:54 -0000

On Fri, Mar 25, 2016 at 10:29 AM, Michael Welzl <michawe@ifi.uio.no> wrote:
> Hi!
>
>
>> On 25. mar. 2016, at 18.00, Tom Herbert <tom@herbertland.com> wrote:
>>
>> Hi Michael,
>>
>> For encapsulation format I suggest that you look at GUE
>> (https://tools.ietf.org/html/draft-ietf-nvo3-gue-02). GUE can
>> encapsulate TCP in UDP and inserts a GUE header that allows extra meta
>> data.  The connection ID could be moved to the GUE header so that no
>> special modification of the encapsulated TCP header would be needed.
>> The connection ID would be a new field in the GUE header. There is
>> already a session ID option defined, but that is 96 bits which is
>> probably overkill.
>
> I have, as I wrote this draft. It struck me as something that isn’t really necessary just for the purpose of what TCP-in-UDP is trying to achieve. In particular, other than GUE (if I got it correctly), TCP-in-UDP strictly assumes end-to-end operation, and requires changing the sender-side TCP code too because the main point is to combine congestion controls. This makes it possible to do whatever we want with the encapsulated TCP header.
>
Then you are redefining TCP. You can do that, but this substantially
reduces the possibility of deployment. In real networks we need
tcpdump, netflow, diagnostics, other debugging tools. Encapsulation
works best when it does not require changes to the encapsulated
packet. Besides that if your willing to change TCP for this use, why
not just go a little farther and use SCTP/UDP which I believe already
has a concept of shared congestion window amongst sub-flows?

>
>> Another consideration is the UDP checksum. This must be set in IPV6
>> (excepting that the requirements in RFC6935 and RFC6936 are met) and
>> is recommended for encapsulation any way. This means that there are
>> two checksums (TCP and UDP) per packet which becomes a performance
>> issue since most NICs can offload at most one checksum and often that
>> is restricted to only the checksum in a plain TCP or UDP packet with
>> no encapsulation. We solved this in GUE with remote checksum offload
>> (https://tools.ietf.org/html/draft-herbert-remotecsumoffload-02) which
>> should work fine with TCP over UDP case.
>
> We (and the preceding proposals that are cited in the draft) removed the redundant TCP checksum from the encapsulated TCP header. Because it’s end-to-end and changes TCP anyway, we can do that.
>
That will break our ability to use NIC offload with TCP/UDP
(segmentation offload for instance). Everything, including many
performance optimizations, is already designed around the requirement
that the TCP checksum must be set. Trying to undo that requirement is
actually a complication, not a simplification in practice.

Tom

>
>> There are some other end system issues in dealing with UDP
>> encapsulation that we considered in Linux (load balancing, checksum,
>> segmentation offload). Please look at
>> http://people.netfilter.org/pablo/netdev0.1/papers/UDP-Encapsulation-in-Linux.pdf.
>
> Thanks for the pointer!  But from quickly looking at it, the TCP-in-UDP case really seems simpler than most of this. E.g., in fig.1, a host kernel has to handle packets coming from a guest kernel - it’s not changing the guest kernel’s TCP code.
>
> BTW I’m not at all insisting on my encapsulation method, just explaining the design rationale. Anyway I’m beginning to think that the next version of the draft should make a cleaner split between the two elements: 1) congestion control coupling and 2) encapsulation (ensuring that TCP packets take the same path). The latter could be a separate method to support 2), where various options could be described: for v6, using the flow label as you suggested; for v4, the existing UDP encapsulation or something else if there’s a good reason (first I’ll need to read some more encapsulation stuff more carefully to fully appreciate the reasons).
>
> Cheers,
> Michael
>