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

Michael Welzl <michawe@ifi.uio.no> Fri, 25 March 2016 17:29 UTC

Return-Path: <michawe@ifi.uio.no>
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 E9AAF12D526 for <iccrg@ietfa.amsl.com>; Fri, 25 Mar 2016 10:29:05 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.21
X-Spam-Level:
X-Spam-Status: No, score=-4.21 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, T_RP_MATCHES_RCVD=-0.01] 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 3erz396kliSI for <iccrg@ietfa.amsl.com>; Fri, 25 Mar 2016 10:29:03 -0700 (PDT)
Received: from mail-out5.uio.no (mail-out5.uio.no [IPv6:2001:700:100:10::17]) (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 6755312D527 for <iccrg@irtf.org>; Fri, 25 Mar 2016 10:29:03 -0700 (PDT)
Received: from mail-mx1.uio.no ([129.240.10.29]) by mail-out5.uio.no with esmtp (Exim 4.80.1) (envelope-from <michawe@ifi.uio.no>) id 1ajVXh-0001qf-Np; Fri, 25 Mar 2016 18:29:01 +0100
Received: from 3.134.189.109.customer.cdi.no ([109.189.134.3] helo=[192.168.0.107]) by mail-mx1.uio.no with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) user michawe (Exim 4.80) (envelope-from <michawe@ifi.uio.no>) id 1ajVXh-0005hb-6F; Fri, 25 Mar 2016 18:29:01 +0100
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 9.2 \(3112\))
From: Michael Welzl <michawe@ifi.uio.no>
In-Reply-To: <CALx6S37-QdSaGTB9kXyaqvG36GPzd9e2A6jqG=qByrj2U1_rSA@mail.gmail.com>
Date: Fri, 25 Mar 2016 18:29:00 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <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>
To: Tom Herbert <tom@herbertland.com>
X-Mailer: Apple Mail (2.3112)
X-UiO-SPF-Received:
X-UiO-Ratelimit-Test: rcpts/h 2 msgs/h 1 sum rcpts/h 4 sum msgs/h 2 total rcpts 39693 max rcpts/h 54 ratelimit 0
X-UiO-Spam-info: not spam, SpamAssassin (score=-5.0, required=5.0, autolearn=disabled, MIME_QP_LONG_LINE=0.001, TVD_RCVD_IP=0.001, UIO_MAIL_IS_INTERNAL=-5, uiobl=NO, uiouri=NO)
X-UiO-Scanned: 7E9E92B992F71DAEE60ED7B0FE713F496C1AEEB9
X-UiO-SPAM-Test: remote_host: 109.189.134.3 spam_score: -49 maxlevel 80 minaction 2 bait 0 mail/h: 1 total 589 max/h 14 blacklist 0 greylist 0 ratelimit 0
Archived-At: <http://mailarchive.ietf.org/arch/msg/iccrg/r6f7u7wYnxW3tZGsJTQwBOx_SPw>
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:29:06 -0000

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.


> 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.


> 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