Re: [tsvwg] New Version Notification for draft-touch-tsvwg-udp-options-05.txt

Joe Touch <touch@isi.edu> Tue, 28 February 2017 20:04 UTC

Return-Path: <touch@isi.edu>
X-Original-To: tsvwg@ietfa.amsl.com
Delivered-To: tsvwg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id EF9D31296AD for <tsvwg@ietfa.amsl.com>; Tue, 28 Feb 2017 12:04:14 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RP_MATCHES_RCVD=-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 HWAAC9LTBvJP for <tsvwg@ietfa.amsl.com>; Tue, 28 Feb 2017 12:04:13 -0800 (PST)
Received: from nitro.isi.edu (nitro.isi.edu [128.9.208.207]) (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 5182E1296AA for <tsvwg@ietf.org>; Tue, 28 Feb 2017 12:04:13 -0800 (PST)
Received: from [128.9.160.211] (mul.isi.edu [128.9.160.211]) (authenticated bits=0) by nitro.isi.edu (8.13.8/8.13.8) with ESMTP id v1SK3xI6017536 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Tue, 28 Feb 2017 12:04:00 -0800 (PST)
To: "C. M. Heard" <heard@pobox.com>
References: <CACL_3VFeJs7KzG9Bchh15bfZ3CmaOPWcfisEreNoGYK5CsEJ+g@mail.gmail.com>
From: Joe Touch <touch@isi.edu>
Message-ID: <3a4a6b78-8146-de4c-6246-7bd09de44f1c@isi.edu>
Date: Tue, 28 Feb 2017 12:03:59 -0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1
MIME-Version: 1.0
In-Reply-To: <CACL_3VFeJs7KzG9Bchh15bfZ3CmaOPWcfisEreNoGYK5CsEJ+g@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
X-MailScanner-ID: v1SK3xI6017536
X-ISI-4-69-MailScanner: Found to be clean
X-MailScanner-From: touch@isi.edu
Archived-At: <https://mailarchive.ietf.org/arch/msg/tsvwg/Lzn4AgwAzVg7uPDfuXKZMjPsLRI>
Cc: Mark Smith <markzzzsmith@gmail.com>, tsvwg <tsvwg@ietf.org>
Subject: Re: [tsvwg] New Version Notification for draft-touch-tsvwg-udp-options-05.txt
X-BeenThere: tsvwg@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: Transport Area Working Group <tsvwg.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tsvwg>, <mailto:tsvwg-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tsvwg/>
List-Post: <mailto:tsvwg@ietf.org>
List-Help: <mailto:tsvwg-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tsvwg>, <mailto:tsvwg-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 28 Feb 2017 20:04:15 -0000

Hi, Mike,


On 2/28/2017 10:58 AM, C. M. Heard wrote:
> Greetings,
>
> I am very pleased with the latest version of this draft, and in particular
> with the proposed Fragmentation option. It cleanly solves the problem of
> providing an optional fragmentation capability in UDP that can be
> incrementally deployed. It appears to be a viable way to solve the problem
> of fragmented DNSSEC responses getting dropped because of middleboxes
> filtering IPv4 or IPv6 fragments.

That's a very good point - I'll add that to the discussion of the option.

>  Application layer solutions have been
> proposed (see https://tools.ietf.org/html/draft-muks-dns-message-fragments),
> but the current proposal has the advantage that it will work for any
> UDP-based protocol. It will work especially well for request-response
> protocols such as DNS where the requests typically are small (not requiring
> fragmentation) but the responses may be large. To use it, the client sends
> the request in an unfragmented UDP datagram but appends a Fragmentation
> option with Offset and M both zero. If the server does not support UDP
> options, it ignores the trailing option and behaves as it does today. If
> the server does support UDP options and the response won't fit in a single
> UDP datagram without causing IP layer fragmentation, it transmits the
> response in several datagrams, using the UDP fragmentation options. This
> will work especially well for IPv6, where the path MTU is guaranteed to be
> at least 1280 bytes.
>
> Back in 2013 several proposals for UDP layer fragmentation surfaced during
> a discussion on the 6man list about whether to deprecate IPv6 fragmentation
> (one was in https://www.ietf.org/mail-archive/web/ipv6/current/msg18703.html).
> None of those proposals solved the problem of incremental deployability,
> however, as this one does. Thanks and congratulations for coming up with
> an elegant solution.
I have to give credit to Mike Smith for suggesting it.

> I do have some technical comments to make on the Fragmentation option.
>
> First, I would like to suggest that the post-reassembly user data length
> and optionally a post-reassembly user data checksum appear in the UDP
> Fragmentation option. The reason for including a post-reassembly length is
> to provide a hint to the implementation how much buffer space to reserve;
> in order to be foolproof in the face of packet reordering, this needs to be
> in every fragment. The optional post-reassembly checksum would need to be
> in at least one Fragmentation option and (like the post-reassembly length)
> would have to have be the same if it appeared more than once. Its main
> value is that it provides a stronger verification that the reassembly
> process was done correctly than the fragment-by-fragment checksum in
> the UDP header.
I'm thinking now about the ordering of options. I'd really like to allow
FRAG to precede others, especially LITE. I see your point about the
checksums of the pieces vs. the whole...

>  Finally, if used in conjunction with the Lite option, it
> provides a means to overcome the following issue:
>
>    The Fragmentation option needs to be used with extreme care because
>    it will present incorrect datagram boundaries to a legacy receiver.
>
> If the Fragmentation option includes its own post-reassembly checksum,
> then a Lite option could be inserted immediately following the UDP
> header in each fragment, without loss of functionality. Implementations
> that do not support UDP options would see UDP fragments so constructed
> as empty UDP datagrams and would discard them, removing the danger of
> accidental misinterpretation.
Is see how that's useful, but it would also appear to mean we might be
able to use LITE twice - once as this trick to hide fragments (which is
elegant - thanks!), but also to allow the use of LITE in the final
result. I'm not sure whether that makes sense yet, though - if you check
to see that the whole thing is there, there's little point in allowing
part of the packet to not be checksummed (it already would be).

So maybe LITE couples with FRAG only in the way you mention, and no other?

> I also have an editorial comment on this option. Figure 15 shows the option
> length as 12 bytes and the Identification field length as 8 bytes, while the
> text says that the Identification field is 32 bits (4 bytes). This figure
> needs to be updated to match the text (whatever that turns out to be) and
> it also needs a new caption.
Yeah - sorry. That was sloppy of me. I did (FWIW) try to push all the
pending updates into the text in about half a day yesterday, so I
apologize for it being draftier than it should be. Thanks for pointing
that out.

> Finally, the text is silent on how Alternate Checksum (ACS) interacts with
> the Lite option and with the Fragmentation option. My assumption would be
> that ACS covers the entire payload in one datagram, irrespective of the
> presence or absence of Lite and Fragmentation, but it would be good to
> make this explicit.

Absolutely - as I noted, I need to think a little more about this issue
and make a recommendation. Glad to hear what others think.

AFAICT:
    OCS covers the header in each fragment
    ACS, being an alternative to the UDP checksum, covers the UDP user
data in each fragment (same as the UDP checksum, so not LITE)

As was noted, we might need a total "reassembled" checksum.

I'm not clear on whether it makes sense to use LITE with FRAG (except as
the trick noted before, to hide fragments from legacy receivers).

Joe