[e2e] Some questions about TCP.

Bob Braden 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.

Bob Braden

More information about the end2end-interest mailing list