DESIGN OF TCP/IP FOR THE TAC
IEN-166
Robert Hinden
Bolt Beranek and Newman Inc.
January 1981
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
Table of Contents
1 Introduction.......................................... 1
2 Overall Data Flow..................................... 2
2.1 Receiving Data...................................... 2
2.1.1 1822 Module....................................... 3
2.1.2 NCP Module........................................ 4
2.1.3 Internet Module................................... 4
2.1.4 TCP Module........................................ 5
2.1.5 Telnet Module..................................... 6
2.2 Sending Data........................................ 7
2.2.1 Telnet Module..................................... 7
2.2.2 TCP Module........................................ 8
2.2.3 Internet Module................................... 9
2.2.4 1822 Module....................................... 9
3 Control and Priority................................. 10
4 Data Structures...................................... 11
4.1 Message Block...................................... 11
4.2 Protocol Data Block................................ 13
5 1822 Protocol........................................ 16
6 Internet Protocol.................................... 17
6.1 Identifier Assignment.............................. 17
6.2 Option Support..................................... 17
6.3 Reassembly......................................... 17
6.4 Routing............................................ 19
6.5 Gateway to Gateway Messages........................ 20
6.6 Timeouts........................................... 21
7 Transmission Control Protocol........................ 21
7.1 Connection Opening and Closing..................... 21
7.2 Initial Sequence Number Assignment................. 22
7.3 Option Support..................................... 22
7.4 Urgent Data........................................ 23
7.5 End of Letter Handling............................. 23
7.6 Retransmissions.................................... 24
7.7 Acknowledgement and Window Strategy................ 24
7.8 Sequencing......................................... 25
FIGURES
Data and Control Flow..................................... 3
Message Block Format..................................... 12
Protocol Data Block Format............................... 15
-i-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
Design of TCP/IP for the TAC
1. Introduction
This document is a working design document for the
development of the Transmission Control Protocol (TCP) and
Internet Protocol (IP) for the Terminal Access Controller (TAC).
The TAC is a terminal controller that supports the TCP and NCP
host to host protocols. It will run in an H-316 computer with a
Multi-Line Terminal Controller (MLC) and an 1822 host interface.
It is based in part on the existing H-316 TIP.
This document is meant as a guide for the implementation of
the TAC. The intent is not to write a specification that
describes everything in fine detail, but to describe the overall
system and how its pieces interact with each other. Also, it
discusses changes to parts of the existing H-316 TIP.
Everything in this document is subject to change. As the
implementation and debugging proceed, new things will be learned.
This will force a re-evaluation of the design decisions made
here. Undoubtedly, some things will change.
The document is written assuming a working knowledge of the
316 TIP, Internet Protocol, Transmission Control Protocol, and
Network Control Protocol. All numbers in this document are in
decimal.
-1-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
2. Overall Data Flow
A basic premise in the design of TAC is that data should not
be moved between buffers, rather the pointers to the data should
be passed between program modules. Thus, when a message is read
into a buffer, pointers to it are passed between the different
protocol modules. When a character is read from the MLC and put
into a buffer, the protocol modules manipulate the buffer
pointers, not the data itself. This is illustrated in Figure 1.
2.1 Receiving Data
To receive data from the network, a message is read from
the 1822 host interface into a Message Block (MBLK). If the
message will not fit in one MBLK, the remainder will be read into
other free MBLKs until the message has been completely read in.
All the MBLKs containing the same message will be linked
together. A Protocol Data Block (PDB) will be created to point
to the MBLKs. The pointers that are passed between the protocol
modules will point to the PDBs. More details on the PDBs and
MBLKs can be found in the section on "Data Structures".
-2-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
+---------+
+ +
+--------------- + Message + <-------------------+
|+-------------- + Buffers + <------------------+ \
|| + + \ \
VV +---------+ \ \
+---+ \ \
+--- + + Tumble \ \
|+-- + + Table +-----+ +----+ \ \
|| +---+ | | | | \ \
|| +>| TCP |<-->| IP |<-+ \ \
VV +--------+ | | | | | | +------+ \ \
+++++++ | | | +-----+ +----+ | | | +++++++
| MLC |<---->| Telnet |<-+ +-->| 1822 |<-->| IMP |
+++++++ | | | +-----+ | | | +++++++
|| +--------+ | | | | +------+ /\/\
|| +>| NCP |<-----------+ / /
|| +---+ | | / /
|+-->+ + Tumble +-----+ / /
+--->+ + Table / /
+---+ / /
|| +----------+ / /
|| + + / /
|+-----------> + Message + --------------------+ /
+------------> + Buffers + ---------------------+
+ +
+----------+
Control -----> Data ----->
----->
Figure 1 . Data and Control Flow
2.1.1 1822 Module
The 1822 module is given a pointer to a PDB. This module
will act directly on the message if it is an 1822 control message
(i.e., a RFNM). It will update the appropriate data structure to
initiate the action to be taken. If the PDB contains an 1822
-3-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
data message, it will be passed on to the next protocol module.
Which module is passed to depends on the Link number in the 1822
message. The Link number is the upper 8 bits of the "Message ID"
field in the 1822 leader. The Link number to protocol mapping is
as follows:
Link # Protocol
0 NCP Control
2-71 NCP Data
155 Internet
2.1.2 NCP Module
The NCP module implements the ARPANET Host-Host Protocol.
Its function is essentially identical to the H-316 TIP's NCP.
The only difference is that it will be modified to work with the
new PDB and MBLK data structures. This will be done with a new
interface and hopefully will have a small impact on efficiency.
When the NCP module is done with a message, it will pass the
pointer to the PDB to the Telnet Module.
2.1.3 Internet Module
When the Internet Protocol (IP) module gets a pointer to a
PDB it first checks the checksum in the IP header and then checks
that the destination address is correct (it should be the address
-4-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
of the TAC running the code). If either of these checks fails,
the datagram is discarded. Also, if the destination address was
incorrect an IP error report will be sent to the source of the
datagram. The next check is whether or not the datagram is
fragmented. If so, then the IP module will perform reassembly.
This is described in detail in the section on "Internet
Protocol". When the IP module gets a complete datagram (either
received whole or reassembled) it will pass it on to the next
protocol module. Which module it is depends on the "Protocol"
field in the Internet header. If a datagram is received for a
protocol that is not supported, it will be discarded and an IP
error report sent to the datagram source. The protocols
supported are as follows:
Protocol # Protocol Name
3 Gateway to Gateway Protocol
6 Transmission Control Protocol
71 Packet Core
20 TAC Monitoring
2.1.4 TCP Module
When the Transmission Control Protocol (TCP) receives a PDB
it first checks the checksum of the message and the validity of
the TCP header. If the message that passes this check is for a
valid connection, and its sequence number is in the receiving
window, the TCP module will set it up for the open connection.
-5-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
The data will be sequenced if necessary at this point. This is
described in detail in the section on the "Transmission Control
Protocol". The next module is then informed that there is data
to be processed.
Flow control is implemented by using the TCP Acknowledgement
(ACK) and the Window size parameters. A fixed number of
characters will be buffered for each connection. As characters
are accepted they will be ACKed until the limitation is reached.
As the ACK value is advanced, the window will be shrunk
correspondingly. When the next module takes data from the
message, buffer space becomes available. This causes TCP to
advance its window, thus allowing the distant host to send more
data.
Normally the new ACK and window values will be sent out with
the next data message from that connection. If nothing is
pending for this connection, a message with just the updated ACK
and window values will be sent. This is described in more detail
in the section "Transmission Control Protocol".
2.1.5 Telnet Module
The Telnet module is given a pointer to a PDB when there is
data to be processed. This data may be from the NCP or TCP
-6-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
protocol modules. It takes characters out of the MBLKs, looks
for Telnet commands, and outputs them to the MLC. This output is
done using the existing TIP's "Tumble Tables". This will work
using "OIs", which means that every time an "OI" comes in for a
port, Telnet will check if there is another character to output.
2.2 Sending Data
Data that is sent out to the network normally comes in from
the MLC and is received in "Tumble Table" format. This is a
block which is filled by the MLC. Its format is one word for
each character input. The low order byte of the word is the
character and the high order byte is the line number that the
character came in on.
When the block is received it is passed to the Telnet
module. This module takes the characters out and processes
them. As this is happening another block is being filled by the
MLC.
2.2.1 Telnet Module
When the Telnet Module gets a character for a port, it first
checks if there is an open connection for that port. If not, it
discards the character and outputs a bell character to the port.
-7-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
Next, it checks to see if there is room in the MBLK for another
character. If not, then the character is discarded and the bell
rung. If there is room, the character is put into the MBLK and
the proper pointers are advanced. Telnet then indicates to the
next protocol module that there is data to send. Depending on
which protocol is being used for the connection, this is either
the NCP or TCP module.
2.2.2 TCP Module
When the TCP module gets a signal that there is new data
that should be sent, it first checks if there is room in the
sending window to send more data. This done by checking if the
last sent but unacknowledged data is at the right edge of the
sending window. If there is no room, then nothing will be sent.
Otherwise, the TCP module will adjust the pointers in the PDB and
MBLKs to point to the correct data and update the TCP header.
Flow control in the sending direction is done by maintaining
three pointers in the PDB. These are pointers to data in the
MBLKs. They are pointers to the last ACKed character, the last
sent but unACKed character, and the last not-yet-sent character
in the MBLK. As data is ACKed, sent, or put into the MBLK, the
appropriate pointer is advanced.
-8-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
When the TCP module is ready to send the data, it checks to
see if the 1822 module can send the data (i.e., there are not
more than eight outstanding messages). If the data can be sent,
then the TCP module will compute a checksum for the message and
pass a PDB pointer to the IP module.
2.2.3 Internet Module
When the IP module gets a pointer to a PDB it first checks
to see if it knows where to send the datagram. If the
destination is on the same network as the TAC, the Internet
module will use that as the address. If the destination is on a
different network, then it will send it to a gateway. The
procedure to decide which gateway to use is discussed in more
detail in the section "Internet Protocol".
The IP module will then build an IP leader in the MBLK and
compute the checksum of the leader. It will then pass a pointer
to the message to the 1822 module.
2.2.4 1822 Module
When the 1822 module gets a pointer to a PDB, it will always
send the message it contains to the destination specified in the
PDB. The destination host will either be a server host or a
-9-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
gateway. The 1822 module will keep track of the number of
outstanding (no RFNMs received) messages sent to a host. This
will be used by the NCP and TCP protocol modules to insure that
the IMP will never block the TAC's host interface due to having
more than eight outstanding messages.
When the 1822 module sends the message, it will build an
1822 leader in the MBLK. It will then send the message to the
IMP via the host interface hardware.
3. Control and Priority
The code in the TAC will run either at the interrupt level
or at the background loop. The interrupt routines will support
the host interface, MLC, and clock. In addition, high priority
protocol routines will run at the task interrupt level.
The background loop will contain most of the TAC code. The
protocol modules will run here. They will be executed in the
following order: 1822 Input, IP Input, TCP Input, NCP Input,
Telnet Input, Telnet Output, NCP Output, TCP Output, IP Output,
and 1822 Output.
Each protocol module will have an input queue. When it
runs, it checks for an entry on its queue. If it finds
something, it takes it off the queue and processes it. Some of
-10-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
the protocol modules will be written to process all entries on
their queue before exiting; others will process one entry and
then exit. The NCP, TCP, and Telnet modules will process one
entry. The 1822 and IP modules will process all entries.
4. Data Structures
A new system of buffers will be used in the TAC. It
consists of two types of blocks, the Message Block (MBLK) and
Protocol Data Block (PDB). These are used both for receiving and
transmitting messages and for buffering characters on input and
output.
The structure of these buffers is such that when a protocol
module is passed a message it is given a pointer to a PDB. The
PDB includes a link to the first MBLK. The main function of the
PDB is to save frequently accessed things in the message and to
point to the message. The MBLKs contain the actual message.
They also have fields to facilitate reassembly and sequencing.
4.1 Message Block
The main function of the Message Block (MBLK) is to hold
messages. It will be used for all protocols. If a message will
not fit in one MBLK, then the remainder will be put into a second
-11-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
MBLK. The second will be linked to the first. The length of the
MBLK will be either 30 or 60 words. The 30 word MBLK is used for
sending data and the 60 word MBLK is used for receiving.
The header of the MBLK consists of 4 words. See Figure 2
for the format of the block. The "Link" is used to point to
other MBLKs. The "Offset" field is used for reassembling IP
fragments and sequencing TCP data. During these operations it
contains the offset of where this data is relative to the data in
the previous MBLK. Zero means that there is no missing data.
This is discussed in detail in the section on "Reassembly".
1 0 0 0
5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+---------------+---------------+
0 | Link | Pointer to next MBLK
+---------------+---------------+
1 | Offset | Used in reassembly and sequencing
+---------------+---------------+
2 | Length | Flags | Length of Data, Bit flags
+---------------+---------------+
3 | Pointer to Data | Pointer to current data
+---------------+---------------+
4 | | Area which holds message
. | Data |
. | |
. | Area |
| |
n* | |
+---------------+---------------+
Figure 2 . Message Block Format
_______________
* Where "n" is either 29 or 59, depending whether the block is
used for sending or receiving.
-12-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
The "Length" and "Pointer to Data" fields are used to
indicate where and how much data is in the MBLK. The meaning of
these is always relative to the protocol module currently
processing the message. For example: when a message is read in
from the host interface the "Pointer to Data" will point to the
1822 leader and the "Length" will be the length of all the data
in this MBLK. When the 1822 module is ready to pass the data to
the next protocol module, it adjusts these fields to refer to the
data after the 1822 leader. In this way, a protocol module need
not know what, if any, protocol preceded it.
The "Flags" is a bit field containing such things as End of
message, I/O in progress, Read or Write, small or large block,
etc. The "Data Area" is where the actual message is stored. The
small size MBLK (30 words) is sized to contain an 1822, IP, and
TCP leader, but no data. The large size (60 words) can contain
the leaders plus up to 60 bytes of data.
4.2 Protocol Data Block
The Protocol Data Block is a header block for one or more
MBLKs that make up a message. It contains pointers to the first
MBLK, pointers to specific leaders in the MBLKs, frequently
accessed items from the message, and a link to the next PDB.
-13-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
As previously stated, it is pointers to PDBs that are passed
between protocol modules. When a protocol module gets a PDB, it
expects to find one PDB, which points to one or more MBLKs. The
data in the MBLKs is expected to be in sequence and non-
fragmented. This requires that each protocol module insure that
the data it passes to the next module be contiguous. This is
best described with the following example:
When the Internet module gets two fragments of the same
datagram, it needs to reassemble them before it can pass them to
the next protocol module. What it does is to take the MBLKs
containing the second fragment and link them into the proper
places in the list of MBLKs of the first fragment. As it does
this, it adjusts the fields in the MBLKs to point to the correct
data. When it has linked in all the MBLKs from the second
fragment, it puts the PDB, which controlled the second fragment,
back on the free list of PDBs.
The TCP module performs a similar operation to sequence the
data before it passes it to the Telnet module. The format of the
PDB is shown in Figure 3.
The first field in the PDB, "Link to next PDB", is a pointer
to another PDB. This is used for reassembly and sequencing. The
next field in the PDB is the address field. This is either the
source of the message if it was received or the destination if it
-14-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
1 0 0 0
5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+---------------+---------------+
0 | Link to next PDB | Pointer to next PDB
+---------------+---------------+
1 | Network | Host | Source / Destination
+---------------+---------------+ Address
2 | | IMP |
+---------------+---------------+
3 | Identification | IP Identification
+---------------+---------------+
4 | Flags | Protocol | Bit flags, Protocol #
+---------------+---------------+
5 | Time Stamp | Time stamp for aging
+---------------+---------------+
6 | Pointer to 1st Leader | Usually 1822
+---------------+---------------+
7 | Pointer to 2nd Leader | Usually IP or NCP
+---------------+---------------+
8 | Pointer to 3rd Leader | Usually TCP
+---------------+---------------+
9 | Pointer to first MBLK | Pointer to first MBLK
+---------------+---------------+
10 | Protocol | Variables used by each
+ + protocol module
11 | Variables |
+ +
12 | Area |
+ +
13 | |
+---------------+---------------+
Figure 3 . Protocol Data Block Format
is to be sent. The "Identification" field is the internet
identification which is used in assembling internet fragments.
The "Flags" field is a bit array used for things like datagram
complete, EOL, Urgent, Read or Write, block free, in use, hole,
etc. The "Protocol" field is the host-to-host protocol the
-15-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
message is for. The "Time Stamp" field is used for timing out
messages.
The "Pointer Leader" fields are used to point to different
leaders in the MBLKs. This is done to make it easier to find a
particular leader in the message. They are set up by a
particular protocol message and refer to different leaders
depending on which protocols are in use.
The "Pointer to first MBLK" field is the pointer to the
first MBLK of the message. The "Protocol Variables Area" is a
temporary area that any protocol module can use while it is
processing the PDB. As long as it controls the PDB, no other
module will change these fields.
5. 1822 Protocol
All 1822 data messages will be passed directly to the next
protocol module. When the 1822 module gets a control message it
will call a routine supplied to it by the next protocol module.
For example, the NCP module will supply a routine to be called
when the 1822 module receives a "RFNM" on an NCP link number.
The routines will be called with a pointer to the PDB of the
message. When the routine returns the 1822 module will discard
the message.
-16-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
6. Internet Protocol
6.1 Identifier Assignment
When the Internet module gets a message to send, it
generates a value for the "Identifier" (ID) field in the internet
header. It does this by keeping a 16-bit counter called the ID
counter. When it needs a new value it increments the counter by
one and uses the result. The ID counter will not be initialized
when the TAC is reloaded or restarted, to insure that the values
are sequential.
6.2 Option Support
The Internet module will only actively support the "Error
Report" IP option. None of the other currently defined options
will require any action to be performed by the TAC.
6.3 Reassembly
When the Internet module gets a PDB which is a datagram
fragment, it must reassemble it. It first looks at the fragments
on the Internet-Reassembly queue to see if there are any other
fragments of the same datagram. It does this by comparing the
source address, ID, and protocol number of the two fragments. If
-17-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
it does not find a match, it adds the new PDB to the queue. At
this point, it also puts a time stamp in the PDB. This will be
used to timeout unassembled fragments.
The actual reassembly process consists of adding the MBLKs
of the new datagram to the list of MBLKs of the datagram on the
queue. This is done using the "Offset", "Length" and the
"Pointer to Data" fields in the MBLK. At this point in the
processing of the fragment, the fragment consists of one or more
MBLKs linked together. The IP header will always be in the first
MBLK. The "Offset" fields in the MBLKs are all zero (there is no
missing data in the new fragment itself). The "Length" fields
contain the length of the IP data (not including the IP header)
in each MBLK. The "Pointer to Data" fields point to the IP data
in each MBLK.
The MBLKs of the new datagram are added to the datagram on
the queue by comparing the "Fragment Offset" in the IP header of
the new datagram to the "Fragment Offset" in the IP header of the
datagram on the reassembly queue. This is done by taking the
first MBLK on the list and adding the "Fragment Offset" from the
IP header to the "Length" and "Offset" fields in the first MBLK.
If this sum is greater than the "Fragment Offset" in the IP
header of the new datagram, then the MBLKs of the new datagram
should go before the first MBLK of the datagram in the original
-18-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
fragment. If not, then they should be added in after. In this
case, the comparative process is repeated with the rest of the
MBLKs on the list. When the proper place is found, the new MBLKs
are linked in and the fields of the new and old MBLKs are
adjusted. If the new fragment overlaps the existing, then by
adjusting the "Pointer to Data" and "Length" fields, the overlap
can be skipped. This may result in one or more MBLKs being
discarded.
When the datagram is completely reassembled, it can then be
taken off the Reassembly queue and passed to the next protocol
module.
6.4 Routing
The decision about where to send a datagram is twofold. If
the destination host is on the same net as the TAC, then the
datagram is sent directly to that host. If not, then it must be
sent to a gateway.
The Internet module will maintain a table that will
facilitate routing messages to hosts on other networks. The
table is a list of all networks (256) and the gateways to get to
the networks. This table, called the Network-Gateway table, will
be initially loaded into the TAC and will be dynamically
-19-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
maintained by the TAC.
When the Internet module needs to find an address, it looks
in the Network-Gateway table to get the gateway address for the
network it wants to send to. If it finds an address it uses it.
If the entry for the network it wants is empty (i.e., no gateway
address specified), then the Internet module will use an
arbitrary gateway.
If the Internet module receives a Redirect message from a
gateway, it will update the Network-Gateway table to indicate the
correct gateway. This will insure that the Network-Gateway table
contains current information.
If a gateway goes down during a connection the Internet
module will clear that network's entry in the Network-Gateway
table. It will then try an arbitrary gateway. If at a later
time, the Internet module receives a Redirect message telling it
to use a new gateway to get to a network, it will set that
network's entry in Network-Gateway table to the new gateway's
address.
6.5 Gateway to Gateway Messages
The Internet module will support the "Gateway to Gateway"
protocol in a passive sense. If it receives a "Destination
-20-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
Unreachable Packet" or a "Redirect Packet" it will take
appropriate action. If it receives anything else, it will
discard the message. In particular, if the Internet module
receives a "Source Quench Packet" it will discard the message.
This strategy is used due to the TAC's limited amount of
buffering. The buffers would soon fill up because of the data
not being acknowledged (in TCP). This will effectively limit the
transmission.
6.6 Timeouts
Internet fragments will be discarded if they are not
reassembled within 60 seconds. When a new fragment is
reassembled into an existing one, the "Timeout" field in PDB of
the existing fragment will be updated with the current time.
This will, in effect, reset the timer for that fragment.
7. Transmission Control Protocol
7.1 Connection Opening and Closing
The TCP module will have a finite state machine which will
be used for establishing and closing connections. The procedure
to open a connection is to pass the required information
(Destination address, socket, etc.) to the TCP module. It will
-21-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
then run the finite state machine, which will set up the required
data structures and open the connection. Closing the connection
will be done in a similar way. The states of the finite state
machine will be similar to what is described in "IEN-129, DOD
Standard Transmission Control Protocol".
All TCP Port numbers assigned by the TAC will consist of the
upper 8 bits set to the terminal number for the connection (1-
64.) and the lower 8 bits set to 23. All connections made to or
from the TAC will use this format.
7.2 Initial Sequence Number Assignment
The TCP module will maintain a 32-bit counter that will be
used to generate Initial Sequence Numbers (ISN). The counter
will be incremented by a constant value every time the H-316
clock ticks, which is every 25.6MS. The counter will be
incremented by 64. This will then wrap around approximately
every 4.55 hours. When the TCP module needs an ISN it reads the
counter and gets a value.
7.3 Option Support
The TCP module will understand the format of all TCP
options. It will support the "No-Operation" and "End of Option
-22-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
List" options. It will not support the "Buffer Size" option. If
it receives a "Buffer Size" option with anything greater than
size one, it will not accept the connection but will reset it.
7.4 Urgent Data
When the TCP module receives a message with a valid Urgent
Pointer, it sets a bit in the "Flag" word in the PDB and saves
the offset to the end of the urgent data. When the next protocol
module takes data out of the MBLK it will get an indication that
the data it is getting is urgent.
Likewise, when the TCP module is given data to send, the
protocol module supplying the data can include an indication that
the data is urgent. The TCP module will include this information
in all messages it sends until the urgent data is sent.
7.5 End of Letter Handling
The TCP module will not do anything special when it receives
a message with End of Letter (EOL) set. The TCP module always
presents all data to the next protocol module as soon as it is
available. Consequently, no special handling is necessary.
-23-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
The TCP module will accept data to be sent with an EOL
indication. It will send this data with EOL set in the message.
No additional data will be sent in the message. If the data is
required to be retransmitted, it will be transmitted with EOL
preserved.
7.6 Retransmissions
Data that is transmitted by the TCP module will be held
until it has been ACKed by the remote host. If an ACK is not
received for the data within three seconds it will be
retransmitted. All data in the buffer that is not ACKed will be
retransmitted (except if EOL is set; see previous section). If
the data is still not ACKed for another seven seconds,
retransmission will occur again. This procedure will continue
using the series 3,7,15,15,30 . If there is still no ACK, then
the user will be notified. The retransmissions will continue
every 30 seconds until either the user closes the connection or
the TCP module receives an ACK.
7.7 Acknowledgement and Window Strategy
The Acknowledgement (ACK) and Window parameters are used to
control how much data the remote host can send to the TAC. The
-24-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
TCP module will ACK data up to the limit it is willing to buffer
for a connection. Data received after this limit is reached will
be discarded. As the data is received, but before the next
protocol module takes it out of the buffer, the window will be
closed by the amount received. When the buffer limit is reached,
the TCP module will not ACK any new data and will be advertising
a zero window. When the next protocol module takes data out of
the buffer, the window will be opened. This will allow the
remote host to send more data.
When data is sent on the connection, the current ACK and
Window values are always included in the same message. In the
case where no data is being sent and the ACK and/or Window values
have changed, a different strategy is used. When the ACK pointer
is advanced, the TCP module will wait one second to see if there
is data to send. If there has been no data sent for one second,
then the ACK will be sent without data. A new window value will
not be sent until the buffer is at least half empty. This
strategy is designed to insure that the remote host sends blocks
of data and to eliminate unnecessary retransmissions.
7.8 Sequencing
When the TCP module gets a data message for a connection, it
must insure that the data is sequenced before it passes the data
-25-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
to the next protocol module. The sequencing is done by comparing
the sequence number of the message to the current "Left Window
Edge" (LWE) and manipulation of the "offset", "length", and
"pointer to data" fields of the MBLKs that make up the message.
For each connection a list is maintained of MBLKs that are being
sequenced. The MBLKs are in order but there may be missing data.
When the TCP module is ready to sequence the data, the
message consists of a PDB, followed by one or more MBLKs linked
together. The "pointer to data" field points to the actual TCP
data. The "offset" fields are all zero because the data in the
message is sequential relative to itself. The "length" field is
the amount of data in each MBLK.
The sequencing is done by linking the MBLKs of the new
message into the sequencing list for the connection for which the
data message is intended. This is done via the following steps:
1. Subtract the LWE from the Sequence number of the
message. The result is the offset from the LWE. Then
set the "offset" field of the first MBLK to this result.
If it is zero, this means that there is no missing data.
Otherwise, the result is the amount of missing data.
2. Add the MBLKs to the existing list. If there are no
MBLKs on the list, then the new MBLKs become the list.
Otherwise, the insertion is done in the following steps:
a) Find the position in which to add the new MBLK
by adding together the "offset" and "length" of
first MBLK in the list. If "offset" of new MBLK
is less than the sum, then the new MBLK goes
before the MBLK in the list. Otherwise, add
-26-
IEN-166 R. Hinden
Bolt Beranek and Newman Inc.
January 1981
"offset" and "length" of the next MBLK in the
list to the previous sum. Repeat this procedure
until a fit is found or the end of list.
b) Link the new MBLK into the list.
c) Subtract the ("offset" + "length") of the
previous MBLK from "offset" of the new MBLK.
d) Subtract the ("offset" + "length") of the new
MBLK from "offset" of the next MBLK.
0verlapping data will be handled by adjusting the "length" field
in the MBLKs as the new MBLKs are linked in.
The result of these operations is a list of MBLKs. The
"offset" field in the MBLKs contains the number of missing data
bytes before it. When the MBLK is at the front of the list, a
zero "offset" means the data is sequenced and can be passed to
the next protocol module. As data is taken by the next protocol
module, the "length" field of the first MBLK should be
decremented. When it is zero, the block is empty and can be
discarded.
-27-