Re: [Taps] TCP components

Michael Welzl <michawe@ifi.uio.no> Thu, 18 June 2015 13:54 UTC

Return-Path: <michawe@ifi.uio.no>
X-Original-To: taps@ietfa.amsl.com
Delivered-To: taps@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 86F0B1B31DC for <taps@ietfa.amsl.com>; Thu, 18 Jun 2015 06:54:29 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.91
X-Spam-Level:
X-Spam-Status: No, score=-1.91 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, T_RP_MATCHES_RCVD=-0.01] autolearn=ham
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 pthI70sfYckC for <taps@ietfa.amsl.com>; Thu, 18 Jun 2015 06:54:26 -0700 (PDT)
Received: from mail-out5.uio.no (mail-out5.uio.no [IPv6:2001:700:100:10::17]) (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 233791B31DA for <taps@ietf.org>; Thu, 18 Jun 2015 06:54:26 -0700 (PDT)
Received: from mail-mx4.uio.no ([129.240.10.45]) by mail-out5.uio.no with esmtp (Exim 4.80.1) (envelope-from <michawe@ifi.uio.no>) id 1Z5aGt-00020e-Dt; Thu, 18 Jun 2015 15:54:23 +0200
Received: from boomerang.ifi.uio.no ([129.240.68.135]) by mail-mx4.uio.no with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) user michawe (Exim 4.80) (envelope-from <michawe@ifi.uio.no>) id 1Z5aGs-0000gT-EG; Thu, 18 Jun 2015 15:54:23 +0200
Content-Type: text/plain; charset="windows-1252"
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2098\))
From: Michael Welzl <michawe@ifi.uio.no>
In-Reply-To: <8377C788-96BC-4F70-ADDD-B3E07AC814A0@trammell.ch>
Date: Thu, 18 Jun 2015 15:54:21 +0200
Content-Transfer-Encoding: quoted-printable
Message-Id: <DF226C37-7132-4348-A466-A4DDE1180F85@ifi.uio.no>
References: <5579768E.5060402@tik.ee.ethz.ch> <A3EF3A19-0E37-42E6-8D17-94164EBA7FDD@ifi.uio.no> <154FD7B7-9A01-43EC-927D-B9D71F1BC38D@tik.ee.ethz.ch> <57DC7DAB-7054-41BE-8515-626353782BBC@ifi.uio.no> <8377C788-96BC-4F70-ADDD-B3E07AC814A0@trammell.ch>
To: Brian Trammell <ietf@trammell.ch>
X-Mailer: Apple Mail (2.2098)
X-UiO-SPF-Received:
X-UiO-Ratelimit-Test: rcpts/h 8 msgs/h 3 sum rcpts/h 10 sum msgs/h 5 total rcpts 30223 max rcpts/h 54 ratelimit 0
X-UiO-Spam-info: not spam, SpamAssassin (score=-6.1, required=5.0, autolearn=disabled, RP_MATCHES_RCVD=-1.051, UIO_MAIL_IS_INTERNAL=-5, uiobl=NO, uiouri=NO)
X-UiO-Scanned: 5174C176406FCD766359416DE94DB06C32DBFB6B
X-UiO-SPAM-Test: remote_host: 129.240.68.135 spam_score: -60 maxlevel 80 minaction 2 bait 0 mail/h: 2 total 7336 max/h 17 blacklist 0 greylist 0 ratelimit 0
Archived-At: <http://mailarchive.ietf.org/arch/msg/taps/prf5SIglpxAeGzWfiFZH5P4KU3c>
Cc: Mirja Kühlewind <mirja.kuehlewind@tik.ee.ethz.ch>, "taps@ietf.org" <taps@ietf.org>
Subject: Re: [Taps] TCP components
X-BeenThere: taps@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Discussions on Transport Services <taps.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/taps>, <mailto:taps-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/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: Thu, 18 Jun 2015 13:54:29 -0000

> On 17 Jun 2015, at 12:13, Brian Trammell <ietf@trammell.ch> wrote:
> 
> hi Michael, all,
> 
> A couple of random points inline at various levels of quotation...
> 
>> On 17 Jun 2015, at 10:44, Michael Welzl <michawe@ifi.uio.no> wrote:
>> 
>> 
>> On Jun 17, 2015, at 10:28 AM, Mirja Kühlewind <mirja.kuehlewind@tik.ee.ethz.ch> wrote:
>> 
>>> Hi Michael,
>>> 
>>> see below.
>>> 
>>>> Am 17.06.2015 um 09:36 schrieb Michael Welzl <michawe@ifi.uio.no>:
>>>> 
>>>> Hi,
>>>> 
>>>> 
>>>>> On 11 Jun 2015, at 13:52, Mirja Kühlewind <mirja.kuehlewind@tik.ee.ethz.ch> wrote:
>>>>> 
>>>>> Hi all,
>>>>> 
>>>>> we gave it a first try to rewrite the component section for TCP. The insight I took from the discussion on the list is that components probably are much more linked to the implementation (choices) a certain protocol made while features are probably more high-level having the question in mind what does an application potentially want/need to know.
>>>>> 
>>>>> So for the components in TCP we now have the following list:
>>>>> 
>>>>> - Connection-oriented bidirectional communication using three-way handshake connection setup with
>>>>> 	feature negotiation and an explicit distinction between passive and active open:
>>>>> 	This implies both unicast addressing and a guarantee of return routability.
>>>>> - Single stream-oriented transmission:
>>>>> 	The stream abstraction atop the datagram service provided by IP is implemented by dividing
>>>>> 	the stream into segments.
>>>>> - Limited control over segment transmission scheduling (Nagle's algorithm):
>>>>> 	This allows for delay minimization in interactive applications.
>>>>> - Port multiplexing, with application-to-port mapping during connection setup:
>>>>> 	Note that in the presence of network address and port translation (NAPT), TCP ports are
>>>>> 	in effect part of the endpoint address for forwarding purposes.
>>>>> - Full reliability based on ack-based loss detection and retransmission:
>>>>> 	Loss is sensed using duplicated acks ("fast retransmit"), which places a lower bound on
>>>>> 	the delay inherent in this approach to reliability.
>>>>> - Error detection based on a checksum covering the network and transport headers as well as payload:
>>>>> 	Packets that are detected as corrupted are dropped, relying on the reliability mechanism
>>>>> 	to retransmit them.
>>>>> - Window-based flow control, with receiver-side window management and signaling of available window:
>>>>> 	Scaling the flow control window beyond 64kB requires the use of an optional feature,
>>>>> 	which has performance implications in environments where this option is not supported.
>>>>> - Window-based congestion control reacting to loss, delay, retransmission timeout, or
>>>>> 	an explicit congestion signal (ECN):
>>>>> 	Most commonly used is a loss signal from the reliability component's retransmission mechanism.
>>>>> 	TCP reacts to a congestion signal by reducing the size of the congestion window;
>>>>> 	retransmission timeout is generally handled with a larger reaction than other signals.
>>>>> 
>>>>> We are currently still working on the list of features that results from thiese components but we are not there yet. Probably we not only need the features itself but also properties/aspects (or however you want to call this) of the feature. We already had this discussion a bit but wanted to postpone the decision if we really need to define an own term for this until we are sure that we need it.
>>>>> 
>>>>> We are posting this list of (TCP) components now because we would like to get some feedback if this goes into the right direction/is on the right level of detail before we go on and apply this also to other protocols.
>>>> 
>>>> I agree that the list below is closer to what I think a "component" should be ... but looking at it, is it not even clearer now that components are not what TAPS is after? To me this list now contains lots and lots of details that are irrelevant to the service provided to the application.
> 
> That's part of the point we're trying to address here. The realization we had here is that components *don't* necessarily map to feature, and it's not clear that we can simply ignore those components that don't map, since they may have impact on the interfaces/features it is possible to (reasonably) implement atop those protocols.
> 
>>>> Not harmful to list but pretty useless?!
> 
> Let's start with TCP as probably the most difficult example (indeed, that's why we worked out this "new" arrangement of components for TCP first). A completely clean and unambiguous decomposition of TCP into its features -- what, I agree, we're after in the end -- is not *really* possible, because the protocols as defined and implemented weren't really composed of discrete features. The evolution of loss-based congestion control, for instance, was predicated on the particular loss signals that were available at the time it was first defined. The error detection mechanism likewise relies on the fact that reliability is provided by retransmission. One could say that given the parallel evolution of computing power that all these choices made by TCP were the only obvious ones at the time. But it's precisely the co-evolution of reliability and congestion control that makes gluing FEC to TCP so fraught with peril. That's an important point to capture IMO.
> 
> I expect that the same exercise for SCTP will show a simpler mapping between components and features, since it *was* designed as a composition of features.

I expect that too, but I still don't understand the point of the component list above. I mean, yes, you may be able to map and say "we need components X Y Z to provide features A and B" but how does this help TAPS?


>>> In this case we decided to list/discuss rather some more details, so that people can understand what we had in mind. We might remove some of these details/explanations at the end (or move those parts that are actually relevant into the feature section (4)).
>>> 
>>>> 
>>>> And how do you draw the line for what goes in and out of such a list? E.g., on which basis did you decide that FACK, FRTO, PRR and DSACK are not mentioned?
>>> 
>>> We tried to ask ourself which parts have an effect on the behavior of the flow that could potentially be of interest for the application. We might have missed some points. Actually Gorry already point out some.
>> 
>> Okay; btw just to be clear, I didn't mean that FACK etc. should be in the list - on the contrary! My point was really about "how do you draw the line", which you answered in the first sentence here.
>> 
>> 
>>> The next step is to work on the feature list and figure out how these things that are interesting for the application would be described in a more general way (independent of the concrete algorithm that is used by one protocol) and also discuss which features actually should be exposed because they have a real use for the application.
>>> 
>>>> 
>>>> To me, this whole thing is just too full of arbitrariness. We should aim for a systematic approach that minimizes the number of arbitrary decisions made IMO.
>>> 
>>> For us the systematic approach is to look at the implementation of existing protocol an figure out which algorithm have an influence on the traffic that might be interest for a higher layer to control. So we always had, to some extend, the application in mind.
>> 
>> Okay, I understand. Thanks for clarifying!
>> 
>> 
>>> However, you could go for a even more generic approach and only look at the implementation and as a first step figure where are any knobs that in principle could be configurable and then afterwards discuss all of these very specific knobs. I though about this approach and think it would be an interest exercise and potentially the right way to go. But I also think that the overhead would be super large and I don’t think it would give us much more than we have right now. So we the current approach we might need to expect some arbitrariness…
>> 
>> I lean towards this other one, of beginning with the knobs,
> 
> ... understanding that interface definitions aren't just about which knobs (and indicators) the API provides, but also the interaction patterns it enables, and that these interaction patterns can also be made inefficient or even impractical by the details of the protocol in question. (It's always *possible* to implement object transfer over streams, or time domain transfer over objects, or to translate asynchonous events into a synchronous API. That the Web and video thereon "work" is proof of that. You can run the whole Internet over DNS, if you want to. It would not work as well as the one we have today. :) )

Yes, I agree, and I hope that this won't really bite us... or what's your plan for addressing this problem?


>> but not with the implementation but rather the "abstract API" as Joe called it: the interface to the app as defined in the RFCs (for where it really *is* defined).
>> 
>> I think that this discussion with Joe maybe suffered from focusing on TCP. SCTP is perhaps a better starting point because it supports almost everything.
> 
> We can certainly do SCTP next, which should make the exercise look less arbitrary. (FWIW I don't think we can *eliminate* arbitrary decisions in classification and where to cut the line between components, or to determine which components are worth talking about. But minimizing them is a good goal. :) )
> 
>> So I'm thinking that a different (and, to me, perhaps more appropriate and more systematic) method to get a list of features could be to start with the read / write options in RFC 6458, extend it with all such options from the other protocols, and then, protocol by protocol, ask: "what does this protocol provide that the list now doesn't contain?". Not sure the overhead of this approach would be super large?  But I agree, you may end up with the same list the way you do it now.
> 
> Again, that captures knobs and indicators, less so interaction patterns. (I will say I'm not 100% convinced the interaction patterns are important to capture for the individual protocols, but paying attention to them will be *crucial* to making sure that TAPS-the-system sees uptake among application and platform developers)

I agree about that, but components won't capture these interaction patterns either, or (why/how) would they?

Cheers,
Michael