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

Tommy Pauly <tpauly@apple.com> Sat, 11 November 2017 03:58 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 DCC03128D19 for <taps@ietfa.amsl.com>; Fri, 10 Nov 2017 19:58:13 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.299
X-Spam-Level:
X-Spam-Status: No, score=-4.299 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_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 Dcu3m5loh74y for <taps@ietfa.amsl.com>; Fri, 10 Nov 2017 19:58:08 -0800 (PST)
Received: from mail-in4.apple.com (mail-out4.apple.com [17.151.62.26]) (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 51983124D68 for <taps@ietf.org>; Fri, 10 Nov 2017 19:58:08 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; d=apple.com; s=mailout2048s; c=relaxed/simple; q=dns/txt; i=@apple.com; t=1510372688; 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=IcW1AaVoCeXxIOpunQkBsxz8Q+IIbSyi9h0wpuEsDqo=; b=gkffx3BE1AzeTlovv5yHdA1uEnccesRh3hvOSirug70HCb3u1EZ7h1bmPZUSwJul op85YZRMfdDXUb7E5bj3ZzHiYNI2IHV99XNmlXNDNNx7WG6ezrWFv2Zo4YU2EW71 V7klr7/xlzc6ck3GSFJcw1b+sw+kTWLOSziLIvCaOk6XShEeB9/UlxTZ2s99W7T5 xjFDpLsTgyNc0e2OM9VyqYiHp6Mp4qkoEQYtjMNaAWLIxzmnuKa+vgwIpgHiLAG/ iAC4BBPVoCd+yX8t47+nTpVbLtSN1qH2lw/BveE6XNKlT5tZc7q5MbKSC8OwBg/k an1fcUuBHZxB6hgQZmuSQA==;
Received: from relay3.apple.com (relay3.apple.com [17.128.113.83]) (using TLS with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mail-in4.apple.com (Apple Secure Mail Relay) with SMTP id B7.4C.16042.055760A5; Fri, 10 Nov 2017 19:58:08 -0800 (PST)
X-AuditID: 11973e12-801fd9c000003eaa-8f-5a06755089a6
Received: from nwk-mmpp-sz12.apple.com (nwk-mmpp-sz12.apple.com [17.128.115.204]) by relay3.apple.com (Apple SCV relay) with SMTP id C8.07.12852.F45760A5; Fri, 10 Nov 2017 19:58:07 -0800 (PST)
MIME-version: 1.0
Content-type: multipart/alternative; boundary="Boundary_(ID_PLSWVqghKLmb5sBYL1ktbA)"
Received: from [17.234.53.248] by nwk-mmpp-sz12.apple.com (Oracle Communications Messaging Server 8.0.1.3.20170825 64bit (built Aug 25 2017)) with ESMTPSA id <0OZ800C0WJ0TPQ50@nwk-mmpp-sz12.apple.com>; Fri, 10 Nov 2017 19:58:07 -0800 (PST)
Sender: tpauly@apple.com
From: Tommy Pauly <tpauly@apple.com>
Message-id: <3702C080-9EEA-441C-96C3-5A2A1FCC7ABA@apple.com>
Date: Sat, 11 Nov 2017 11:58:03 +0800
In-reply-to: <7F6D4FB0-3D41-4E06-BD11-54D897FA5345@ifi.uio.no>
Cc: "taps@ietf.org" <taps@ietf.org>
To: Michael Welzl <michawe@ifi.uio.no>
References: <CF0546DA-422B-4AA3-A593-1BC133AD730D@ifi.uio.no> <A19AC4F5-1A56-4F9B-A5C2-3643CD57FBC1@apple.com> <7F6D4FB0-3D41-4E06-BD11-54D897FA5345@ifi.uio.no>
X-Mailer: Apple Mail (2.3445.5.5)
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrILMWRmVeSWpSXmKPExsUi2FAYrBtQyhZlMHMBi8WPsztZLe7EODB5 LFnyk8lj9eqHzAFMUVw2Kak5mWWpRfp2CVwZiy/dYix4WlHR0NnK2sD4PbmLkZNDQsBE4mT3 cfYuRi4OIYHVTBJXZ/WxwCQWd5+GShxilLi5bANYgldAUOLH5HtgNrNAmMSHc/Ohir4ySkxs ncPaxcjBISwgIbF5TyJIDZuAisTxbxuYIXptJDaffABmCws4Spz/MIURxGYRUJU4tWEFK4jN KWAn0bCxAWq+ssTjWY1gtoiAmsSJ5avZQGwhgSWMEuffBEMcqijxcFMXK8gNEgJT2CSOfzjM NoFRaBaSW2chuXUW0HnMAuoSU6bkQoS1JZ68u8AKYatJLPy9iAlZfAEj2ypGodzEzBzdzDwT vcSCgpxUveT83E2MoDiYbie0g/HUKqtDjAIcjEo8vAZObFFCrIllxZW5hxilOViUxHlTXzFE CQmkJ5akZqemFqQWxReV5qQWH2Jk4uCUamCMq7kYvUMuWqvsX0jCiQcnY2N6PklW1NX/SZ3I fM5gxZJDz9lltMMUTN+4PVysqKh9sa3DJOhoV+PHJefENf+uOPxB2OzXtlnPPP/3+9+3/zQ1 5A3Ta8+ZGephvgbKn2ZGf9uU21jwJ94twLOKs2bD6ixv08eJhaIqSh5p8imr5A9MCeO/vkmJ pTgj0VCLuag4EQDXArjUZAIAAA==
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrCLMWRmVeSWpSXmKPExsUi2FB8Rte/lC3K4MU/G4sfZ3eyWtyJcWDy WLLkJ5PH6tUPmQOYorhsUlJzMstSi/TtErgyFl+6xVjwtKKiobOVtYHxe3IXIyeHhICJxOLu 0+xdjFwcQgKHGCVuLtvAApLgFRCU+DH5HpjNLBAm8eHcfKiir4wSE1vnsHYxcnAIC0hIbN6T CFLDJqAicfzbBmaIXhuJzScfgNnCAo4S5z9MYQSxWQRUJU5tWMEKYnMK2Ek0bGyAmq8s8XhW I5gtIqAmcWL5ajYQW0hgCaPE+TfBEIcqSjzc1MU6gZF/FpLzZiE5bxbQRcwC6hJTpuRChLUl nry7wAphq0ks/L2ICVl8ASPbKkaBotScxEpjvcSCgpxUveT83E2M4LAtDN7B+GeZ1SFGAQ5G JR5eAye2KCHWxLLiylxgGHEwK4nwsoUBhXhTEiurUovy44tKc1KLDzFKc7AoifN2ZDBECQmk J5akZqemFqQWwWSZODilGhiXbDt88e7z4IaW3lufbGZoKt9rNu89cbV8vS6vK+tiQab73EcF +DqjO4+0Z/PWFZg1JEf8KrvyPenZ5HMRSx/8n/aXvZGptGTSEtvtt2Y1uUYumbjune9NMRXH Rp4Q2duVqeKPu/bs/+V2Z8fEhSFeGYrra3/VLI4rEtvLNrHz6y4ZPclK1UAlluKMREMt5qLi RACmU4qvVwIAAA==
Archived-At: <https://mailarchive.ietf.org/arch/msg/taps/uIe0crPZdxq6tPoe2QZSJ_sBQWI>
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 03:58:14 -0000


> On Nov 11, 2017, at 10:36 AM, Michael Welzl <michawe@ifi.uio.no> wrote:
> 
> 
>> On Nov 11, 2017, at 10:06 AM, Tommy Pauly <tpauly@apple.com> wrote:
>> 
>> 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.
> 
> Oh?!  That would be fantastic!!  But I stumbled over a number of things that require a system on the other side, or they just couldn’t happen (like the “carrier forking” notification I quoted below - but there were more). If you say you can talk to a “legacy” server that knows nothing about Post, WHAT does that server speak? Legacy which protocol?  Maybe it’s just a matter of me thinking TCP, and you thinking TLS… dunno! Tell me   :)

So, since Post (and TAPS in general) isn't defining any new protocol features, we need to of course be compatible with all existing protocols. Certainly, some functionality is a bit degenerate in some cases.

Whatever the server speaks, the client needs to conform to. So, we use our Post implementation for raw TCP, raw UDP, TLS over TCP, HTTP/2 Streams over TLS over TCP, QUIC streams over UDP, etc. These are all standard server configurations, but Post offers a client application a single set of APIs to talk over any of these protocols.

In the case of "Carrier Forking", that's essentially what you say to the protocol stack when you want to open a new stream to the same place. So, when I call "fork Carrier", it turns into:
- For raw UDP/TCP or TLS (or anything that is mono-streamed), open a new five-tuple to the same remote endpoint
- For HTTP/2 and QUIC, open a new stream on the same connection

> 
> 
>> - 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.
> 
> It’s clear to me that we want a higher abstraction level than what the list from minset has - e.g., rather than a DSCP value, it would be better to specify general requirements (low latency or such) for a carrier. Rather than saying “disable Nagle”, we could also say “ low latency, even if it comes at the cost of some overhead” - we do such things in the NEAT API too. You’re focused on the interaction with the application (e.g. callback-based instead of traditional socket-style) - which is fine, but I think doesn’t have much to do with the actual protocol choice.
> 
> As for being more forward-looking, I wonder what the new transport features are that we’re missing out on (things that apps really see). I follow QUIC from a slightly too large distance (I simply run out of cycles there :(  ), but so far I’m not sure there’s anything we’d be missing  (but that’s maybe also because I’m not an HTTP/2 expert either). Except security of course, but there the argument is perhaps that it’s enough to consider falling back to TLS?

QUIC is using TLS 1.3, so it can give equivalent security properties to HTTP/2. Doing fallback between these is definitely an important feature. I think this flexibility is why the API needs to allow per-protocol configs.

> 
> As for how you represent Nagle etc. in your code, that sounds good to me, but I see an issue in that so much transport functionality is simply not covered by the draft. E.g., the packet sizes / fragmentation thing is important too … yes that’s lower level stuff, but UDP-based applications will only get inefficient if they don’t get this information exposed, which risks having app programmers move to the old ways again IMO.

A Post API definitely allows access to IP-packet level configuration and metadata. However, you're right that the draft doesn't specify this in detail now. I still think that may be a separate doc, but yeah.

> 
> So, the general design approach of post-sockets is IMO fine, but what I’m missing is a long section with the nitty-gritty details on how such a system would really be implemented (not the happy eyeballing bit, this is fine to be elsewhere - but “how would this work with current protocols”). If I was to implement it from the current draft, I’d have a ton of question marks - e.g. the draft convinced me that there must be a system on both sides (this issue is also not discussed in the draft).

Getting feedback on how to clarify this for the implementer will be really important, so thanks for this feedback! I'd also like to discuss with the WG the scope of various documents that we want to produce. If you have one document that does the abstract connection-management and I/O API and all the protocol options and the racing/fallback strategy, that would be a very long and complex doc.

Best,
Tommy

> 
> Cheers,
> Michael
> 
> _______________________________________________
> Taps mailing list
> Taps@ietf.org
> https://www.ietf.org/mailman/listinfo/taps