
The TCP/IP Guide - Version 3.0 (Contents) ` 889 _ © 2001-2005 Charles M. Kozierok. All Rights Reserved.
TCP Message Formatting and Data Transfer
The previous section described how two devices using the Transmission Control Protocol
establish a TCP connection, as well as how that connection is managed and eventually
terminated. While connections are a key part of how TCP works, they are really a means to
the ultimate end of the protocol: sending data. Employing the TCP sliding window
mechanism, a special segment format and several features, TCP devices are able to
package and send data over the connection, enabling applications to communicate.
In this section, I describe the actual mechanism by which TCP messages are formatted and
data is transferred between devices. I begin with a look at the important TCP segment
format, which describes the fields in each TCP message and how they are used. I provide a
description of the method used to calculate the checksum in TCP (as well as UDP)
messages, and the reason why a special “pseudo header” is used. I discuss the Maximum
Segment Size (MSS) parameter and its significance. I then talk about exactly how the
sliding window mechanism is used to transfer and acknowledge data. I conclude with a
description of two special data transfer features: the “push” feature for immediate data
transfer, and the “urgent” feature for priority data transfer.
Background Information: This section assumes that you are already familiar with
TCP concepts such as sequence numbers, segments, and the basics of the TCP
sliding window mechanism. If you are not, I’d strongly recommend reading the TCP
fundamentals section before proceeding here.
TCP Message (Segment) Format
In the TCP fundamentals section, I described one of the most interesting jobs that TCP
performs: it allows an application to send data as an unstructured sequence of bytes, trans-
parently packaging that data in distinct messages as required by the underlying protocol
that TCP uses (normally the Internet Protocol, of course). TCP messages are called
segments, the name referring to the fact that each segment is a portion of the overall data
stream passing between the devices.
Roles Performed by TCP Segments
TCP segments are very much “jack of all trade” messages—they are flexible and serve a
variety of purposes. A single field format is used for all segments, with a number of header
fields that implement the many functions and features for which TCP is responsible. One of
the most notable characteristics of TCP segments is that they are designed to carry both
control information and data simultaneously. This reduces the number of segments sent,
since they can perform more than one function.
For example, there is no need to send separate acknowledgments in TCP because each
TCP message includes a field for an acknowledgment byte number. Similarly, one can
request that a connection be closed while sending data in the same message. The nature of