The TCP provides for reliable inter-process communication between pairs of processes in host computers attached to distinct but interconnected computer communication networks. [p1.]
The TCP interfaces on one side to user or application processes and on the other side to a lower level protocol such as Internet Protocol. [p3.]
As noted above, the primary purpose of the TCP is to provide reliable, securable logical circuit or connection service between pairs of processes. [p3.]
Basic Data Transfer: [p4.]
The TCP is able to transfer a continuous stream of octets in each direction between its users by packaging some number of octets into segments for transmission through the internet system. In general, the TCPs decide when to block and forward data at their own convenience.
Sometimes users need to be sure that all the data they have submitted to the TCP has been transmitted. For this purpose a push function is defined. To assure that data submitted to a TCP is actually transmitted the sending user indicates that it should be pushed through to the receiving user. A push causes the TCPs to promptly forward and deliver data up to that point to the receiver. The exact push point might not be visible to the receiving user and the push function does not supply a record boundary marker.
Reliability:
The TCP must recover from data that is damaged, lost, duplicated, or delivered out of order by the internet communication system. This is achieved by assigning a sequence number to each octet transmitted, and requiring a positive acknowledgment (ACK) from the receiving TCP. If the ACK is not received within a timeout interval, the data is retransmitted. At the receiver, the sequence numbers are used to correctly order segments that may be received out of order and to eliminate duplicates. Damage is handled by adding a checksum to each segment transmitted, checking it at the receiver, and discarding damaged segments.
As long as the TCPs continue to function properly and the internet system does not become completely partitioned, no transmission errors will affect the correct delivery of data. TCP recovers from internet communication system errors.
Flow Control:
TCP provides a means for the receiver to govern the amount of data sent by the sender. This is achieved by returning a "window" with every ACK indicating a range of acceptable sequence numbers beyond the last segment successfully received. The window indicates an allowed number of octets that the sender may transmit before receiving further permission.
Multiplexing: [p5.]
To allow for many processes within a single Host to use TCP communication facilities simultaneously, the TCP provides a set of addresses or ports within each host. Concatenated with the network and host addresses from the internet communication layer, this forms a socket. A pair of sockets uniquely identifies each connection. That is, a socket may be simultaneously used in multiple connections.
The binding of ports to processes is handled independently by each Host. However, it proves useful to attach frequently used processes (e.g., a "logger" or timesharing service) to fixed sockets which are made known to the public. These services can then be accessed through the known addresses. Establishing and learning the port addresses of other processes may involve more dynamic mechanisms.
Connections:
The reliability and flow control mechanisms described above require that TCPs initialize and maintain certain status information for each data stream. The combination of this information, including sockets, sequence numbers, and window sizes, is called a connection. Each connection is uniquely specified by a pair of sockets identifying its two sides.
When two processes wish to communicate, their TCP's must first establish a connection (initialize the status information on each side). When their communication is complete, the connection is terminated or closed to free the resources for other uses.
Since connections must be established between unreliable hosts and over the unreliable internet communication system, a handshake mechanism with clock-based sequence numbers is used to avoid erroneous initialization of connections.
Precedence and Security:
The users of TCP may indicate the security and precedence of their communication. Provision is made for default values to be used when these features are not needed.
The active agents that produce and consume messages are processes. [p7.]
Since a process may need to distinguish among several communication streams between itself and another process (or processes), we imagine that each process may have a number of ports through which it communicates with the ports of other processes. [p7.]
The TCP is assumed to be a module in an operating system. [p8.]
Interfaces [p9. 2.4. ]
The TCP/user interface provides for calls made by the user on the TCP to OPEN or CLOSE a connection, to SEND or RECEIVE data, or to obtain STATUS about a connection. These calls are like other calls from user programs on the operating system, for example, the calls to open, read from, and close a file.
The TCP/internet interface provides calls to send and receive datagrams addressed to TCP modules in hosts anywhere in the internet system. These calls have parameters for passing the address, type of service, precedence, security, and other control information.
Reliable Communication [p9. 2.6.]
A stream of data sent on a TCP connection is delivered reliably and in order at the destination.
Connection Establishment and Clearing [p9 2.7. ]
To identify the separate data streams that a TCP may handle, the TCP provides a port identifier. Since port identifiers are selected independently by each TCP they might not be unique. To provide for unique addresses within each TCP, we concatenate an internet address identifying the TCP with a port identifier to create a socket which will be unique throughout all networks connected together.
A connection is fully specified by the pair of sockets at the ends. A local socket may participate in many connections to different foreign 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 are necessary in any implementation. There must be well-known sockets which the TCP associates only with the "appropriate" processes by some means. We envision that processes may "own" ports, and that processes can initiate connections only on the ports they own. (Means for implementing ownership is a local issue, but we envision a Request Port user command, or a method of uniquely allocating a group of ports to a given process, e.g., by 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 and foreign socket arguments.
Data Communication [p12 2.8. ]
The data that flows on a connection may be thought of as a stream of octets.
A local connection name will be returned to the user by the TCP. The local connection name can then be used as a short hand term for the connection defined by the <local socket, foreign socket> pair. [p46.]
Send
Format: SEND (local connection name, buffer address, byte count, PUSH flag, URGENT flag [,timeout])
This call causes the data contained in the indicated user buffer to be sent on the indicated connection.
Receive [p47.]
Format: RECEIVE (local connection name, buffer address, byte count) -> byte count, urgent flag, push flag
This command allocates a receiving buffer associated with the specified connection.
Destination Address - The destination address, usually the network and host identifiers.
host - A computer. In particular a source or destination of messages from the point of view of the communication network.
internet address - A source or destination address specific to the host level.
IP - Internet Protocol.
module - An implementation, usually in software, of a protocol or other procedure.
octet - An eight bit byte.
port - The portion of a socket that specifies which logical input or output channel of a process is associated with the data.
process - A program in execution. A source or destination of data from the point of view of the TCP or other host-to-host protocol.
socket - An address which specifically includes a port identifier, that is, the concatenation of an Internet Address with a TCP port.
Source Address - The source address, usually the network and host identifiers.
TCP - Transmission Control Protocol: A host-to-host protocol for reliable communication in internetwork environments.