Re: [Taps] Lars Eggert's Discuss on draft-ietf-taps-interface-22: (with DISCUSS and COMMENT)

Michael Welzl <michawe@ifi.uio.no> Tue, 12 December 2023 18:13 UTC

Return-Path: <michawe@ifi.uio.no>
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 15221C151077; Tue, 12 Dec 2023 10:13:15 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.007
X-Spam-Level:
X-Spam-Status: No, score=-2.007 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=ifi.uio.no
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rhNWGu4r1Vg7; Tue, 12 Dec 2023 10:13:10 -0800 (PST)
Received: from mail-out04.uio.no (mail-out04.uio.no [IPv6:2001:700:100:8210::76]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5E756C14CF1B; Tue, 12 Dec 2023 10:12:41 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ifi.uio.no; s=key2309; h=References:To:Cc:In-Reply-To:Date:Subject:Mime-Version: Content-Type:Message-Id:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=yKKBERVi45VF6562Xb3hl2mfboEHB1BpMswAFY+UzI4=; b=ttLvHZY8aKB+Dp7sAAzwsSboe8 1NFz+q3n4KHeZuKTwxrRWMXmqDr8XzvkjGSN00kXAGVgu0I+kgAuM+KeYNv+dj8JEwi72m6XVS0yg xPoDqfHplRPIWLH7woFcYBcDmPxIXnt4PDABHUMwXco2kU/iPPGV/MLRFu+rJVQPpgGniIsA+hG1j lHak0XlqJr+q7FvJN+5zhJuOT2UvSDfK6AbL7ycPeNKZ4j68hD+nlriVrLnmz2qHglG5zQY63hQCe yYOO3pmZ2A6bm4Rh/NGojY8z4LT+PX4YRM8lcIDt9KsnTIdJrXYlmxsglvmCsv35ItWJ380Wgju+D kdCxbjUA==;
Received: from mail-mx01.uio.no ([129.240.10.26]) by mail-out04.uio.no with esmtps (TLS1.2) tls TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (Exim 4.96.2) (envelope-from <michawe@ifi.uio.no>) id 1rD7F8-007JEt-1F; Tue, 12 Dec 2023 19:12:30 +0100
Received: from 178.165.202.239.wireless.dyn.drei.com ([178.165.202.239] helo=smtpclient.apple) by mail-mx01.uio.no with esmtpsa (TLS1.2:ECDHE-ECDSA-AES256-GCM-SHA384:256) user michawe (Exim 4.96.2) (envelope-from <michawe@ifi.uio.no>) id 1rD7F6-0005fh-1A; Tue, 12 Dec 2023 19:12:30 +0100
From: Michael Welzl <michawe@ifi.uio.no>
Message-Id: <C681ED45-0047-4D32-8349-B9A0853C2B52@ifi.uio.no>
Content-Type: multipart/alternative; boundary="Apple-Mail=_BBCA502E-2567-4368-A61B-CC7775AEE7B3"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\))
Date: Tue, 12 Dec 2023 19:12:26 +0100
In-Reply-To: <2FF2518E-C6E6-4BFF-9521-05AB8FE036F0@apple.com>
Cc: Lars Eggert <lars@eggert.org>, "Brian Trammell (IETF)" <ietf@trammell.ch>, Tommy Pauly <tpauly=40apple.com@dmarc.ietf.org>, The IESG <iesg@ietf.org>, draft-ietf-taps-interface@ietf.org, taps-chairs@ietf.org, taps@ietf.org, Anna Brunström <anna.brunstrom@kau.se>
To: Tommy Pauly <tpauly@apple.com>
References: <169408439315.13814.3746604129872399062@ietfa.amsl.com> <A1CF408B-C691-4003-A989-D0F3284B4E2F@apple.com> <181529E6-CFDC-4969-AABE-502E1C8A1325@eggert.org> <2FF2518E-C6E6-4BFF-9521-05AB8FE036F0@apple.com>
X-Mailer: Apple Mail (2.3696.120.41.1.1)
X-UiO-SPF-Received: Received-SPF: neutral (mail-mx01.uio.no: 178.165.202.239 is neither permitted nor denied by domain of ifi.uio.no) client-ip=178.165.202.239; envelope-from=michawe@ifi.uio.no; helo=smtpclient.apple;
X-UiO-Spam-info: not spam, SpamAssassin (score=-4.8, required=5.0, autolearn=disabled, HTML_MESSAGE=0.001, TVD_RCVD_IP=0.001, T_SCC_BODY_TEXT_LINE=-0.01, UIO_HTTP=0.2, UIO_MAIL_IS_INTERNAL=-5)
X-UiO-Scanned: 70F8F5F3785E80F075073C6DDAE87477E4E818BF
X-UiOonly: B61DFD9583312A722603DE252349A60730F98B72
Archived-At: <https://mailarchive.ietf.org/arch/msg/taps/zrMSqsop4Tas7PW1WhdKOCx1HN8>
Subject: Re: [Taps] Lars Eggert's Discuss on draft-ietf-taps-interface-22: (with DISCUSS and COMMENT)
X-BeenThere: taps@ietf.org
X-Mailman-Version: 2.1.39
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, 12 Dec 2023 18:13:15 -0000


> On Dec 12, 2023, at 6:48 PM, Tommy Pauly <tpauly@apple.com> wrote:
> 
> Hi Lars,
> 
> Responses inline.
> 
> 
>> On Dec 12, 2023, at 3:38 AM, Lars Eggert <lars@eggert.org> wrote:
>> 
>> Hi,
>> 
>> thanks for the replies. I'll trim my response to only those items where I still have questions.
>> 
>> On Nov 14, 2023, at 19:17, Tommy Pauly <tpauly=40apple.com@dmarc.ietf.org> wrote:
>>>> On Sep 7, 2023, at 3:59 AM, Lars Eggert via Datatracker <noreply@ietf.org> wrote:
>>>> ### Section 4.1, paragraph 8
>>>> ```
>>>>    *  For IETF protocols, the name of a Protocol-specific Property
>>>>       SHOULD be specified in an IETF document published in the RFC
>>>>       Series.
>>>> ```
>>>> For IETF protocols, i.e., protocols published on the IETF RFC stream,
>>>> those names must IMO be also specified in IETF-stream RFCs. I see no
>>>> reason to let other RFC streams make definitions for IETF protocols.
>>> 
>>> This now reads: "For IETF protocols, the name of a Protocol-specific Property SHOULD be specified in an IETF document published in the RFC Series after IETF review.”
>> 
>> why is this not a MUST, i.e., when would it be appropriate to not specify this in an IETF-stream RFC?
> 
> Yeah, I think this could be a MUST.
> 
> Brian, Michael, what do you think?

I dug into the issues and found this:  https://github.com/ietf-tapswg/api-drafts/issues/1330 <https://github.com/ietf-tapswg/api-drafts/issues/1330>
where we have closed this as “overtaken by events” - so I struggle to find the discussion that led to the specific sentence that was added. I believe we just left the SHOULD as it was, and fixed this to refer to "the RFC series after IETF review".

History and github issues aside, I completely agree, a MUST would make more sense here. Let’s do this.

Cheers,
Michael



> 
>> 
>>>> ### Section 6.1.3, paragraph 6
>>>> ```
>>>>    In order to scope an alias to a specific transport protocol, an
>>>>    Endpoint can specify a protocol identifier.
>>>> 
>>>>    AlternateRemoteSpecifier.WithProtocol(QUIC)
>>>> ```
>>>> This is the first and only time protocol identifiers are used. What
>>>> are they defined to be?
>>>> 
>>>> 
>>>> ### Section 6.1.3, paragraph 9
>>>> ```
>>>>    The following example shows a case where example.com has a server
>>>>    running on port 443, with an alternate port of 8443 for QUIC.
>>>> 
>>>>    RemoteSpecifier := NewRemoteEndpoint()
>>>>    RemoteSpecifier.WithHostname("example.com")
>>>>    RemoteSpecifier.WithPort(443)
>>>> 
>>>>    QUICRemoteSpecifier := NewRemoteEndpoint()
>>>>    QUICRemoteSpecifier.WithHostname("example.com")
>>>>    QUICRemoteSpecifier.WithPort(8443)
>>>>    QUICRemoteSpecifier.WithProtocol(QUIC)
>>>> 
>>>>    RemoteSpecifier.AddAlias(QUICRemoteSpecifier)
>>>> ```
>>>> Why does the `RemoteSpecifier` definition not contain a `WithProtocol`
>>>> clause for TCP/TLS? And what would that look like, given that TCP/TLS
>>>> is a protocol combination?
>>> 
>>> These comments around protocol-specific endpoints are addressed with https://github.com/ietf-tapswg/api-drafts/pull/1408 and https://github.com/ietf-tapswg/api-drafts/pull/1451
>>> 
>>> The text now clarifies that the values for the protocol scoping here are implementation-provided enumerations.
>>> 
>>> "To scope an Endpoint to apply conditionally to a specific transport
>>> protocol (such as defining an alternate port to use when QUIC
>>> is selected, as opposed to TCP), an Endpoint can be
>>> associated with a protocol identifier. Protocol identifiers are
>>> objects or enumeration values provided by the Transport
>>> Services API, which will vary based on which protocols are
>>> implemented in a particular system."
>>> 
>>> The reason to show one protocol being specified with an override is to show how there’s a default endpoint that the connection should use, and it should conditionally load an alternate when using a particular protocol. This then doesn’t constrain the protocol stacks being used, but only customizes the endpoint in case a particular protocol is loaded.
>> 
>> How would a developer know what the default endpoint was?
> 
> The “default” endpoint is the one that the application developer themselves provided that didn’t include a protocol-specific binding. In the example above, that’s the port 443 endpoint, while there’s a protocol-bound endpoint that uses port 8443.
> 
>> 
>>>> ### Section 6.2, paragraph 0
>>>> ```
>>>> 6.2.  Specifying Transport Properties
>>>> ```
>>>> This section defines a boatload of different properties, many of which
>>>> are interacting with each other due to how our current transport
>>>> protocols are implemented. Future interactions, due to future
>>>> transport protocols potentially becoming available, are undefined. I
>>>> question how a potential programmer is supposed to make informed
>>>> choices here without needing to be aware of all of this
>>>> background/baggage?
>>> 
>>> Please see comments on https://github.com/ietf-tapswg/api-drafts/issues/1334
>>> 
>>> "Complex interactions may exist between socket options in the existing BSD sockets API.
>>> There are also implementations of TAPS systems available, at least one of which is fairly comprehensive.
>>> Future interactions of properties of future protocols are also unclear in the BSD sockets API.
>>> 
>>> In a sense, we offer a safer set of options than BSD sockets, as we have constrained the generic ones to the set of properties that do not constrain selection amongst existing protocols. Everything that is protocol-specific goes in its own protocol namespace and only applies when this protocol is selected. The intent is for future protocol-specific options to also be categorized that way. We cannot guarantee that no future transport protocol will somehow be constrained by our generic properties, but the analysis in our prior RFCs (specifically the minset RFC) leads us to believe that we have chosen a workable subset."
>> 
>> I'd argue that "safer" is in the eye of the beholder. I'll certainly agree that TAPS is trying to provide a more principled and more abstract interface to transport functions (also also that the socket API's platform-dependendness is terrible), but at least a developer with sufficient motivation can concretely implement their desired behavior. I remain unconvinced that an abstraction like TAPS will lead to a stable developer experience esp. over time and across platforms.
> 
> It’s certainly fair to have a different opinion on how the usefulness and stableness of various transport/socket options will play out over time.
> 
> Personally, I think the best philosophy for setting options on a connection / socket should be to set the minimum set required, so as to not unnecessarily constrain the behavior of the stack. If an application sets many options that can eventually only be satisfied by a set of existing protocols, and not some future as-yet-undesigned protocols, then indeed the connections will be constrained to use the existing protocols that work. But apps that only set the options they strictly need will allow for more variation.
> 
> Are there specific changes you are thinking of for the document?
> 
>> 
>> Thanks,
>> Lars
>> 
> 
> 
> Thanks,
> Tommy
>> 
>