[e2e] TCP Framing
Phillip Conrad
conrad at joda.cis.temple.edu
Sat Mar 24 09:00:59 PST 2001
At 05:40 PM 3/23/2001 -0500, David P. Reed wrote:
>Bob - I agree with you that having TCP control the framing underneath it
>places a significant burden on future evolution of the TCP and IP. You
>are right, as well, about the intention of the TCP spec to avoid linking
>segmentation to the sequence of calls - it was considered and dropped.
>
>And for that matter, I still don't see the need. If your data should be
>processable out of order, why not use multiple TCP connections, RTP, or
>(gasp) UDP? If the data needs to be processed in order, then framing can
>be embedded in the data stream.
Without making any comment on the TCP framing question one way or the
other, I think I can address David's last question ("why not
use...?") Let's take each of the proposed alternatives in turn:
>Why not use multiple TCP connections
Two reasons: (1) fairness (2) slow start/congestion avoidance.
Fairness: If I use "n" TCP connections for a single flow because I have
three logical streams that I want to be processed out-of-order with
respect to one another, then I am
getting "n" times greater a share of the bandwidth on congested links that
I should reasonably be entitled to.
Slow-start/congestion avoidance: if I have "n" TCP connections for my
packet flow rather than one, there is no communication among them. If one
of my "n" TCP connections experiences a packet loss, then I should probably
back off my sending rate on all three.
My expectation is that having "n" connections all independently doing
slow-start/congestion avoidance to find an appropriate sending rate, would
mean that each of the flows would converge to an appropriate sending rate
more slowly, than if there were a single flow, with the result that the
overall goodput of the network is reduced. I may be wrong on this point..
. sometimes intuition leads us astray. If NS-2 work hasn't already been
done to investigate this point, it probably should be... but I'd be
surprised if it hasn't already. (If someone reading this message knows of
such work, could they point it out?)
>RTP
RTP, it seems to me, is widely misunderstood. While RTP *does*
contain some transport layer functionality (e.g. end-to-end delivery,
sequence numbers, etc.) RTP is most definitively NOT a transport protocol
in the sense that TCP, UDP, or SCTP are transport protocols. Typically,
RTP must be layered on top of one of those (TCP, UDP, SCTP, or something
else in that category). Thus it is a red herring in this discussion.
>or (gasp) UDP?
Apart from the issue of reliability, the main reason: flow
control/TCP-friendly congestion control. Applications without flow control
don't work well, and those without TCP-friendly congestion control are
"considered harmful". Building TCP-friendliness *correctly* into an
application built on top of UDP is a corner that many developers are
inclined to cut.
In short, applications need a wide variety of qualities of service at the
transport layer: total order, partial order, unordered service... reliable,
unreliable, or something in between... but what ALL applications need to be
good network citizens is flow-control and TCP-friendly congestion control.
To my way of thinking, this is why the time is right for SCTP, which offers
a choice between reliable/ordered service, reliable/partially ordered
service, and now has extensions under development for unreliable and
partially reliable service as well.
More thinking on this topic can be found at:
http://www.cis.udel.edu/~pconrad/thesis and in some tech reports at
http://netlab.cis.temple.edu/techrpts.
Phill Conrad
Asst. Professor, CIS Dept., Temple University
More information about the end2end-interest
mailing list