[e2e] Some questions about TCP.
braden at ISI.EDU
Mon Nov 23 09:53:26 PST 2009
Detlef Bosau wrote:
> Hi to all.
> The following questions may be stupid - however, the most stupid
> questions are the never asked ones ;-)
> 1.: Recently, I was told, however I did not find a reference in some
> RFC, we had two distinct packet types in TCP:
> - those _with_ payload, which are _data_ _segments_,
> - those _without_ payload, which are _acknowledgements_.
"Two distinct packet types" is a mistaken model. There is no such
concept in TCP, which is a rather more subtle protocol. Every segment
carries all the control bits, and TCP uses concurrent state machines,
one operating in each direction. Recall that TCP allows simultaneous
data transmission in both directions on the same connection.
A segment without a payload was sometimes called an "empty ACK segment"
or maybe simply an "ACK segment" when that was unambiguous. But this
terminology is not part of the protocol. When Postel used the term
"acknowledgment", he was referring to the effect of the ACK field of the
packet, not to some distinct packet type. For convenience, Postel and
his cohorts who developed the TCP spec used the phrase "XXX segment" to
indicate "a segment whose effect is to carry information XXX" (but the
segment may also carry other information). Thus, 793 refers to "RST
segments" and "SYN segments" (and probably "FIN segments", tho I have
not checked). As Noel (?) pointed out, after synchronization the ACK
bit is always on, so EVERY TCP segment is effectively an acknowledgment
segment. And indeed, a segment carrying data ("text" in 793) was often
called a "data segment" in discourse, but that does not make it a term
in the protocol.
A useful reference for what Postel and cohorts thought the TCP spec is
contained in RFC 1122, Section 4.2. RFC 1122 represents the combined
efforts of some 50 IETF members.
More information about the end2end-interest