Re: [tsvwg] draft-ietf-udp-options issues from IETF 104

Gorry Fairhurst <gorry@erg.abdn.ac.uk> Thu, 18 July 2019 18:41 UTC

Return-Path: <gorry@erg.abdn.ac.uk>
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 CE83D120889 for <tsvwg@ietfa.amsl.com>; Thu, 18 Jul 2019 11:41:53 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.897
X-Spam-Level:
X-Spam-Status: No, score=-1.897 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=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 5BZbOfsopr_c for <tsvwg@ietfa.amsl.com>; Thu, 18 Jul 2019 11:41:51 -0700 (PDT)
Received: from pegasus.erg.abdn.ac.uk (pegasus.erg.abdn.ac.uk [IPv6:2001:630:42:150::2]) by ietfa.amsl.com (Postfix) with ESMTP id F253312006B for <tsvwg@ietf.org>; Thu, 18 Jul 2019 11:41:50 -0700 (PDT)
Received: from MacBook-Pro.local (fgrpf.plus.com [212.159.18.54]) by pegasus.erg.abdn.ac.uk (Postfix) with ESMTPSA id 13AE51B00263; Thu, 18 Jul 2019 19:41:46 +0100 (BST)
Message-ID: <5D30BD6A.9020103@erg.abdn.ac.uk>
Date: Thu, 18 Jul 2019 19:41:46 +0100
From: Gorry Fairhurst <gorry@erg.abdn.ac.uk>
Reply-To: gorry@erg.abdn.ac.uk
Organization: University of Aberdeen
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:12.0) Gecko/20120428 Thunderbird/12.0.1
MIME-Version: 1.0
To: Tom Herbert <tom@herbertland.com>, "tsvwg@ietf.org" <tsvwg@ietf.org>
References: <30c17e9c174f6b0da3ecc6b503a8cb17@strayalpha.com> <CACL_3VE7+3WD3Uzubf8X9uQX9ZYPnZVhXjheUOuL9EfjT1JkGQ@mail.gmail.com> <CALx6S35V-d3Rn_wjrhbHUHgS=_+dVjR4hbMJ0-JBsG-1BuFuZg@mail.gmail.com> <B5CCEF58-38CE-4973-9CFD-002B404E4EF3@strayalpha.com> <CACL_3VEnJoV9N9i59fJXG1Nyt=mMWT7SuB8B=C-Y9a9QLtqP7Q@mail.gmail.com> <BB3FD9A5-8D30-4600-A7A7-DA3030BD34A3@strayalpha.com> <20190718100109.GA86292@clarinet.employees.org> <718EBD34-5B4A-4458-B9B4-0A94C33E019E@strayalpha.com> <CACL_3VGL2irCkZeEcP+9HLBHqtqaMPZM66youUsatzosUu=Aew@mail.gmail.com> <A07EA390-1A3A-4AE9-AFD7-2F22CD4B0E31@strayalpha.com> <CALx6S34oOza3Z4Ymjsp+HLXnSTOKwh+SAQO8mt=a-1AbTTB0GQ@mail.gmail.com> <177233bb33272ce3b64298a005254724@strayalpha.com> <CALx6S36ZBa4Bioj=0KYn7wcFi08VeAg8sHUHLRNGURsrUN673w@mail.gmail.com> <5D30B36D.80409@erg.abdn.ac.uk> <CALx6S37EauLMyeksHJ3iPNjKwLTv5qti_Hf0a2QTdzZoDrarrw@mail.gmail.com> <5D30BB23.6080407@erg.abdn.ac.uk> <CALx6S34j2fi6sePff3sRu71RVDsPwmJi5XOEfrwniQk5h76geQ@mail.gmail.com>
In-Reply-To: <CALx6S34j2fi6sePff3sRu71RVDsPwmJi5XOEfrwniQk5h76geQ@mail.gmail.com>
Content-Type: text/plain; charset="UTF-8"; format="flowed"
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/tsvwg/jcVH_ZARIbX93VL4mWmQrrXrXrs>
Subject: Re: [tsvwg] draft-ietf-udp-options issues from IETF 104
X-BeenThere: tsvwg@ietf.org
X-Mailman-Version: 2.1.29
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: Thu, 18 Jul 2019 18:41:54 -0000

On 18/07/2019, 19:38, Tom Herbert wrote:
> On Thu, Jul 18, 2019 at 11:32 AM Gorry Fairhurst<gorry@erg.abdn.ac.uk>  wrote:
>> On 18/07/2019, 19:18, Tom Herbert wrote:
>>> On Thu, Jul 18, 2019 at 10:59 AM Gorry Fairhurst<gorry@erg.abdn.ac.uk>   wrote:
>>>> On 18/07/2019, 18:25, Tom Herbert wrote:
>>>>> On Thu, Jul 18, 2019 at 9:56 AM Joe Touch<touch@strayalpha.com>    wrote:
>>>>>>
>>>>>>
>>>>>> On 2019-07-18 08:35, Tom Herbert wrote:
>>>>>>
>>>>>> ...
>>>>>>
>>>>>> A single bit in the option type to indicate that the option can be
>>>>>> skipped if unrecognized should be sufficient.
>>>>>>
>>>>>> Tom
>>>>>>
>>>>>>
>>>>>>
>>>>>> That bit has two meanings:
>>>>>>
>>>>>> - for legacy receivers, it's simply ignored for legacy data
>>>>>>
>>>>>> - for option-aware, if the flag is set, what does it mean?
>>>>>>      - it should never mean drop the legacy data, otherwise an options-aware endpoint can't decide to act as legacy
>>>>>>      - it could mean drop non-legacy data
>>>>>>
>>>>>> Right now, the onus is on the receiver to decide what to do with the data.. The info is passed to the user - NOT decided by UDP.
>>>>>>
>>>>>> I.e., cuurrently:
>>>>>>
>>>>>> - unknown options are ignored by both legacy and option-aware endpoints
>>>>>> - UDP processing skips over all such options
>>>>>> - users can decide/negotiate what to do with those options on a per endpoint basis
>>>>>>
>>>>>> Note: the first time you send something, if you want a response to help you know what the endpoint will do, you need to set "ignore" anyway, which is what the default does. Otherwise you won't get a response and won't know why (the packet could have been dropped).
>>>>>>
>>>>>> So this only makes sense for negotiated soft-state anyway, at which point the user can either configure the endpoint UDP socket to drop if unknown or accept.
>>>>>>
>>>>>> Why would we NOT give the user this choice?
>>>>>>
>>>>> Joe,
>>>>>
>>>>> Consider that someone invents the compression option a year from now.
>>>>> The option cannot be ignored by a receiver since delivering compressed
>>>>> data to the application would be jibberish. So someone starts using
>>>>> compression and performs a "soft-state" negotiation with a timeout of
>>>>> 30 seconds in the example algorithm you previously described for
>>>>> soft-state negotiation. So the sender is sending compression option to
>>>>> some receiver. But, at some point, say 10 seconds into a timeout
>>>>> period, the receiving host changes to a different configuration that
>>>>> doesn't support the compression option-- maybe the host address is
>>>>> virtual IP and packets are now routed to a different backend, or maybe
>>>>> someone reboots the receiving hosts with a new configuration.
>>>>> The
>>>>> sender doesn't know the receiver has changed and continues sending the
>>>>> compression option. The new receiver sees the options but doesn't
>>>>> recognize it.
>>>>> If the receiver ignores the option and delivers the data
>>>>> to the application then that's data corruption. That's not robust.
>>>> That's where I disagree. I think anything that is not a native UDP
>>>> packet MUST be carried in the options space. That's where I would
>>>> suggest we put the compressed payload. if that means the main payload
>>>> area isnothing", then that would be OK for me.
>>>>
>>> That's already assumed. If there are any options that can't be ignored
>>> then the UDP Length = 8 format must be used. If processing options
>>> fails then the packet can be dropped.
>>>
>>>> When the remote endpoint fails to process the compressed payload (or
>>>> myseriously the option si stripped/ignored - how, but don't worry), then
>>>> the app doesn't respond. It times out and does something.
>>>>
>>> Remote endpoint or remote application? We can't give an application
>>> the compressed payload.
>>>
>> Remote endpoint.
>>>> Personally, unless there was a strong desire to be unidirectional (then
>>>> you have to live with that), I'd send an option to the other end to
>>>> solicit a little feedback - or do the same at the app layer.
>>>>
>>> You can do that, but bear in mind that UDP is a stateless protocol.
>>> The feedback you get from one probe exchange might be completely
>>> invalid on the very next packet sent. Any information gleaned about a
>>> peer can only be considered advisory.
>> yes. If you build on UDP you need to provide machinery.
>>>> Gorry
>>>>> The "drop packet on unknown option" is the conventional and cheap way
>>>>> to avoid situations like this and make stateless options robust.
>>>> Not sure how that now helps?
>>>>
>>>> The receiver already ignores unknown options.
>>> I believe that's the problem. There some options that cannot be
>>> ignored and still maintain correctness. This is already a known issue
>>> with other protocols.
>> OK, let's check. The receiver gets a UDP datagram and...
>>
>> (1) Receiver understands options and it understands this specific option
>> - it processes the option - app gets the data.
> Yes, presuming other options were acceptable.
>
>> (2) Receiver understands options and not this specific option - it does
>> not processes the option - no data to the app.
> Yes, that is the correct behavoir. The question is how does the
> protocol provide for this. Right now the draft says "Receivers MUST
> silently ignore unknown options.". That won't work. Either all unknown
> options cause packet to be dropped, or receiver can can determine
> whether the packet should be be dropped based on the bit.
OK, so do you want the app to be able to process several options, but 
make options processing
dependent on other options.

Gorry
>> (3) Receiver does not understand options - it does not processes the
>> option - no data to the app.
> No data app, but app does receive a zero length message. That corner
> case is already noted.
>
>> Gorry
>>> Tom
>>>
>>>>> Tom
>>>>>
>>>>>> Joe
>>>>>>
>>>>>>
>>>> Gorry
>>>>