As per Relevance of the word specific, we have this rfc below:
RFC: 761
IEN: 129
DOD
TRANSMISSION CONTROL
January 1980
prepared
Defense Advanced Research Projects
Information Processing Techniques
1400 Wilson
Arlington, Virginia 22209
Information Sciences
University of Southern
4676 Admiralty
Marina del Rey, California 90291
January 1980
Transmission Control
TABLE OF
PREFACE ........................................................
1. INTRODUCTION ..................................................... 1
1.1 Motivation .................................................... 1
1.2 Scope ......................................................... 2
1.3 About This Document ........................................... 2
1.4 Interfaces .................................................... 3
1.5 Operation ..................................................... 3
2. PHILOSOPHY ....................................................... 7
2.1 Elements of the Internetwork System ........................... 7
2.2 Model of Operation ............................................ 7
2.3 The Host Environment .......................................... 8
2.4 Interfaces .................................................... 9
2.5 Relation to Other Protocols ................................... 9
2.6 Reliable Communication ....................................... 10
2.7 Connection Establishment and Clearing ........................ 10
2.8 Data Communication ........................................... 12
2.9 Precedence and Security ...................................... 13
2.10 Robustness Principle ......................................... 13
3. FUNCTIONAL SPECIFICATION ........................................ 15
3.1 Header Format ................................................ 15
3.2 Terminology .................................................. 19
3.3 Sequence Numbers ............................................. 24
3.4 Establishing a connection .................................... 29
3.5 Closing a Connection ......................................... 35
3.6 Precedence and Security ...................................... 38
3.7 Data Communication ........................................... 38
3.8 Interfaces ................................................... 42
3.9 Event Processing ............................................. 52
GLOSSARY ............................................................ 75
REFERENCES .......................................................... 83
[Page i
January 1980
Transmission Control
[Page ii]
January 1980
Transmission Control
This document describes the DoD Standard Transmission Control
(TCP). There have been eight earlier editions of the ARPA
specification on which this standard is based, and the present
draws heavily from them. There have been many contributors to this
both in terms of concepts and in terms of text. This
incorporates the addition of security, compartmentation, and
concepts into the TCP specification
Jon
[Page iii
January 1980
RFC:761
IEN:129
Replaces: IENs 124, 112,
81, 55, 44, 40, 27, 21, 5
DOD
TRANSMISSION CONTROL
1.
The Transmission Control Protocol (TCP) is intended for use as a
reliable host-to-host protocol between hosts in packet-switched
communication networks, and especially in interconnected systems of
networks
This document describes the functions to be performed by
Transmission Control Protocol, the program that implements it, and
interface to programs or users that require its services
1.1.
Computer communication systems are playing an increasingly
role in military, government, and civilian environments.
document primarily focuses its attention on military
communication requirements, especially robustness in the presence
communication unreliability and availability in the presence
congestion, but many of these problems are found in the civilian
government sector as well
As strategic and tactical computer communication networks
developed and deployed, it is essential to provide means
interconnecting them and to provide standard
communication protocols which can support a broad range
applications. In anticipation of the need for such standards,
Deputy Undersecretary of Defense for Research and Engineering
declared the Transmission Control Protocol (TCP) described herein
be a basis for DoD-wide inter-process communication
standardization
TCP is a connection-oriented, end-to-end reliable protocol designed
fit into a layered hierarchy of protocols which support multi-
applications. The TCP provides for reliable inter-
communication between pairs of processes in host computers attached
distinct but interconnected computer communication networks. Very
assumptions are made as to the reliability of the
protocols below the TCP layer. TCP assumes it can obtain a simple
potentially unreliable datagram service from the lower
protocols. In principle, the TCP should be able to operate above
wide spectrum of communication systems ranging from hard-
connections to packet-switched or circuit-switched networks
[Page 1]
January 1980
Transmission Control
TCP is based on concepts first described by Cerf and Kahn in [1].
TCP fits into a layered protocol architecture just above a
Internet Protocol [2] which provides a way for the TCP to send
receive variable-length segments of information enclosed in
datagram "envelopes". The internet datagram provides a means
addressing source and destination TCPs in different networks.
internet protocol also deals with any fragmentation or reassembly
the TCP segments required to achieve transport and delivery
multiple networks and interconnecting gateways. The internet
also carries information on the precedence, security
and compartmentation of the TCP segments, so this information can
communicated end-to-end across multiple networks
Protocol
+---------------------+
| higher-level |
+---------------------+
| TCP |
+---------------------+
| internet protocol |
+---------------------+
|communication network
+---------------------+
Figure 1
Much of this document is written in the context of TCP
which are co-resident with higher level protocols in the
computer. As a practical matter, many computer systems will
connected to networks via front-end computers which house the TCP
internet protocol layers, as well as network specific software.
TCP specification describes an interface to the higher level
which appears to be implementable even for the front-end case, as
as a suitable host-to-front end protocol is implemented
1.2.
The TCP is intended to provide a reliable process-to-
communication service in a multinetwork environment. The TCP
intended to be a host-to-host protocol in common use in
networks
1.3. About this
This document represents a specification of the behavior required
any TCP implementation, both in its interactions with higher
protocols and in its interactions with other TCPs. The rest of
[Page 2]
January 1980
Transmission Control
section offers a very brief view of the protocol interfaces
operation. Section 2 summarizes the philosophical basis for the
design. Section 3 offers both a detailed description of the
required of TCP when various events occur (arrival of new segments
user calls, errors, etc.) and the details of the formats of
segments
1.4.
The TCP interfaces on one side to user or application processes and
the other side to a lower level protocol such as Internet Protocol
The interface between an application process and the TCP
illustrated in reasonable detail. This interface consists of a set
calls much like the calls an operating system provides to
application process for manipulating files. For example, there
calls to open and close connections and to send and receive letters
established connections. It is also expected that the TCP
asynchronously communicate with application programs.
considerable freedom is permitted to TCP implementors to
interfaces which are appropriate to a particular operating
environment, a minimum functionality is required at the TCP/
interface for any valid implementation
The interface between TCP and lower level protocol is
unspecified except that it is assumed there is a mechanism whereby
two levels can asynchronously pass information to each other
Typically, one expects the lower level protocol to specify
interface. TCP is designed to work in a very general environment
interconnected networks. The lower level protocol which is
throughout this document is the Internet Protocol [2].
1.5.
As noted above, the primary purpose of the TCP is to provide reliable
securable logical circuit or connection service between pairs
processes. To provide this service on top of a less reliable
communication system requires facilities in the following areas
Basic Data
Flow
Precedence and
The basic operation of the TCP in each of these areas is described
the following paragraphs
[Page 3]
January 1980
Transmission Control
Basic Data Transfer
The TCP is able to transfer a continuous stream of octets in
direction between its users by packaging some number of octets
segments for transmission through the internet system. In
stream mode, the TCPs decide when to block and forward data at
own convenience
For users who desire a record-oriented service, the TCP also
the user to submit records, called letters, for transmission.
the sending user indicates a record boundary (end-of-letter),
causes the TCPs to promptly forward and deliver data up to
point to the receiver
Reliability
The TCP must recover from data that is damaged, lost, duplicated,
delivered out of order by the internet communication system.
is achieved by assigning a sequence number to each
transmitted, and requiring a positive acknowledgment (ACK) from
receiving TCP. If the ACK is not received within a
interval, the data is retransmitted. At the receiver, the
numbers are used to correctly order segments that may be
out of order and to eliminate duplicates. Damage is handled
adding a checksum to each segment transmitted, checking it at
receiver, and discarding damaged segments
As long as the TCPs continue to function properly and the
system does not become completely partitioned, no
errors will affect the users. TCP recovers from
communication system errors
Flow Control
TCP provides a means for the receiver to govern the amount of
sent by the sender. This is achieved by returning a "window"
every ACK indicating a range of acceptable sequence numbers
the last segment successfully received. For stream mode, the
indicates an allowed number of octets that the sender may
before receiving further permission. For record mode, the
indicates an allowed amount of buffer space the sender may consume
this may be more than the number of data octets transmitted if
is a mismatch between letter size and buffer size
[Page 4]
January 1980
Transmission Control
Multiplexing
To allow for many processes within a single Host to use
communication facilities simultaneously, the TCP provides a set
addresses or ports within each host. Concatenated with the
and host addresses from the internet communication layer, this
a socket. A pair of sockets uniquely identifies each connection
That is, a socket may be simultaneously used in
connections
The binding of ports to processes is handled independently by
Host. However, it proves useful to attach frequently used
(e.g., a "logger" or timesharing service) to fixed sockets which
made known to the public. These services can then be
through the known addresses. Establishing and learning the
addresses of other processes may involve more dynamic mechanisms
Connections
The reliability and flow control mechanisms described above
that TCPs initialize and maintain certain status information
each data stream. The combination of this information,
sockets, sequence numbers, and window sizes, is called a connection
Each connection is uniquely specified by a pair of
identifying its two sides
When two processes wish to communicate, their TCP's must
establish a connection (initialize the status information on
side). When their communication is complete, the connection
terminated or closed to free the resources for other uses
Since connections must be established between unreliable hosts
over the unreliable internet communication system, a
mechanism with clock-based sequence numbers is used to
erroneous initialization of connections
Precedence and Security
The users of TCP may indicate the security and precedence of
communication. Provision is made for default values to be used
these features are not needed
[Page 5]
January 1980
Transmission Control
[Page 6]
January 1980
Transmission Control
2.
2.1. Elements of the Internetwork
The internetwork environment consists of hosts connected to
which are in turn interconnected via gateways. It is assumed
that the networks may be either local networks (e.g., the ETHERNET)
large networks (e.g., the ARPANET), but in any case are based
packet switching technology. The active agents that produce
consume messages are processes. Various levels of protocols in
networks, the gateways, and the hosts support an
communication system that provides two-way data flow on
connections between process ports
We specifically assume that data is transmitted from host to
through means of a set of networks. When we say network, we have
mind a packet switched network (PSN). This assumption is
unnecessary, since a circuit switched network or a hybrid
of the two could also be used; but for concreteness, we
assume that the hosts are connected to one or more packet switches
a PSN
The term packet is used generically here to mean the data of
transaction between a host and a packet switch. The format of
blocks exchanged between the packet switches in a network
generally not be of concern to us
Hosts are computers attached to a network, and from the
network's point of view, are the sources and destinations of packets
Processes are viewed as the active elements in host computers (
accordance with the fairly common definition of a process as a
in execution). Even terminals and files or other I/O devices
viewed as communicating with each other through the use of processes
Thus, all communication is viewed as inter-process communication
Since a process may need to distinguish among several
streams between itself and another process (or processes), we
that each process may have a number of ports through which
communicates with the ports of other processes
2.2. Model of
Processes transmit data by calling on the TCP and passing buffers
data as arguments. The TCP packages the data from these buffers
segments and calls on the internet module to transmit each segment
the destination TCP. The receiving TCP places the data from a
into the receiving user's buffer and notifies the receiving user.
TCPs include control information in the segments which they use
ensure reliable ordered data transmission
[Page 7]
January 1980
Transmission Control
The model of internet communication is that there is an
protocol module associated with each TCP which provides an
to the local network. This internet module packages TCP
inside internet datagrams and routes these datagrams to a
internet module or intermediate gateway. To transmit the
through the local network, it is embedded in a local network packet
The packet switches may perform further packaging, fragmentation,
other operations to achieve the delivery of the local packet to
destination internet module
At a gateway between networks, the internet datagram is "unwrapped
from its local packet and examined to determine through which
the internet datagram should travel next. The internet datagram
then "wrapped" in a local packet suitable to the next network
routed to the next gateway, or to the final destination
A gateway is permitted to break up an internet datagram into
internet datagram fragments if this is necessary for
through the next network. To do this, the gateway produces a set
internet datagrams; each carrying a fragment. Fragments may be
into smaller ones at intermediate gateways. The internet
fragment format is designed so that the destination internet
can reassemble fragments into internet datagrams
A destination internet module unwraps the segment from the
(after reassembling the datagram, if necessary) and passes it to
destination TCP
This simple model of the operation glosses over many details.
important feature is the type of service. This provides
to the gateway (or internet module) to guide it in selecting
service parameters to be used in traversing the next network
Included in the type of service information is the precedence of
datagram. Datagrams may also carry security information to
host and gateways that operate in multilevel secure environments
properly segregate datagrams for security considerations
2.3. The Host
The TCP is assumed to be a module in a time sharing operating system
The users access the TCP much like they would access the file system
The TCP may call on other operating system functions, for example,
manage data structures. The actual interface to the network
assumed to be controlled by a device driver module. The TCP does
call on the network device driver directly, but rather calls on
internet datagram protocol module which may in turn call on the
driver
[Page 8]
January 1980
Transmission Control
Though it is assumed here that processes are supported by the
operating system, the mechanisms of TCP do not preclude
of the TCP in a front-end processor. However, in such
implementation, a host-to-front-end protocol must provide
functionality to support the type of TCP-user interface
above
2.4.
The TCP/user interface provides for calls made by the user on the
to OPEN or CLOSE a connection, to SEND or RECEIVE data, or to
STATUS about a connection. These calls are like other calls from
programs on the operating system, for example, the calls to open,
from, and close a file
The TCP/internet interface provides calls to send and
datagrams addressed to TCP modules in hosts anywhere in the
system. These calls have parameters for passing the address, type
service, precedence, security, and other control information
2.5. Relation to Other
The following diagram illustrates the place of the TCP in the
hierarchy
+------+ +-----+ +-----+ +-----+
|Telnet| | FTP | |Voice| ... | | Application Level
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | RTP | ... | | Host Level
+-----+ +-----+ +-----+
| | |
+-------------------------------+
| Internet Protocol | Gateway Level
+-------------------------------+
|
+---------------------------+
| Local Network Protocol | Network Level
+---------------------------+
|
Protocol
Figure 2.
[Page 9]
January 1980
Transmission Control
It is expected that the TCP will be able to support higher
protocols efficiently. It should be easy to interface higher
protocols like the ARPANET Telnet [3] or AUTODIN II THP to the TCP
2.6. Reliable
A stream of data sent on a TCP connection is delivered reliably and
order at the destination
Transmission is made reliable via the use of sequence numbers
acknowledgments. Conceptually, each octet of data is assigned
sequence number. The sequence number of the first octet of data in
segment is the sequence number transmitted with that segment and
called the segment sequence number. Segments also carry
acknowledgment number which is the sequence number of the
expected data octet of transmissions in the reverse direction.
the TCP transmits a segment, it puts a copy on a retransmission
and starts a timer; when the acknowledgment for that data is received
the segment is deleted from the queue. If the acknowledgment is
received before the timer runs out, the segment is retransmitted
An acknowledgment by TCP does not guarantee that the data has
delivered to the end user, but only that the receiving TCP has
the responsibility to do so
To govern the flow of data into a TCP, a flow control mechanism
employed. The the data receiving TCP reports a window to the
TCP. This window specifies the number of octets, starting with
acknowledgment number that the data receiving TCP is
prepared to receive
2.7. Connection Establishment and
To identify the separate data streams that a TCP may handle, the
provides a port identifier. Since port identifiers are
independently by each operating system, TCP, or user, they might
be unique. To provide for unique addresses at each TCP,
concatenate an internet address identifying the TCP with a
identifier to create a socket which will be unique throughout
networks connected together
A connection is fully specified by the pair of sockets at the ends.
local socket may participate in many connections to different
sockets. A connection can be used to carry data in both directions
that is, it is "full duplex".
TCPs are free to associate ports with processes however they choose
However, several basic concepts seem necessary in any implementation
[Page 10]
January 1980
Transmission Control
There must be well-known sockets which the TCP associates only
the "appropriate" processes by some means. We envision that
may "own" ports, and that processes can only initiate connections
the ports they own. (Means for implementing ownership is a
issue, but we envision a Request Port user command, or a method
uniquely allocating a group of ports to a given process, e.g.,
associating the high order bits of a port name with a given process.)
A connection is specified in the OPEN call by the local port
foreign socket arguments. In return, the TCP supplies a (short)
connection name by which the user refers to the connection
subsequent calls. There are several things that must be
about a connection. To store this information we imagine that
is a data structure called a Transmission Control Block (TCB).
implementation strategy would have the local connection name be
pointer to the TCB for this connection. The OPEN call also
whether the connection establishment is to be actively pursued, or
be passively waited for
A passive OPEN request means that the process wants to accept
connection requests rather than attempting to initiate a connection
Often the process requesting a passive OPEN will accept a
request from any caller. In this case a foreign socket of all
is used to denote an unspecified socket. Unspecified foreign
are allowed only on passive OPENs
A service process that wished to provide services for unknown
processes could issue a passive OPEN request with an
foreign socket. Then a connection could be made with any process
requested a connection to this local socket. It would help if
local socket were known to be associated with this service
Well-known sockets are a convenient mechanism for a priori
a socket address with a standard service. For instance,
"Telnet-Server" process might be permanently assigned to a
socket, and other sockets might be reserved for File Transfer,
Job Entry, Text Generator, Echoer, and Sink processes (the last
being for test purposes). A socket address might be reserved
access to a "Look-Up" service which would return the specific
at which a newly created service would be provided. The concept of
well-known socket is part of the TCP specification, but the
of sockets to services is outside this specification
Processes can issue passive OPENs and wait for matching calls
other processes and be informed by the TCP when connections have
established. Two processes which issue calls to each other at
same time are correctly connected. This flexibility is critical
[Page 11]
January 1980
Transmission Control
the support of distributed computing in which components
asynchronously with respect to each other
There are two cases for matching the sockets in the local request
an incoming segment. In the first case, the local request has
specified the foreign socket. In this case, the match must be exact
In the second case, the local request has left the foreign
unspecified. In this case, any foreign socket is acceptable as
as the local sockets match
If there are several pending passive OPENs (recorded in TCBs) with
same local socket, an incoming segment should be matched to a
with the specific foreign socket in the segment, if such a
exists, before selecting a request with an unspecified foreign socket
The procedures to establish and clear connections utilize
(SYN) and finis (FIN) control flags and involve an exchange of
messages. This exchange has been termed a three-way hand shake [4].
A connection is initiated by the rendezvous of an arriving
containing a SYN and a waiting TCB entry created by a user
command. The matching of local and foreign sockets determines when
connection has been initiated. The connection becomes "established
when sequence numbers have been synchronized in both directions
The clearing of a connection also involves the exchange of segments
in this case carrying the FIN control flag
2.8. Data
The data that flows on a connection may be thought of as a stream
octets, or as a sequence of records. In TCP the records are
letters and are of variable length. The sending user indicates
each SEND call whether the data in that call completes a letter by
setting of the end-of-letter parameter
The length of a letter may be such that it must be broken
segments before it can be transmitted to its destination. We
that the segments will normally be reassembled into a letter
being passed to the receiving process. A segment may contain all or
part of a letter, but a segment never contains parts of more than
letter. The end of a letter is marked by the appearance of an
control flag in a segment. A sending TCP is allowed to collect
from the sending user and to send that data in segments at its
convenience, until the end of letter is signaled then it must send
unsent data. When a receiving TCP has a complete letter, it must
wait for more data from the sending TCP before passing the letter
the receiving process
[Page 12]
January 1980
Transmission Control
There is a coupling between letters as sent and the use of buffers
data that cross the TCP/user interface. Each time an end-of-
(EOL) flag is associated with data placed into the receiving user'
buffer, the buffer is returned to the user for processing even if
buffer is not filled. If a letter is longer than the user's buffer
the letter is passed to the user in buffer size units, the last
which may be only partly full. The receiving TCP's buffer size may
communicated to the sending TCP when the connection is
established
The TCP is responsible for regulating the flow of segments on
connections, as a way of preventing itself from becoming saturated
overloaded with traffic. This is done using a window flow
mechanism. The data receiving TCP reports to the data sending TCP
window which is the range of sequence numbers of data octets that
receiving TCP is currently prepared to accept
TCP also provides a means to communicate to the receiver of data
at some point further along in the data stream than the receiver
currently reading there is urgent data. TCP does not attempt
define what the user specifically does upon being notified of
urgent data, but the general notion is that the receiving
should take action to read through the end urgent data quickly
2.9. Precedence and
The TCP makes use of the internet protocol type of service field
security option to provide precedence and security on a per
basis to TCP users. Not all TCP modules will necessarily function
a multilevel secure environment, some may be limited to
use only, and others may operate at only one security level
compartment. Consequently, some TCP implementations and services
users may be limited to a subset of the multilevel secure case
TCP modules which operate in a multilevel secure environment
properly mark outgoing segments with the security, compartment,
precedence. Such TCP modules should also provide to their users
higher level protocols such as Telnet or THP an interface to
them to specify the desired security level, compartment,
precedence of connections
2.10. Robustness
TCP implementations should follow a general principle of robustness
be conservative in what you do, be liberal in what you accept
others
[Page 13]
January 1980
Transmission Control
[Page 14]
January 1980
Transmission Control
3. FUNCTIONAL
3.1. Header
TCP segments are sent as internet datagrams. The Internet
header carries several information fields, including the source
destination host addresses [2]. A TCP header follows the
header, supplying information specific to the TCP protocol.
division allows for the existence of host level protocols other
TCP
TCP Header
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|E|R|S|F| |
| Offset| Reserved |R|C|O|S|Y|I| Window |
| | |G|K|L|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
TCP Header
Note that one tick mark represents one bit position
Figure 3.
Source Port: 16
The source port number
Destination Port: 16
The destination port number
[Page 15]
January 1980
Transmission Control
Functional
Sequence Number: 32
The sequence number of the first data octet in this segment (
when SYN is present).
Acknowledgment Number: 32
If the ACK control bit is set this field contains the value of
next sequence number the sender of the segment is expecting
receive. Once a connection is established this is always sent
Data Offset: 4
The number of 32 bit words in the TCP Header. This indicates
the data begins. The TCP header including options is an
number of 32 bits long
Reserved: 6
Reserved for future use. Must be zero
Control Bits: 8 bits (from left to right):
URG: Urgent Pointer field
ACK: Acknowledgment field
EOL: End of
RST: Reset the
SYN: Synchronize sequence
FIN: No more data from
Window: 16
The number of data octets beginning with the one indicated in
acknowledgment field which the sender of this segment is willing
accept
Checksum: 16
The checksum field is the 16 bit one's complement of the one'
complement sum of all 16 bit words in the header and text. If
segment contains an odd number of header and text octets to
checksummed, the last octet is padded on the right with zeros
form a 16 bit word for checksum purposes. The pad is
transmitted as part of the segment. While computing the checksum
the checksum field itself is replaced with zeros
The checksum also covers a 96 bit pseudo header
prefixed to the TCP header. This pseudo header contains the
[Page 16]
January 1980
Transmission Control
Functional
Address, the Destination Address, the Protocol, and TCP length
This gives the TCP protection against misrouted segments.
information is carried in the Internet Protocol and is
across the TCP/Network interface in the arguments or results
calls by the TCP on the IP
+--------------------------+
| Source Address |
+--------------------------+
| Destination Address |
+--------------------------+
| zero | PTCL | TCP Length |
+--------------------------+
The TCP Length is the TCP header plus the data length in
(this is not an explicitly transmitted quantity, but is
from the total length, and the header length).
Urgent Pointer: 16
This field communicates the current value of the urgent pointer as
positive offset from the sequence number in this segment.
urgent pointer points to the sequence number of the octet
the urgent data. This field should only be interpreted in
with the URG control bit set
Options:
Options may occupy space at the end of the TCP header and are
multiple of 8 bits in length. All options are included in
checksum. An option may begin on any octet boundary. There are
cases for the format of an option
Case 1: A single octet of option-kind
Case 2: An octet of option-kind, an octet of option-length,
the actual option-data octets
The option-length counts the two octets of option-kind
option-length as well as the option-data octets
Note that the list of options may be shorter than the data
field might imply. The content of the header beyond
End-of-Option option should be header padding (i.e., zero).
A TCP must implement all options
[Page 17]
January 1980
Transmission Control
Functional
Currently defined options include (kind indicated in octal):
Kind Length
---- ------ -------
0 - End of option list
1 - No-Operation
100 - Reserved
105 4 Buffer Size
Specific Option
End of Option
+--------+
|00000000|
+--------+
Kind=0
This option code indicates the end of the option list.
might not coincide with the end of the TCP header according
the Data Offset field. This is used at the end of all options
not the end of each option, and need only be used if the end
the options would not otherwise coincide with the end of the
header
No-
+--------+
|00000001|
+--------+
Kind=1
This option code may be used between options, for example,
align the beginning of a subsequent option on a word boundary
There is no guarantee that senders will use this option,
receivers must be prepared to process options even if they
not begin on a word boundary
Buffer
+--------+--------+---------+--------+
|01000101|00000100| buffer size |
+--------+--------+---------+--------+
Kind=105 Length=4
[Page 18]
January 1980
Transmission Control
Functional
Buffer Size Option Data: 16
If this option is present, then it communicates the
buffer size at the TCP which sends this segment. This
should only be sent in the initial connection request (i.e.,
in segments with the SYN control bit set). If this option
not used, the default buffer size of one octet is assumed
Padding:
The TCP header padding is used to ensure that the TCP header
and data begins on a 32 bit boundary. The padding is composed
zeros
3.2.
Before we can discuss very much about the operation of the TCP we
to introduce some detailed terminology. The maintenance of a
connection requires the remembering of several variables. We
of these variables being stored in a connection record called
Transmission Control Block or TCB. Among the variables stored in
TCB are the local and remote socket numbers, the security
precedence of the connection, pointers to the user's send and
buffers, pointers to the retransmit queue and to the current segment
In addition several variables relating to the send and
sequence numbers are stored in the TCB
Send Sequence
SND.UNA - send
SND.NXT - send
SND.WND - send
SND.BS - send buffer
SND.UP - send urgent
SND.WL - send sequence number used for last window
SND.LBB - send last buffer
ISS - initial send sequence
Receive Sequence
RCV.NXT - receive
RCV.WND - receive
RCV.BS - receive buffer
RCV.UP - receive urgent
RCV.LBB - receive last buffer
IRS - initial receive sequence
[Page 19]
January 1980
Transmission Control
Functional
The following diagrams may help to relate some of these variables
the sequence space
Send Sequence
1 2 3 4
----------|----------|----------|----------
SND.UNA SND.NXT SND.UNA
+SND.WND
1 - old sequence numbers which have been acknowledged
2 - sequence numbers of unacknowledged data
3 - sequence numbers allowed for new data transmission
4 - future sequence numbers which are not yet allowed
Send Sequence
Figure 4.
Receive Sequence
1 2 3
----------|----------|----------
RCV.NXT RCV.NXT
+RCV.WND
1 - old sequence numbers which have been acknowledged
2 - sequence numbers allowed for new reception
3 - future sequence numbers which are not yet allowed
Receive Sequence
Figure 5.
There are also some variables used frequently in the discussion
take their values from the fields of the current segment
[Page 20]
January 1980
Transmission Control
Functional
Current Segment
SEG.SEQ - segment sequence
SEG.ACK - segment acknowledgment
SEG.LEN - segment
SEG.WND - segment
SEG.UP - segment urgent
SEG.PRC - segment precedence
A connection progresses through a series of states during
lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED
ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, TIME-WAIT, CLOSE-WAIT, CLOSING
and the fictional state CLOSED. CLOSED is fictional because
represents the state when there is no TCB, and therefore,
connection. Briefly the meanings of the states are
LISTEN - represents waiting for a connection request from any
TCP and port
SYN-SENT - represents waiting for a matching connection
after having sent a connection request
SYN-RECEIVED - represents waiting for a confirming
request acknowledgment after having both received and sent
connection request
ESTABLISHED - represents an open connection, ready to transmit
receive data segments
FIN-WAIT-1 - represents waiting for a connection termination
from the remote TCP, or an acknowledgment of the
termination request previously sent
FIN-WAIT-2 - represents waiting for a connection termination
from the remote TCP
TIME-WAIT - represents waiting for enough time to pass to be
the remote TCP received the acknowledgment of its
termination request
CLOSE-WAIT - represents waiting for a connection termination
from the local user
CLOSING - represents waiting for a connection termination
acknowledgment from the remote TCP
CLOSED - represents no connection state at all
[Page 21]
January 1980
Transmission Control
Functional
A TCP connection progresses from one state to another in response
events. The events are the user calls, OPEN, SEND, RECEIVE, CLOSE
ABORT, and STATUS; the incoming segments, particularly
containing the SYN and FIN flags; and timeouts
The Glossary contains a more complete list of terms and
definitions
The state diagram in figure 6 only illustrates state changes,
with the causing events and resulting actions, but addresses
error conditions nor actions which are not connected with
changes. In a later section, more detail is offered with respect
the reaction of the TCP to events
[Page 22]
January 1980
Transmission Control
Functional
+---------+ ---------\ active OPEN
| CLOSED | \ -----------
+---------+<---------\ \ create TCB
| ^ \ \ snd SYN
passive OPEN | | CLOSE \ \
------------ | | ---------- \ \
create TCB | | delete TCB \ \
V | \ \
+---------+ CLOSE | \
| LISTEN | ---------- | |
+---------+ delete TCB | |
rcv SYN | | SEND | |
----------- | | ------- | V
+---------+ snd SYN,ACK / \ snd SYN +---------+
| |<----------------- ------------------>| |
| SYN | rcv SYN | SYN |
| RCVD |<-----------------------------------------------| SENT |
| | snd ACK | |
| |------------------ -------------------| |
+---------+ rcv ACK of SYN \ / rcv SYN,ACK +---------+
| -------------- | | -----------
| x | | snd ACK
| V V
| CLOSE +---------+
| ------- | ESTAB |
| snd FIN +---------+
| CLOSE | | rcv FIN
V ------- | | -------
+---------+ snd FIN / \ snd ACK +---------+
| FIN |<----------------- ------------------>| CLOSE |
| WAIT-1 |------------------ -------------------| WAIT |
+---------+ rcv FIN \ / CLOSE +---------+
| rcv ACK of FIN ------- | | -------
| -------------- snd ACK | | snd FIN
V x V V
+---------+ +---------+
|FINWAIT-2| | CLOSING |
+---------+ +---------+
| rcv FIN | rcv ACK of FIN
| ------- Timeout=2MSL | --------------
V snd ACK ------------ V delete TCB
+---------+ delete TCB +---------+
|TIME WAIT|----------------->| CLOSED |
+---------+ +---------+
TCP Connection State
Figure 6.
[Page 23]
January 1980
Transmission Control
Functional
3.3. Sequence
A fundamental notion in the design is that every octet of data
over a TCP connection has a sequence number. Since every octet
sequenced, each of them can be acknowledged. The
mechanism employed is cumulative so that an acknowledgment of
number X indicates that all octets up to but not including X have
received. This mechanism allows for straight-forward
detection in the presence of retransmission. Numbering of
within a segment is that the first data octet immediately
the header is the lowest numbered, and the following octets
numbered consecutively
It is essential to remember that the actual sequence number space
finite, though very large. This space ranges from 0 to 2**32 - 1.
Since the space is finite, all arithmetic dealing with
numbers must be performed modulo 2**32. This unsigned
preserves the relationship of sequence numbers as they cycle
2**32 - 1 to 0 again. There are some subtleties to computer
arithmetic, so great care should be taken in programming
comparison of such values. The typical kinds of sequence
comparisons which the TCP must perform include
(a) Determining that an acknowledgment refers to some
number sent but not yet acknowledged
(b) Determining that all sequence numbers occupied by a
have been acknowledged (e.g., to remove the segment from
retransmission queue).
(c) Determining that an incoming segment contains sequence
which are expected (i.e., that the segment "overlaps"
receive window).
[Page 24]
January 1980
Transmission Control
Functional
On send connections the following comparisons are needed
older sequence numbers newer sequence
SND.UNA SEG.ACK SND.NXT
| | |
----|----XXXXXXX------XXXXXXXXXX---------XXXXXX----|----
| | | | | |
| | |
Segment 1 Segment 2 Segment 3
<----- sequence space ----->
Sending Sequence Space
Figure 7.
SND.UNA = oldest unacknowledged sequence
SND.NXT = next sequence number to be
SEG.ACK = acknowledgment (next sequence number expected by
acknowledging TCP
SEG.SEQ = first sequence number of a
SEG.SEQ+SEG.LEN-1 = last sequence number of a
A new acknowledgment (called an "acceptable ack"), is one for
the inequality below holds
SND.UNA < SEG.ACK =< SND.
All arithmetic is modulo 2**32 and that comparisons are unsigned
"=<" means "less than or equal".
A segment on the retransmission queue is fully acknowledged if the
of its sequence number and length is less than the
value in the incoming segment
SEG.LEN is the number of octets occupied by the data in the segment
It is important to note that SEG.LEN must be non-zero; segments
do not occupy any sequence space (e.g., empty acknowledgment segments
are never placed on the retransmission queue, so would not go
this particular test
[Page 25]
January 1980
Transmission Control
Functional
On receive connections the following comparisons are needed
older sequence numbers newer sequence
RCV.NXT RCV.NXT+RCV.WND
| |
---------XXX|XXX------XXXXXXXXXX---------XXX|XX---------
| | | | |
| | |
Segment 1 Segment 2 Segment 3
<----- sequence space ----->
Receiving Sequence Space
Figure 8.
RCV.NXT = next sequence number expected on incoming
RCV.NXT+RCV.WND = last sequence number expected on
segments, plus
SEG.SEQ = first sequence number occupied by the incoming
SEG.SEQ+SEG.LEN-1 = last sequence number occupied by the
A segment is judged to occupy a portion of valid receive
space
0 =< (SEG.SEQ+SEG.LEN-1 - RCV.NXT) < (RCV.NXT+RCV.WND - RCV.NXT
SEG.SEQ+SEG.LEN-1 is the last sequence number occupied by the segment
RCV.NXT is the next sequence number expected on an incoming segment
and RCV.NXT+RCV.WND is the right edge of the receive window
Actually, it is a little more complicated than this. Due to
windows and zero length segments, we have four cases for
acceptability of an incoming segment
[Page 26]
January 1980
Transmission Control
Functional
Segment Receive
Length
------- ------- -------------------------------------------
0 0 SEG.SEQ = RCV.
0 >0 RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.
>0 0 not
>0 >0 RCV.NXT < SEG.SEQ+SEG.LEN =< RCV.NXT+RCV.
Note that the acceptance test for a segment, since it requires the
of a segment to lie in the window, is somewhat more restrictive
is absolutely necessary. If at least the first sequence number of
segment lies in the receive window, or if some part of the
lies in the receive window, then the segment might be
acceptable. Thus, in figure 8, at least segments 1 and 2
acceptable by the strict rule, and segment 3 may or may not be
depending on the strictness of interpretation of the rule
Note that when the receive window is zero no segments should
acceptable except ACK segments. Thus, it should be possible for a
to maintain a zero receive window while transmitting data
receiving ACKs
We have taken advantage of the numbering scheme to protect
control information as well. This is achieved by implicitly
some control flags in the sequence space so they can be
and acknowledged without confusion (i.e., one and only one copy of
control will be acted upon). Control information is not
carried in the segment data space. Consequently, we must adopt
for implicitly assigning sequence numbers to control. The SYN and
are the only controls requiring this protection, and these
are used only at connection opening and closing. For sequence
purposes, the SYN is considered to occur before the first actual
octet of the segment in which it occurs, while the FIN is
to occur after the last actual data octet in a segment in which
occurs. The segment length includes both data and sequence
occupying controls. When a SYN is present then SEG.SEQ is
sequence number of the SYN
Initial Sequence Number
The protocol places no restriction on a particular connection
used over and over again. A connection is defined by a pair
sockets. New instances of a connection will be referred to
incarnations of the connection. The problem that arises owing to
[Page 27]
January 1980
Transmission Control
Functional
is -- "how does the TCP identify duplicate segments from
incarnations of the connection?" This problem becomes apparent if
connection is being opened and closed in quick succession, or if
connection breaks with loss of memory and is then reestablished
To avoid confusion we must prevent segments from one incarnation of
connection from being used while the same sequence numbers may
be present in the network from an earlier incarnation. We want
assure this, even if a TCP crashes and loses all knowledge of
sequence numbers it has been using. When new connections are created
an initial sequence number (ISN) generator is employed which selects
new 32 bit ISN. The generator is bound to a (possibly fictitious) 32
bit clock whose low order bit is incremented roughly every 4
microseconds. Thus, the ISN cycles approximately every 4.55 hours
Since we assume that segments will stay in the network no more
tens of seconds or minutes, at worst, we can reasonably assume
ISN's will be unique
For each connection there is a send sequence number and a
sequence number. The initial send sequence number (ISS) is chosen
the data sending TCP, and the initial receive sequence number (IRS)
learned during the connection establishing procedure
For a connection to be established or initialized, the two TCPs
synchronize on each other's initial sequence numbers. This is done
an exchange of connection establishing messages carrying a control
called "SYN" (for synchronize) and the initial sequence numbers. As
shorthand, messages carrying the SYN bit are also called "SYNs".
Hence, the solution requires a suitable mechanism for picking
initial sequence number and a slightly involved handshake to
the ISN's. A "three way handshake" is necessary because
numbers are not tied to a global clock in the network, and TCPs
have different mechanisms for picking the ISN's. The receiver of
first SYN has no way of knowing whether the segment was an old
one or not, unless it remembers the last sequence number used on
connection (which is not always possible), and so it must ask
sender to verify this SYN
The "three way handshake" and the advantages of a "clock-driven
scheme are discussed in [4].
Knowing When to Keep
To be sure that a TCP does not create a segment that carries
sequence number which may be duplicated by an old segment remaining
the network, the TCP must keep quiet for a maximum segment
(MSL) before assigning any sequence numbers upon starting up
recovering from a crash in which memory of sequence numbers in use
[Page 28]
January 1980
Transmission Control
Functional
lost. For this specification the MSL is taken to be 2 minutes.
is an engineering choice, and may be changed if experience
it is desirable to do so. Note that if a TCP is reinitialized in
sense, yet retains its memory of sequence numbers in use, then it
not wait at all; it must only be sure to use sequence numbers
than those recently used
It should be noted that this strategy does not protect
spoofing or other replay type duplicate message problems
3.4. Establishing a
The "three-way handshake" is the procedure used to establish
connection. This procedure normally is initiated by one TCP
responded to by another TCP. The procedure also works if two
simultaneously initiate the procedure. When simultaneous
occurs, the TCP receives a "SYN" segment which carries
acknowledgment after it has sent a "SYN". Of course, the arrival
an old duplicate "SYN" segment can potentially make it appear, to
recipient, that a simultaneous connection initiation is in progress
Proper use of "reset" segments can disambiguate these cases.
examples of connection initiation follow. Although these examples
not show connection synchronization using data-carrying segments,
is perfectly legitimate, so long as the receiving TCP doesn't
the data to the user until it is clear the data is valid (i.e.,
data must be buffered at the receiver until the connection reaches
ESTABLISHED state). The three-way handshake reduces the
of false connections. It is the implementation of a trade-off
memory and messages to provide information for this checking
The simplest three-way handshake is shown in figure 9 below.
figures should be interpreted in the following way. Each line
numbered for reference purposes. Right arrows (-->)
departure of a TCP segment from TCP A to TCP B, or arrival of
segment at B from A. Left arrows (<--), indicate the reverse
Ellipsis (...) indicates a segment which is still in the
(delayed). An "XXX" indicates a segment which is lost or rejected
Comments appear in parentheses. TCP states represent the state
the departure or arrival of the segm