Re: [Taps] Review of draft-trammell-taps-post-sockets-03

Tommy Pauly <tpauly@apple.com> Sat, 11 November 2017 02:06 UTC

Return-Path: <tpauly@apple.com>
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 AB935128BA2 for <taps@ietfa.amsl.com>; Fri, 10 Nov 2017 18:06:33 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.3
X-Spam-Level:
X-Spam-Status: No, score=-4.3 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=apple.com
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 N5XZIitdYva7 for <taps@ietfa.amsl.com>; Fri, 10 Nov 2017 18:06:31 -0800 (PST)
Received: from mail-in23.apple.com (mail-out23.apple.com [17.171.2.33]) (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 83DEA12778E for <taps@ietf.org>; Fri, 10 Nov 2017 18:06:31 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; d=apple.com; s=mailout2048s; c=relaxed/simple; q=dns/txt; i=@apple.com; t=1510365990; h=From:Sender:Reply-To:Subject:Date:Message-id:To:Cc:MIME-version:Content-type: Content-transfer-encoding:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-reply-to:References:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=hO0pTNnY+zkLF4ulGPubCgY9uRiKH5iq+JHOknsoT+o=; b=eKDGcoSrDH0eOJ9H7clBY5kgiDo2g/rbWQlgBLQivImd+EaJ8mTn1ce5/hpkhQkl jSgIIOse/NVZkymzRtUy1TSRFetKDsXCIzKYu9Oc/vupmhUINifGq6OztvK3G83G 9JAdL26DDuOAzxVVnW3weF2uXOOq991jyICahmFQoPZi8cJhMN1kYmHCvbcySVZV 0hCFlTCwHr+uw7jAGwbUB7SUI/rYbEW/peaEgEWqT+IIWVn/OlWWHvbODP+QSAeu OoMOkYCDsXI5Xdn56fhE4C9yf1Xy/w/hv8jhv2VCwcxWK6Wr1Qf1IgywsdgbKuO5 m470ipMvtF3JGgfc9Y3lGg==;
Received: from relay8.apple.com (relay8.apple.com [17.128.113.102]) (using TLS with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mail-in23.apple.com (Apple Secure Mail Relay) with SMTP id 2F.29.29340.62B560A5; Fri, 10 Nov 2017 18:06:30 -0800 (PST)
X-AuditID: 11ab0217-df6059c00000729c-17-5a065b26686c
Received: from nwk-mmpp-sz09.apple.com (nwk-mmpp-sz09.apple.com [17.128.115.80]) by relay8.apple.com (Apple SCV relay) with SMTP id F4.FE.22651.62B560A5; Fri, 10 Nov 2017 18:06:30 -0800 (PST)
MIME-version: 1.0
Content-type: text/plain; CHARSET="US-ASCII"
Received: from [17.234.56.75] by nwk-mmpp-sz09.apple.com (Oracle Communications Messaging Server 8.0.1.3.20170825 64bit (built Aug 25 2017)) with ESMTPSA id <0OZ800C0UDU5EM60@nwk-mmpp-sz09.apple.com>; Fri, 10 Nov 2017 18:06:30 -0800 (PST)
Sender: tpauly@apple.com
From: Tommy Pauly <tpauly@apple.com>
In-reply-to: <CF0546DA-422B-4AA3-A593-1BC133AD730D@ifi.uio.no>
Date: Sat, 11 Nov 2017 10:06:04 +0800
Cc: "taps@ietf.org" <taps@ietf.org>
Content-transfer-encoding: quoted-printable
Message-id: <A19AC4F5-1A56-4F9B-A5C2-3643CD57FBC1@apple.com>
References: <CF0546DA-422B-4AA3-A593-1BC133AD730D@ifi.uio.no>
To: Michael Welzl <michawe@ifi.uio.no>
X-Mailer: Apple Mail (2.3445.5.5)
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrNLMWRmVeSWpSXmKPExsUi2FCYpqsWzRZl8HCZhsWPsztZLe7EODB5 LFnyk8lj9eqHzAFMUVw2Kak5mWWpRfp2CVwZR7peMxb8ca94s3kBSwPjTssuRk4OCQETid7f b9i7GLk4hATWMknMvTGBESZx+NpyqMRBRol17y4ygSR4BQQlfky+xwJiMwtoSXx/1MoCUfSF UWLB1F6gDg4OYQEJic17EkFqhAUcJc5/mAI2lE1AReL4tw3MIDangJ1E4+T7YDaLgKrEn/dt TBAzlSUez2qEmq8t8eTdBVaIvTYSm5oXgdUICdhKXDy6D8wWEVCTOLF8NRvE0YoSDzd1sYLc IyHwl1Vi4tyNjBMYhWchuXsWkrtnIdmxgJF5FaNwbmJmjm5mnpGxXmJBQU6qXnJ+7iZGUGiv ZhLfwfj5teEhRgEORiUeXgMntigh1sSy4srcQ4zSHCxK4rx3tv6OFBJITyxJzU5NLUgtii8q zUktPsTIxMEp1cA4v+vNhgyHy7UzZcVOr7uue7xwvX9ssfzx3282fOUrfSSp9Ftc/oL9U5+8 dV8EL771mLds8aMUJe2LshIajxMYb4g7HOa8XSSp4BAgkn9aNX/Co4p74rK3qzYE1y6z+NRt urorkOt9XGJm8GrWgjnPojpd7m4Jfui26EClUDyrUvkhPk7tP0uVWIozEg21mIuKEwFGu9gb TgIAAA==
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrLLMWRmVeSWpSXmKPExsUi2FAcoKsWzRZlcHq/oMWPsztZLe7EODB5 LFnyk8lj9eqHzAFMUVw2Kak5mWWpRfp2CVwZR7peMxb8ca94s3kBSwPjTssuRk4OCQETicPX lrN3MXJxCAkcZJRY9+4iE0iCV0BQ4sfkeywgNrOAlsT3R60sEEVfGCUWTO0F6uDgEBaQkNi8 JxGkRljAUeL8hymMIDabgIrE8W8bmEFsTgE7icbJ98FsFgFViT/v25ggZipLPJ7VCDVfW+LJ uwusEHttJDY1LwKrERKwlbh4dB+YLSKgJnFi+Wo2iKMVJR5u6mKdwCgwC8mps5CcOgvJ2AWM zKsYBYpScxIrLfQSCwpyUvWS83M3MYIDsTBtB2PTcqtDjAIcjEo8vAZObFFCrIllxZW5hxgl OJiVRHjZwoBCvCmJlVWpRfnxRaU5qcWHGKU5WJTEeTszGKKEBNITS1KzU1MLUotgskwcnFIN jPvePGL9svpE94GmF51bd3z8eGc/1+G3Z4SOvFt38XWU6517tU2aiWrTj73ds3m9wIbfQdPE hbd/WCf9p8jzlPv27uSisJS51/ZOPnfM9//NS4uOhk+0f3j2w9QvKW2BG8QLK/6/aUzfUnvF t/2XaWtVnNO1qvMOVTVWEQcmvilcJBbVunb99sW/lFiKMxINtZiLihMBZdVcE0ACAAA=
Archived-At: <https://mailarchive.ietf.org/arch/msg/taps/HvnSdWgpCInLrRVruEMOqqUah4U>
Subject: Re: [Taps] Review of draft-trammell-taps-post-sockets-03
X-BeenThere: taps@ietf.org
X-Mailman-Version: 2.1.22
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: Sat, 11 Nov 2017 02:06:33 -0000

Hi Michael,

Just a couple initial notes that may help:

- The version diff you should look at is between -01 and -03. -02 is the same as -03, but had a typo.

- You've mentioned previously that you thought that Post requires both peers to use that API. That is absolutely not the case in any way. Having implemented Post myself, I am only communicating to "legacy" servers that know nothing about Post. I think this fundamental understanding needs to be cleared up before coming to any conclusions. We can discuss during the WG.

- The point of the API is to give the shape of the application interaction, which is why you find it general. I believe that many of the protocol-specific options like you mention (disabling Nagle, retransmissions, etc) don't belong to this main abstract API draft, but to a different document that goes into how to configure options that can be used for setups like TCP/UDP. Again, in my implementation of Post, all of these options exist as part of the Configuration object mentioned in the draft. However, as I'll discuss in the WG, I believe that the general shape of the API needs to be defined to be more-forward looking than just what we've specified with the minset for TCP/UDP/SCTP. Essentially, these become a set of Configuration options that can be used, but as transport protocols continue to evolve (and when we need more protocol-specific options), we need to be able to expand. Certain aspects of the minset, like the connection state management, are of course general and common enough to be part of the highest level of API description.

Thanks,
Tommy

> On Nov 11, 2017, at 9:43 AM, Michael Welzl <michawe@ifi.uio.no> wrote:
> 
> Dear all,
> 
> Because of the planned request for draft-trammell-taps-post-sockets-03 to become a WG item, I gave the draft another close read and decided to write a review based on this. I hope it's useful.
> 
> To me, post-sockets aims in the right direction - I like a number of things  about it: the introduction of higher-layer concepts such as the carrier and association; I suspect that the long-term association management could also be implemented one-sided, which is nice. I like the idea of "forking" a carrier, which would clearly translate into doing multi-streaming "under the hood" whenever that's possible (side note: from the list on pages 7/8, it seems that *only* "Listener" can be forked. Why not a Source? This seems odd to me). Finally, obviously I also agree that being message-oriented is the right way to go.
> 
> 
> On the negative side, I still see several problems here (actually almost nothing has changed from --02 to -03), listed below:
> 
> The biggest problem I see is that this has very limited usage scenarios, as it requires a post-socket system on both sides (there's quite a bit of functionality in there that won't work otherwise - to give an illustrative example: "When a Carrier is forked, its corresponding Carrier at the remote endpoint receives a fork request, .."). I find it particularly disappointing because, in my opinion, it wouldn't take much to make this able to fall-back to TCP such that e.g. a post-sockets client could talk to an existing TCP server. Anyway, what IS this falling back to? If you add functionality both on the sender and receiver side, you require a post-sockets system on both sides - and then you could just as well consistently run over UDP or TCP or HTTP/2 or whatever else you want, without any fall-backs (and as this develops new transport functionality, we're then really moving away from the TAPS charter). I think we must better understand what types of fall-backs are envisioned here.
> 
> The document talks about "asynchronous reception", as if this was a feature that would only be attainable with a novel approach, and/or a message-based transport. I see having a callback-based API and a socket-style API as largely orthogonal from the protocol below: one can of course also write a callback-based API over TCP... the real problem is to know after how much received data the receiving app should be notified, by whatever means - that's just a general dilemma, and not a new problem, as the PUSH bit in RFC 793 shows. Messages may seem to make this easier, but then you have to start wondering how large can messages be, how we should handle partial messages... e.g., you may need a signal from the receiver-side TAPS system to the app to say "you have stored half a message, but please throw this data block away now, you'll never get the rest". You have some discussion of partial messages in this draft, and we've been around that block with SCTP. IMO, the right approach is to lea
> ve all of that out: define a short max limit, and let an application take care of splitting into smaller messages itself (since you have message dependencies, why do you need to have large messages too, and not just smaller sub-messages that all sequentially depend on another?). This also makes prioritization more meaningful.
> 
> Generally, the draft just leaves many questions unanswered at this stage, as it stays at a rather high level and lists most services just as examples, saying that more could be possible. If it's that vague, how should anybody implement such a system? Here's a list of transport features (from minset) that we will lose if we don't offer them to an application, and that I didn't see mentioned in post-sockets (sorry if I missed some!). Some of them may seem a bit odd and unimportant, others less so (this is from appendix A2, where "T" and "U" mean "can be supported with a fall-back to TCP and UDP, respectively):
> 
>  o  T,U: Specify number of attempts and/or timeout for the first
>     establishment message
>  o  T: Change timeout for aborting connection (using retransmit limit
>     or time value)
>  o  T: Suggest timeout to the peer
>  o  T,U: Disable Nagle algorithm
>  o  T,U: Notification of Excessive Retransmissions (early warning
>     below abortion threshold)
>  o  T,U: Specify DSCP field
>  o  T,U: Notification of ICMP error message arrival
>  o  T,U: Set Cookie life value
>  o  T,U: Disable checksum when sending
>  o  T,U: Disable checksum requirement when receiving
>  o  T,U: Specify checksum coverage used by the sender
>  o  T,U: Specify minimum checksum coverage required by receiver
>  o  T,U: Specify DF field
>  o  T,U: Get max. transport-message size that may be sent using a non-
>     fragmented IP packet from the configured interface
>  o  T,U: Get max. transport-message size that may be received from the
>     configured interface
>  o  T,U: Obtain ECN field
>  o  T,U: Enable and configure a "Low Extra Delay Background Transfer"
>  o  T,U: Request not to delay the acknowledgement (SACK) of a message
>  o  T,U: Notification that the stack has no more user data to send
> 
> 
> From this list, a few functions that I would consider important are:
> 
> - DSCP, and enabling and configuring LEDBAT-like behavior: these two could be lumped together in a higher-level request, but they're not just a priority. Sure, your message "niceness" could be translated into a DSCP choice, but I mean that an app may want to be able to control more (e.g. do a general per-carrier configuration for low latency or LBE, for example). Speaking of LEDBAT, post-sockets also doesn't say anything about whether the transport is congestion controlled or not (which translates into: does the app have to worry about it?). Another congestion control thing: access to the ECN flag in case of UDP should also be covered in some form.
> 
> - Notification that the stack has no more user data to send: this is the TCP_NOWAIT_LOWAT function. Hmmm... wait!  At first I thought the binding to an .OnAcked() event handler can't be done with TCP, but if the post-sockets layer would intelligently use TCP_NOWAIT_LOWAT, then you could pull this off.
> 
> - Get max. transport-message size that may be sent using a non-fragmented IP packet from the configured interface: this is useful to avoid fragmentation overhead, and
> 
> - Specify DF field => if we fall back to UDP, we need this in order to do PMTUD.
> 
> 
> ... and then there's also the need for early configuration of some things to guide protocol choice, which I wrote as a decision tree in draft-ietf-taps-minset-00. While I agree with your idea of specifying a limited set of protocols to use - we do the same with policy in NEAT - that can't be all: a TAPS system should probably prevent, e.g., first picking UDP and then getting a request for reliability. That brings us back to the question about what you're planning to fall back to, of course.
> 
> 
> I hope this was helpful,
> 
> cheers,
> Michael
> 
> _______________________________________________
> Taps mailing list
> Taps@ietf.org
> https://www.ietf.org/mailman/listinfo/taps