Re: [Taps] draft-ietf-taps-interface-05 review

Kyle Rose <krose@krose.org> Tue, 10 March 2020 14:07 UTC

Return-Path: <krose@krose.org>
X-Original-To: taps@ietfa.amsl.com
Delivered-To: taps@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 546933A1367 for <taps@ietfa.amsl.com>; Tue, 10 Mar 2020 07:07:06 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.087
X-Spam-Level:
X-Spam-Status: No, score=-2.087 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=krose.org
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 9x_R6pkopNCl for <taps@ietfa.amsl.com>; Tue, 10 Mar 2020 07:06:58 -0700 (PDT)
Received: from mail-yw1-xc2f.google.com (mail-yw1-xc2f.google.com [IPv6:2607:f8b0:4864:20::c2f]) (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 4CB633A1365 for <taps@ietf.org>; Tue, 10 Mar 2020 07:06:57 -0700 (PDT)
Received: by mail-yw1-xc2f.google.com with SMTP id x5so12829983ywb.13 for <taps@ietf.org>; Tue, 10 Mar 2020 07:06:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=krose.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ieHGJqMCcluL+2FN6aMHYhWB5e1Nf+4mcbapl4I+64c=; b=DnJ0roDHpaQoNKLecQKdnO7YaAZQY8Pi+wNqI/Y4jQcO1vuonXhLzr8o+AkfOA5TV1 enavUWF9UlJYtYPFjHy29Dvkk3igGtlogLUDVQr+7F6RNrmM3NzWW0GLVVosF/1bw9Er 6SlbLnGLQc1H9Qn2S6SM2Q1saklDqJrhL2AMI=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ieHGJqMCcluL+2FN6aMHYhWB5e1Nf+4mcbapl4I+64c=; b=PqzJPyS5qEIi8spqkXOl7xU2xUDis9KhepjxSdSUhtqxSq4OMDHeFFnjFcnJ/kPPlo e/vzdtK5yogaq2lSsJG0nBkjOCGasl4VZRbDPQRqf3nyQHu3kqHvNbiI1cUPtLV2Zsw5 RW9h5Q7mMLBQYUfr8hSzuR47H3JpaTHRLIlaoJZgCJG8CGQ0RfBRq9dt3y706zcm5/C+ MKV/Xd5rC1AxsOaCC2UdYSLsxJHqa9XLY1dXDX9t7lLn//bDqwuUhQkvz3VRZR3BRoct bQpzJt7rWUeUZec7862SkhXCVmmoWk6233hm3uyL6OdDi339bPKzfYIw8tAfvuARd5/q KKfA==
X-Gm-Message-State: ANhLgQ2Pvo5KXJgxXASGpPIz/tOEMXA3350hNLGlzvOoinTLNKlMxSam 2rMXLqxjfCdSBKcf4SGqKOYoJg9lYWsNbGQ0sJAPapPMpn4=
X-Google-Smtp-Source: ADFU+vsuTZwsdHUm0B/noplneqy7xDOnZfqc/CSNTF8Qgz+6Ja/53cSDZVMIrizu/5eLCCpOhhJ0owPp/NP6jdzvgK0=
X-Received: by 2002:a0d:d106:: with SMTP id t6mr22004454ywd.211.1583849216702; Tue, 10 Mar 2020 07:06:56 -0700 (PDT)
MIME-Version: 1.0
References: <CAJU8_nVyAvVzD6ZitxwzoVCYBYmT1y3oP7U8FhgyWfx8p6RR5w@mail.gmail.com> <E9545535-178C-4B9F-91C2-0EB3356DB5B0@ifi.uio.no>
In-Reply-To: <E9545535-178C-4B9F-91C2-0EB3356DB5B0@ifi.uio.no>
From: Kyle Rose <krose@krose.org>
Date: Tue, 10 Mar 2020 10:06:45 -0400
Message-ID: <CAJU8_nU4nx5_r8-kUJusAWR29S=+1x7NTf6NLQ-7XceNfpyOpQ@mail.gmail.com>
To: Michael Welzl <michawe@ifi.uio.no>
Cc: "taps@ietf.org" <taps@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000f0983705a080a105"
Archived-At: <https://mailarchive.ietf.org/arch/msg/taps/FObeuIKJgD_V3QLjEitvtlt7Qrk>
Subject: Re: [Taps] draft-ietf-taps-interface-05 review
X-BeenThere: taps@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "IETF Transport Services \(TAPS\) Working Group" <taps.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/taps>, <mailto:taps-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/taps/>
List-Post: <mailto:taps@ietf.org>
List-Help: <mailto:taps-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/taps>, <mailto:taps-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 10 Mar 2020 14:07:06 -0000

On Wed, Mar 4, 2020 at 9:41 AM Michael Welzl <michawe@ifi.uio.no> wrote:

> 2. Terminology and Notation
>
>  * The notation "Sender -> Event" says nothing about who receives the
> event. Is it just assumed to be the application in the context of the
> particular event (e.g., a thread processing a particular connection)?
>
> MW: We have the following statement in this section: "Events could be
> implemented via event queues, handler functions or classes, communicating
> sequential processes, or other asynchronous calling conventions."
> I wonder why this isn't enough information? E.g., if handlers are used,
> then the recipient of the event is a pre-registered handler -  and handlers
> must therefore be registered before events can occur; this function isn't
> visible in the API because this is platform- and language-specific.
>

After some thought, I think I'm okay with this now. It feels like one of
those things that would make perfect sense if I were actually implementing
a TAPS interface.


> 4.2.1. Transport Property Names
>
>  * The use of dashes in property names means they will necessarily look
> different in almost every widely-used language, in which dash is an
> operator.
>

Following on to the discussion later in the thread, CamelCase would
probably be an improvement from this perspective. Underscores would also be
fine.



>   * If we're not currently asking IANA to create a registry of property
> names or namespaces, should we provide a recommendation that such symbols
> not listed explcitly in this document be prefixed with some experimental
> identifier?
>

Can't remember where I saw objection that this creates the possibility of a
bunch of long-lived X-* properties. To that I respond: which is worse? A
complete free-for-all, or a recommendation to have the free-for-all
confined to an X- namespace? Do properties starting with X- just offend
engineering sensibilities?

One "right" alternative is a documentation-required registry, but does that
raise the bar too high? How about a TAPS wiki as a compromise? The
important outcome is that properties be well-defined and not conflict with
each other. Since these properties have entirely local effects (e.g., they
don't get encoded as options and transmitted to the peer), we probably
don't need the level of precision motivating option registries, for
instance. Is there precedent at the IETF for a registry mechanism less
formal that what IANA provides?

5.2. Specifying Transport Properties
>
>  * There are a lot of choices being made about how users will want to
> prioritize transport protocol selection. How confident are we that, for
> instance, path selection should take priority over protocol selection? I
> think that's right, but I wonder if it might not make more sense to have
> two interfaces: one that provides a purely numeric priority ordering of
> preferences, and one (based on the existing 5-level preferences) that maps
> into it.
>

I'm okay with whoever said that this is unworkable. I'm sure I missed the
original discussion.


>  * Using the same enum (Require(d[sic])/Avoid/Ignore) for the queried
> output of selected properties seems like a shortcut that will lead to some
> confusion.
>
> MW: I agree;  partially addressed: s/Required/Require wherever it's a
> Preference level.
>

FWIW, my objection to the other issue (using a normative term as an
indication of what was chosen) isn't that it's underspecified, only that
it's confusing. I put it roughly in the same category as specifying -1 as
an error indicator in an abstract API. Is the idea that the output
parameters could be fed into the protocol selection logic for a subsequent
connection to select the same protocol? Is that useful?


> 5.2.5. Use 0-RTT Session Establishment with an Idempotent Message
>
>  * I'll repeat the same statement I made at the mic a few years ago:
> idempotency != replay-safe. DELETE is idempotent, but not safe for replay
> because someone might have done a PUT or POST in the meantime.
>
> MW: I remember you saying this, sorry that we haven't addressed it yet! I
> didn't understand - is your concern about replaying that a Message may
> arrive later, i.e. as Message X, Messages Y and Z in between, then Message
> X again?  => if so, are you saying that this could happen with TFO or
> QUIC?  (I didn't think so)
>

What I mean is maybe best illustrated by 0RTT in TLS or QUIC. If a user
sends a 0RTT DELETE /object, followed by a PUT /object, then within the
replay window and without any replay prevention at the application layer,
an attacker could replay the 0RTT DELETE /object and cause the object to be
deleted again. DELETE is idempotent but it's not safe to replay.

7.3.3. SendError
>
>  * Is there a reason why a single messageContext object is used for both
> sends and receives? I probably missed the original discussion about this,
> but I'd like to understand the reasoning.
>
> MW: I don't get this, where does it say that it's only a single object? Or
> do you mean that it's the same type? Why is that problematic?
>

Same type. (Maybe I should have said "class" instead of "object".) For
example, the "lifetime" property makes sense as metadata for sends, but is
completely irrelevant to the receiver. The same is true of several other
message properties. It might make sense for an implementation to use a
single type to represent metadata both for sends and receives, but is that
also true for an abstract API?


> 8. Receiving Data
>
>  * A connection can be used to receive data if it is not configured as
> unidirectional transmit.
>
> MW: that's obviously correct - but I can't find a statement that would
> contradict what you say here.
>

"Once a Connection is established, it can be used for receiving data." Not
true if it's a unidirectional connection.

I'll take a look at the subsequent replies and respond at the end of the
thread to anything that I didn't cover here.