> On 17 Jun 2015, at 12:13, Brian Trammell <i...@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 <mich...@ifi.uio.no> wrote:
>> 
>> 
>> On Jun 17, 2015, at 10:28 AM, Mirja Kühlewind 
>> <mirja.kuehlew...@tik.ee.ethz.ch> wrote:
>> 
>>> Hi Michael,
>>> 
>>> see below.
>>> 
>>>> Am 17.06.2015 um 09:36 schrieb Michael Welzl <mich...@ifi.uio.no>:
>>>> 
>>>> Hi,
>>>> 
>>>> 
>>>>> On 11 Jun 2015, at 13:52, Mirja Kühlewind 
>>>>> <mirja.kuehlew...@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

_______________________________________________
Taps mailing list
Taps@ietf.org
https://www.ietf.org/mailman/listinfo/taps

Reply via email to