summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc675.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc675.txt')
-rw-r--r--doc/rfc/rfc675.txt3923
1 files changed, 3923 insertions, 0 deletions
diff --git a/doc/rfc/rfc675.txt b/doc/rfc/rfc675.txt
new file mode 100644
index 0000000..5393970
--- /dev/null
+++ b/doc/rfc/rfc675.txt
@@ -0,0 +1,3923 @@
+
+
+
+
+
+
+Network Working Group Vinton Cerf
+Request for Comments: 675 Yogen Dalal
+NIC: 2 Carl Sunshine
+INWG: 72 December 1974
+
+
+ SPECIFICATION OF INTERNET TRANSMISSION CONTROL PROGRAM
+
+ December 1974 Version
+
+
+1. INTRODUCTION
+
+ This document describes the functions to be performed by the
+ internetwork Transmission Control Program [TCP] and its interface to
+ programs or users that require its services. Several basic
+ assumptions are made about process to process communication and these
+ are listed here without further justification. The interested reader
+ is referred to [CEKA74, TOML74, BELS74, DALA74, SUNS74] for further
+ discussion.
+
+ The authors would like to acknowledge the contributions of R.
+ Tomlinson (three way handshake and Initial Sequence Number
+ Selection), D. Belsnes, J. Burchfiel, M. Galland, R. Kahn, D. Lloyd,
+ W. Plummer, and J. Postel all of whose good ideas and counsel have
+ had a beneficial effect (we hope) on this protocol design. In the
+ early phases of the design work, R. Metcalfe, A. McKenzie, H.
+ Zimmerman, G. LeLann, and M. Elie were most helpful in explicating
+ the various issues to be resolved. Of course, we remain responsible
+ for the remaining errors and misstatements which no doubt lurk in the
+ nooks and crannies of the text.
+
+ Processes are viewed as the active elements of all HOST computers in
+ a network. Even terminals and files or other I/O media are viewed as
+ communicating through the use of processes. Thus, all network
+ communication is viewed as inter-process communication.
+
+ 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.
+
+ Since port names are selected independently by each operating system,
+ TCP, or user, they may not be unique. To provide for unique names at
+ each TCP, we concatenate a NETWORK identifier, and a TCP identifier
+ with a port name to create a SOCKET name which will be unique
+ throughout all networks connected together.
+
+
+
+
+Cerf, Dalal & Sunshine [Page 1]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ A pair of sockets form a CONNECTION which can be used to carry data
+ in either direction [i.e. full duplex]. The connection is uniquely
+ identified by the <local socket, foreign socket> address pair, and
+ the same local socket can participate in multiple connections to
+ different foreign sockets [see Section 2.2].
+
+ Processes exchange finite length LETTERS as a way of communicating;
+ thus, letter boundaries are significant. However, the length of a
+ letter may be such that it must be broken into FRAGMENTS before it
+ can be transmitted to its destination. We assume that the fragments
+ will normally be reassembled into a letter before being passed to the
+ receiving process. Throughout this document, it is legitimate to
+ assume that a fragment contains all or a part of a letter, but that a
+ fragment never contains parts of more than one letter.
+
+ We specifically assume that fragments are transmitted from Host to
+ Host through means of a PACKET SWITCHING NETWORK [PSN] [ROWE70,
+ POUZ73]. This assumption is probably unnecessary, since a circuit
+ switched network could also be used, but for concreteness, we
+ explicitly assume that the hosts are connected to one or more PACKET
+ SWITCHES [PS] of a PSN [HEKA7O, POUZ74, SCWI71].
+
+ Processes make use of the TCP by handing it letters. The TCP breaks
+ these into fragments, if necessary, and then embeds each fragment in
+ an INTERNETWORK PACKET. Each internetwork packet is in turn embedded
+ in a LOCAL PACKET suitable for transmission from the host to one of
+ its serving PS. The packet switches may perform further formatting or
+ other operations to achieve the delivery of the local packet to the
+ destination Host.
+
+ The term LOCAL PACKET is used generically here to mean the formatted
+ bit string exchanged between a host and a packet switch. The format
+ of bit strings exchanged between the packet switches in a PSN will
+ generally not be of concern to us. If an internetwork packet is
+ destined for a TCP in a foreign PSN, the packet is routed to a
+ GATEWAY which connects the origin PSN with an intermediate or the
+ destination PSN. Routing of internetwork packets to the GATEWAY may
+ be the responsibility of the source TCP or the local PSN, depending
+ upon the PSN Implementation.
+
+ One model of TCP operation is to imagine that there is a basic
+ GATEWAY associated with each TCP which provides an interface to the
+ local network. This basic GATEWAY performs routing and packet
+ reformatting or embedding, and may also implement congestion and
+ error control between the TCP and GATEWAYS at or intermediate to the
+ destination TCP.
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 2]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ At a GATEWAY between networks, the internetwork packet is unwrapped
+ from its local packet format and examined to determine through which
+ network the internetwork packet should travel next. The internetwork
+ packet is then wrapped in a local packet format suitable to the next
+ network and passed on to a new packet switch.
+
+ A GATEWAY is permitted to break up the fragment carried by an
+ internetwork packet into smaller fragments if this is necessary for
+ transmission through the next network. To do this, the GATEWAY
+ produces a set of internetwork packets, each carrying a new fragment.
+ The packet format is designed so that the destination TCP may treat
+ fragments created by the source TCP or by intermediate GATEWAYS
+ nearly identically.
+
+ The TCP is responsible for regulating the flow of internetwork
+ packets to and from the processes it serves, as a way of preventing
+ its host from becoming saturated or overloaded with traffic. The TCP
+ is also responsible for retransmitting unacknowledged packets, and
+ for detecting duplicates. A consequence of this error
+ detection/retransmission scheme is that the order of letters received
+ on a given connection is also maintained [CEKA74, SUNS74]. To perform
+ these functions, the TCP opens and closes connections between ports
+ as described in Section 4.3. The TCP performs retransmission,
+ duplicate detection, sequencing, and flow control on all
+ communication among the processes it serves.
+
+2. The TCP INTERFACE to the USER
+
+2.1 The TCP as a POST OFFICE
+
+ The TCP acts in many ways like a postal service since it provides a
+ way for processes to exchange letters with each other. It sometimes
+ happens that a process may offer some service, but not know in
+ advance what its correspondents' addresses are. The analogy can be
+ drawn with a mail order house which opens a post office box which can
+ accept mail from any source. Unlike the post box, however, once a
+ letter from a particular correspondent arrives, a port becomes
+ specific to the correspondent until the owner of the port declares
+ otherwise.
+
+ In addition to acting like a postal service, the TCP insures end-to-
+ end acknowledgment, error correction, duplicate detection,
+ sequencing, and flow control.
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 3]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+2.2 Sockets and Addressing
+
+ We have borrowed the term SOCKET from the ARPANET terminology
+ [CACR70, MCKE73]. In general, a socket is the concatenation of a
+ NETWORK identifier, TCP identifier, and PORT identifier. A CONNECTION
+ is fully specified by the pair of SOCKETS at each end since the same
+ local socket may participate in many connections to different foreign
+ sockets.
+
+ Once the connections is specified in the OPEN command [see section
+ 2.3.2], the TCP supplies a [short] Local Connection Name by which the
+ user refers to the connection in subsequent commands. In particular
+ this facilitates using connections with initially unspecified foreign
+ sockets.
+
+ TCP's are free to associate ports with processes however they choose.
+ However, several basic concepts seem necessary in an implementation.
+ There must be well known sockets [WKS] which the TCP associates only
+ with the "appropriate" processes by some means. We envision that
+ processes may "own" sockets, and that processes can only initiate
+ connections on the sockets they own [means for implementing ownership
+ is a local issue, but we envision a Request Port user call, 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.]
+
+ Once initiated, a connection may be passed to another process that
+ does not own the local socket [e.g. from logger to service process].
+ Strictly speaking this is a reconnection issue which might be more
+ elegantly handled by a general reconnection protocol as discussed in
+ section 3.3. To simplify passing a connection within a single TCP,
+ such "invisible" switches may be allowed as in TENEX systems.
+
+ Of course, each connection is associated with exactly one process,
+ and any attempt to reference that connection by another process will
+ be signaled as an error by the TCP. This prevents stealing data from
+ or inserting data into another process' data stream.
+
+ A connection is initiated by the rendezvous of an arriving
+ internetwork packet and a waiting Transmission Control Block [TCB]
+ created by a user OPEN, SEND, INTERPUPT, or RECEIVE call [see section
+ 2.3]. The matching of local and foreign socket identifiers determines
+ when a successful connection has been initiated. The connection
+ becomes established when sequence numbers have been synchronized in
+ both directions as described in section 4.3.2.
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 4]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ It is possible to specify a socket only partially by setting the PORT
+ identifier to zero or setting both the TCP and PORT identifiers to
+ zero. A socket of all zero is called UNSPECIFIED. The purpose behind
+ unspecified sockets is to provide a sort of "general delivery"
+ facility [useful for logger type processes with well known sockets].
+
+ There are bounds on the degree of unspecificity of socket
+ identifiers. TCB's must have fully specified local sockets, although
+ the foreign socket may be fully or partly unspecified. Arriving
+ packets must have fully specified sockets.
+
+ We employ the following notation:
+
+ x.y.z = fully specified socket with x=net, y=TCP, z=port
+
+ x.y.u = as above, but unspecified port
+
+ x.u.u = as above, but unspecified TCP and port
+
+ u.u.u = completely unspecified
+
+ with respect to implementation, u = 0 [zero]
+
+ We illustrate the principles of matching by giving all cases of
+ incoming packets which match with existing TCB's. Generally, both
+ the local (foreign) socket of the TCB and the foreign (local) socket
+ of the packet must match.
+
+ TCB local TCB foreign Packet local Packet foreign
+
+ (a) a.b.c e.f.g e.f.g a.b.c
+
+ (b) a.b.c e.f.u e.f.g a.b.c
+
+ (c) a.b.c e.u.u e.f.g a.b.c
+
+ (d) a.b.c u.u.u e.f.g a.b.c
+
+ There are no other legal combinations of socket identifiers which
+ match. Case (d) is typical of the ARPANET well known socket idea in
+ which the well known socket (a.b.c) LISTENS for a connection from
+ any (u.u.u) socket. Cases (b) and (c) can be used to restrict
+ matching to a particular TCP or net.
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 5]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+2.3 TCP USER CALLS
+
+2.3.1 A Note on Style
+
+ The following sections functionally define the USER/TCP interface.
+ The notation used is similar to most procedure or function calls in
+ high level languages, but this usage is not meant to rule out trap
+ type service calls [e.g. SVC's, UUO's, EMT's,...].
+
+ The user calls described below specify the basic functions the TCP
+ will perform to support interprocess communication. Individual
+ implementations should define their own exact format, and may
+ provide combinations or subsets of the basic functions in single
+ calls. In particular, some implementations may wish to automatically
+ OPEN a connection on the first SEND, RECEIVE, or INTERRUPT issued by
+ the user for a given connection.
+
+ In providing interprocess communication facilities, the TCP must not
+ only accept commands, but also return information to the processes
+ it serves. This communication consists of:
+
+ (a) general information about a connection [interrupts, remote
+ close, binding of unspecified foreign socket].
+
+ (b) replies to specific user commands indicating success or various
+ types of failure.
+
+ Although the means for signaling user processes and the exact format
+ of replies will vary from one implementation to another, it would
+ promote common understanding and testing if a common set of codes
+ were adopted. Such a set of Event Codes is described in section 2.4.
+
+ With respect to error messages, references to "local" and "foreign"
+ are ambiguous unless it is known whether these refer to the world as
+ seen by the sender or receiver of the error message. The authors
+ attempted several different approaches and finally settled on the
+ convention that these references would be as seen by the receiver of
+ the message.
+
+2.3.2 OPEN CONNECTION
+
+ Format: OPEN(local port, foreign socket [, timeout])
+
+ We assume that the local TCP is aware of the identity of the
+ processes it serves and will check the authority of the process to
+ use the connection specified. Depending upon the implementation of
+ the TCP, the source network and TCP identifiers will either be
+ supplied by the TCP or by the processes that serve it [e.g. the
+
+
+
+Cerf, Dalal & Sunshine [Page 6]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ program which interfaces the TCP to its packet switch or the packet
+ switch itself]. These considerations are the result of concern about
+ security, to the extent that no TCP be able to masquerade as another
+ one, and so on. Similarly, no process can masquerade as another
+ without the collusion of the TCP.
+
+ If no foreign socket is specified [i.e. the foreign socket parameter
+ is 0 or not present], then this constitutes a LISTENING local socket
+ which can accept communication from any foreign socket. Provision is
+ also made for partial specification of foreign sockets as described
+ in section 2.2.
+
+ If the specified connection is already OPEN, an error is returned,
+ otherwise a full-duplex transmission control block [TCB] is created
+ and partially filled in with data from the OPEN command parameters.
+ The TCB format is described in more detail in section 4.2.2.
+
+ No network traffic is generated by the OPEN command. The first SEND
+ or INTERRUPT by the local user or the foreign user will cause the TCP
+ to synchronize the connection.
+
+ The timeout, if present, permits the caller to set up a timeout for
+ all letters transmitted on the connection. If a letter is not
+ successfully transmitted within the timeout period, the user is
+ notified and may ignore the condition [TCP will continue trying to
+ transmit] or direct the TCP to close the connection. The present
+ global default is 30 seconds, and connections which are set up
+ without specifying another timeout will retransmit every letter for
+ at least 30 seconds before notifying the user. The retransmission
+ rate may vary, and is the responsibility of the TCP and not the user.
+ Most likely, it will be related to the measured time for responses to
+ return from letters sent.
+
+ Depending on the TCP implementation, either a local connection name
+ will be returned to the user by the TCP, or the user will specify
+ this local connection name (in which case another parameter is needed
+ in the call). The local connection name can then be used as a short
+ hand term for the connection defined by the <local socket, foreign
+ socket> pair.
+
+ Responses from the TCP which may occur as a result of this call are
+ detailed in section 2.4.
+
+2.3.3 SEND LETTER
+
+ Format: SEND(local connection name, buffer address, byte count, EOL
+ flag [, timeout])
+
+
+
+
+Cerf, Dalal & Sunshine [Page 7]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ This call causes the data contained in the indicated user buffer to
+ be sent on the indicated connection. If the connection has not been
+ opened, the SEND is considered an error. Some implementations may
+ allow users to SEND first, in which case an automatic OPEN would be
+ done. If the calling process is not authorized to use this
+ connection, an error is returned.
+
+ If the EOL flag is set, the data is the End Of a Letter, and the EOL
+ bit will be set in the last packet created from the buffer. If the
+ EOL f1ag is not set, subsequent SEND's will appear as part of the
+ same letter. This extended letter facility should be used sparingly
+ because some TCP's may delay processing packets until an entire
+ letter is received.
+
+ If no foreign socket was specified in the OPEN, but the connection is
+ established [e.g. because a listening connection has become specific
+ due to a foreign letter arriving for the local port] then the
+ designated letter is sent to the implied foreign socket. In general,
+ users who make use of OPEN with an unspecified foreign socket can
+ make use of SEND without ever explicitly knowing the foreign socket
+ address.
+
+ However, if a SEND is attempted before the foreign socket becomes
+ specified, an error will be returned. Users can use the STATUS call
+ to determine the status of the connection. In some implementations
+ the TCP may notify the user when an unspecified socket is bound.
+
+ If the timeout is specified, then the current default timeout for
+ this connection is changed to the new one. This can affect not only
+ all letters sent including and after this one, but also those which
+ have not yet been sent, since the timeout is kept in the TCB and not
+ associated with each letter sent. Of course, a time is maintained for
+ each internetwork packet formed so as to determine how long each of
+ these has been on the retransmission queue.
+
+ In the simplest implementation, SEND would not return control to the
+ sending process until either the transmission was complete or the
+ timeout had been exceeded. This simple method is highly subject to
+ deadlocks and is not recommended. [For example both sides of the
+ connection try to do SEND's before doing any RECEIVE's.] A more
+ sophisticated implementation would return immediately to allow the
+ process to run concurrently with network I/O, and, furthermore, to
+ allow multiple SENDs to be in progress concurrently. Multiple SENDs
+ are served in first come, first served order, so the TCP will queue
+ those it cannot service immediately.
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 8]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ NOTA BENE: In order for the process to distinguish among error or
+ success indications for different letters, the buffer address should
+ be returned along with the coded response to the SEND request. We
+ will offer an example event code format in section 2.4, showing the
+ information which should be returned to the calling process.
+
+ The semantics of the INTERRUPT call are described later, but this
+ call can have an effect on letters which have been given to the TCP
+ but not yet sent. In particular, all such letters are flushed by the
+ source TCP. Thus one of the responses to a SEND may be "flushed due
+ to interrupt."
+
+ Responses from the TCP which may occur as a result of this call are
+ detailed in section 2.4.
+
+2.3.4 RECEIVE LETTER
+
+ Format: RECEIVE(local connection name, buffer address, byte count)
+
+ This command allocates a receiving buffer associated with the
+ specified connection. If no OPEN precedes this command or the calling
+ process is not authorized to use this connection, an error is
+ returned.
+
+ In the simplest implementation, control would not return to the
+ calling program until either a letter was received, or some error
+ occurred, but this scheme is highly subject to deadlocks [see section
+ 2.3.3]. A more sophisticated implementation would permit several
+ RECEIVE's to be outstanding at once, These would be filled as letters
+ arrive. This strategy permits increased throughput, at the cost of a
+ more elaborate scheme [possibly asynchronous] to notify the calling
+ program that a letter has been received.
+
+ If insufficient buffer space is given to reassemble a complete
+ letter, an indication that the buffer holds a partial letter will be
+ given; the buffer will be filled with as much data as it can hold.
+
+ The remaining parts of a partly delivered letter will be placed in
+ buffers as they are made available via successive RECEIVES. If a
+ number of RECEIVES are outstanding, they may be filled with parts of
+ a single long letter or with at most one letter each. The event codes
+ associated with each RECEIVE will indicate what is contained in the
+ buffer.
+
+ To distinguish among several outstanding RECEIVES, and to take care
+ of the case that a letter is smaller than the buffer supplied, the
+ event code is accompanied by both a buffer pointer and a byte count
+ indicating the actual length of the letter received.
+
+
+
+Cerf, Dalal & Sunshine [Page 9]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ The semantics of the INTERRUPT system call are discussed later, but
+ this call can have an effect on outstanding RECEIVES. When the TCP
+ receives an INTERRUPT, it will flush all data currently queued up
+ awaiting receipt by the receiving process. If no data is waiting, but
+ several buffers have been made available by anticipatory RECEIVE
+ commands, these buffers are returned to the process with an error
+ indicating that any data that might have been placed in those buffers
+ has been flushed. This enables the receiving process to synchronize
+ its RECEIVES with the interrupt. That is, the process can distinguish
+ between RECEIVES issued before the receipt of the INTERRUPT and these
+ issued afterwards.
+
+ Responses from the TCP which may occur as a result of this call are
+ detailed in section 2.4.
+
+2.3.5 CLOSE CONNECTION
+
+ Format: CLOSE(local connection name)
+
+ This command causes the connection specified to be closed. If the
+ connection is not open or the calling process is not authorized to
+ use this connection, an error is returned. Any unfilled receive
+ buffers or pending send buffers will be returned to the user with
+ event codes indicating they were aborted due to the CLOSE. Users
+ should wait for event codes for each SEND before closing the
+ connection if they wish to be certain that all letters were
+ successfully delivered.
+
+ The user may CLOSE the connection at any time on his own initiative,
+ or in response to various prompts from the TCP [remote close
+ executed, transmission timeout exceeded, destination inaccessible].
+
+ Because closing a connection requires communication with the foreign
+ TCP, connections may remain in the closing state for a short time.
+ Attempts to reopen the connection before the TCP replies to the CLOSE
+ command will result in errors.
+
+ Responses from the TCP which may occur as a result of this call are
+ detailed in section 2.4.
+
+2.3.6 INTERRUPT
+
+ Format: INTERRUPT(local connection name)
+
+ A special control signal is sent to the destination indicating an
+ interrupt condition. This facility can be used to simulate "break"
+ signals from terminals or error or completion codes from I/O devices,
+ for example. The semantics of this signal to the receiving process
+
+
+
+Cerf, Dalal & Sunshine [Page 10]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ are unspecified. The receiving TCP will signal the interrupt to the
+ receiving process immediately upon receipt, and will also flush any
+ outstanding letters waiting to be delivered. Since it is possib1e to
+ tell where in the letter stream this command was invoked, it is
+ possible for the receiving TCP to flush only preceding data. The
+ sending TCP will flush any letters pending transmission, returning a
+ special error code to indicate the flush.
+
+ If the connection is not open or the calling process is not
+ authorized to use this connection, an error is returned.
+
+ Responses from the TCP which may occur as a result of this call are
+ detailed in section 2.4.
+
+2.3.7 STATUS
+
+ Format: STATUS(local connection name)
+
+ This command returns a data block containing the following
+ information:
+
+ local socket, foreign socket, local connection name, receive window,
+ send window, connection state, number of letters awaiting
+ acknowledgment, number of letters pending receipt [including partial
+ ones], default transmission timeout
+
+ Depending on the state of the connection, some of this information
+ may not be available or meaningful. If the calling process is not
+ authorized to use this connection, an error is returned. This
+ prevents unauthorized processes from gaining information about a
+ connection.
+
+ Responses from the TCP which may occur as a result of this call are
+ detailed in section 2.4.
+
+2.4 TCP TO USER MESSAGES
+
+2.4.1 TYPE CODES
+
+ All messages include a type code which identifies the type of user
+ call to which the message applies. Types are:
+
+ 0 - General message, does not apply to a particular user call
+
+ 1 - Applies to OPEN
+
+ 2 - Applies to CLOSE
+
+
+
+
+Cerf, Dalal & Sunshine [Page 11]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ 3 - Applies to INTERRUPT
+
+ 10 - Applies to SEND
+
+ 20 - Applies to RECEIVE
+
+ 30 - Applies to STATUS
+
+2.4.2 MESSAGE FORMAT [notional]
+
+ All messages include the following three fields:
+
+ Type code
+
+ Local connection name
+
+ Event code
+
+ For message types 0-3 [General, Open, Close, Interrupt] only these
+ three fields are necessary.
+
+ For message type 10 [Send] one additional field is necessary:
+
+ Buffer address
+
+ For message type 20 [Receive] three additional fields are necessary:
+
+ Buffer address
+
+ Byte count
+
+ End-of-letter flag
+
+ For message type 30 [status] additional data might include;
+
+ Local socket, foreign socket
+
+ Send window [measures buffer space at foreign TCP]
+
+ Receive window [measures buffer space at local TCP]
+
+ Connection state [see section 4.3.6]
+
+ Number of letters awaiting acknowledgment
+
+ Number of letters awaiting receipt
+
+ Retransmission timeout
+
+
+
+Cerf, Dalal & Sunshine [Page 12]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+2.4.3 EVENT CODES
+
+ The event code specifies the particular event that the TCP wishes to
+ communicate to the user.
+
+ In addition to the event code, three flags may be useful to classify
+ the event into major categories and facilitate event processing by
+ the user:
+
+ E flag: set if event is an error
+
+ L/F flag: indicates whether event was generated by Local TCP, or
+ Foreign TCP or network
+
+ P/T flag: indicates whether the event is Permanent or Temporary
+ [retry may succeed]
+
+ Events are encoded into 8 bits with the high order bits set to
+ indicate the state of the E, L/F, and P/T flags, respectively.
+
+ Events specified so far are listed below with their codes and flag
+ settings. A * means a flag does not apply or can take both values for
+ this event. Additional events may be defined in the course of
+ experimentation.
+
+ 0 0** general success
+
+ 1 ELP connection illegal for this process
+
+ 2 OF* unspecified foreign socket has become bound
+
+ 3 ELP connection not open
+
+ 4 ELT no room for TCB
+
+ 5 ELT foreign socket unspecified
+
+ 6 ELP connection already open
+ EFP unacceptable SYN [or SYN/ACK] arrived at foreign
+ TCP. Note: This is not a misprint, the local meaning is different
+ from foreign.
+
+ 7 EFP connection does not exist at foreign TCP
+
+ 8 EFT foreign TCP inaccessible [may have subcases]
+
+ 9 ELT retransmission timeout
+
+
+
+
+Cerf, Dalal & Sunshine [Page 13]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ 10 E*P buffer flushed due to interrupt
+
+ 11 OF* interrupt to user
+
+ 12 **P connection closing
+
+ 13 E** general error
+
+ 14 E*P connection reset
+
+ Possible events for each message type are as follows:
+
+ Type 0[general]: 2,11,12,14
+
+ Type 1[open]: 0,1,4,6,13
+
+ Type 2[close]: 0,1,3,13
+
+ Type 3[interrupt]: 0,1,3,5,7,8,9,12,13
+
+ Type 10[send]: 0,1,3,5,7,8,9,10,11,12,13
+
+ Type 20[receive]: 0,1,3,10,12,13
+
+ Type 30[status]: 0,1,13
+
+ Note that events 6(foreign), 7, 8 are generated at the foreign TCP or
+ in the network[s], and these same codes are used in the error field
+ of the internet packet [see section 4.2.1].
+
+3. HIGHER LEVEL PROTOCOLS
+
+3.1 INTRODUCTION
+
+ It is envisioned that the TCP will be able to support higher level
+ protocols efficiently. It should be easy to interface existing
+ ARPANET protocols like TELNET and FTP to the TCP.
+
+3.2 WELL KNOWN SOCKETS
+
+ At some point, a set of well known 24 bit port numbers must be
+ picked. The type of service associated with the well known ports
+ might include:
+
+ (a) Logger
+
+ (b) FTP (File transfer protocol)
+
+
+
+
+Cerf, Dalal & Sunshine [Page 14]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ (c) RJE (Remote job entry)
+
+ (d) Host status
+
+ (e) TTY Test
+
+ (f) HELP - descriptive, interactive system documentation
+
+ WE RESERVE WELL KNOWN SOCKET 0 (24 bits of 0) for global messages
+ destined for a particular TCP but not related to any particular
+ connection. We imagine that this socket would be used for unusual TCP
+ synchronization (e.g. RESET ALL) or for testing purposes (e.g.
+ sending letters to TRASHCAN or ECHO). This does not conflict with the
+ usage that if a socket is 0, it is unspecified, since no user can
+ SEND, CLOSE, or INTERRUPT on socket 0.
+
+3.3 RECONNECTION PROTOCOL (RCP)
+
+ Port identifiers fall into two categories: permanent and transient.
+ For example, a Logger process is generally assigned a port identifier
+ that is fixed and well known. Transient processes will in general
+ have ID's which are dynamically assigned.
+
+ In the distributed processing environment of the network, two
+ processes that don't have well known port identifiers may often wish
+ to communicate. This can be achieved with the help of a well known
+ process using a reconnection protocol. Such a protocol is briefly
+ outlined using the communication facilities provided by the TCP. It
+ essentially provides a mechanism by which port identifiers are
+ exchanged in order to establish a connection between a pair of
+ sockets.
+
+ Such a protoco1 can be used to achieve the dynamic establishment of
+ new connections in order to have multiple processes solving a problem
+ cooperatively, or to provide a user process access to a server
+ process via a logger, when the logger's end of the connection can not
+ be invisibly passed to the server process.
+
+ A paper on this subject by R. Schantz [SCHA74] discusses some of the
+ issues associated with reconnection, and some of the ideas contained
+ therein went into the design of the protocol outlined below.
+
+ In the ARPANET, a protocol was implemented which would allow a
+ process to connect to a well known socket, thus making an implicit
+ request for service, and then be switched to another socket so that
+ the well known socket could be freed for use by others. Since sockets
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 15]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ in our TCP are permitted to have connections with more than one
+ foreign socket, this facility may not be explicitly needed (i.e.
+ connections <A,B> and <A,C> are distinguishable).
+
+ However. the well known socket may be in one network and the actual
+ service socket(s) may be in another network (or at least in another
+ TCP). Thus, the invisible switching of a connection from one port to
+ another within a TCP may not be sufficient as an "Initial Connection
+ Protocol". We imagine that a process wishes to use socket N1.T1.Q to
+ access well known socket N2.T2.P. However, the process associated
+ with socket N2.T2.P will actually start up a new process somewhere
+ which will use N3.T3.S as its server socket. The N(i) and T(i) may be
+ distinct or the same. The user will send to N2.T2.P the relevant user
+ information such as user name, password, and account. The server will
+ start up the server process and send to N1.T1.Q the actual service
+ socket ldentif1er: N3.T3.S. The connection (N1.TI.Q,N2.T2.P) can then
+ be closed, and the user can do a RECEIVE on (N1.T1.Q,N3.T3.S). The
+ serving process can SEND on (N3.T3.S,N1.T1.Q). There are many
+ variations on this scheme, some involving the user process doing a
+ RECEIVE on a different socket (e.g. (N1.T1.X,U.U.U)) with the server
+ doing SEND on (N3.T3.S,N1.T1.X). Without showing all the detail of
+ synchronization of sequence numbers and the like, we can illustrate
+ the exchange as shown below.
+
+ USER SERVER
+
+ 1. RECEIVE(N2.T2.P,U.U.U)
+
+ 1. SEND (N1.T1.Q,N2.T2.P)==>
+
+ <== 2. SEND(N2.T2.P,N1.T1.Q)
+
+ With "N3.T3.S" as data
+
+ 2. RECEIVE(N1.T1.Q,N2.T2.P)
+
+ 3. CLOSE(N1.T1.Q,N2.T2.P)==>
+
+ <:= 3. CLOSE(N2.T2.P,N1.T1.Q)
+
+ 4. RECEIVE(N1.T1.Q,N3.T3.S)
+
+ <== 4. SEND(N3.T3.S,N1.T1.Q)
+
+ At this point, a connection is open between N1.T1.Q and N3.T3.S. A
+ variation might be to have the user do an extra RECEIVE on
+ (N1.T1.X,U.U.U) and have the data "N1.T1.X" be sent in the first user
+ SEND. Then, the server can start up the real serving process and do a
+
+
+
+Cerf, Dalal & Sunshine [Page 16]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ SEND on (N3.T3.S,N1.T1.X) without having to send the "N3.T3.S" data
+ to the user. Or perhaps both server and receiver exchange this data,
+ to assure security of the ultimate connection (i.e. some wild process
+ might try to connect to N1.T1.X if it is merely RECEIVING on foreign
+ socket U.U.U.).
+
+ We do not propose any specific reconnection protocol here, but leave
+ this to further deliberation, since it is really a user level
+ protocol issue.
+
+4. TCP IMPLEMENTATION
+
+4.1 INTRODUCTION
+
+ Conceptually, the TCP is made up of several processes. Some of these
+ deal with USER/TCP commands, and others with packets arriving from
+ the network. The TCP also has an internal measurement facility which
+ can be activated remotely.
+
+ Any particular TCP could be viewed in a number of ways. It could be
+ implemented as an independent process, servicing many user processes.
+ It could be viewed as a set of re-entrant library routines which
+ share a common interface to the local PSN, and common buffer storage.
+ It could even be viewed as a set of processes, some handling the
+ user, some the input of packets from the net, and some the output of
+ packets to the net.
+
+4.2 TCP DATA STRUCTURES
+
+4.2.1 INTERNETWORK PACKET FONMAT
+
+ 8 bits: Internet information
+
+ 2 bits: Reserved for local PSN use
+
+ 2 bits: Header format (11 in binary)
+
+ 4 bits: Protocol version number
+
+ 8 bits: Header length in octets (32 is the current value)
+
+ 16 bits: Length of text in octets
+
+ 32 bits: Packet sequence number
+
+ 32 bits: Acknowledgment number (i.e. sequence number of next octet
+ expected).
+
+
+
+
+Cerf, Dalal & Sunshine [Page 17]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ 16 bits: Window size (in octets)
+
+ 16 bits: Control Information
+
+ Listed from high to low order:
+
+ SYN: Request to synchronize sending sequence numbers
+
+ ACK: There is a valid acknowledgment in the 32 bit ACK field
+
+ FIN: Sender will stop SENDing and RECEIVEing on this connection
+
+ DSN: The sender has stopped using sequence numbers and wants to
+ initiate a new sequence number for sending.
+
+ EOS: This packet is the end of a segment and therefore has a
+ checksum in the 16 bit checksum field. If this bit is not set, the
+ 16 bit checksum field is to be ignored. The bit is usually set,
+ but if fragmentation at a GATEWAY occurs, the packets preceding
+ the last one will not have checksums, and the last packet will
+ have the checksum for the entire original fragment (segment) as it
+ was calculated by the sending TCP.
+
+ EOL: This packet contains the last fragment of a letter. The EOS
+ bit will always be set in this case.
+
+ INT: The sender wants to INTERRUPT on this connection.
+
+ XXX: six (6) unused control bits
+
+ OD: three (3) bits of control dispatch:
+
+ 000: Null (the control octet contents should be ignored}
+
+ 001: Event Code is present in the control octet. These were
+ defined in section 2.4.3.
+
+ 010: Special Functions
+
+ 011: Reject (codes as yet undefined)
+
+ 1XX: Unused
+
+ 8 bits: Control Data Octet
+
+ If CD is 000 then this octet is to be ignored.
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 18]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ If CD is 001, this octet contains event codes defined in section
+ 2.4.3
+
+ If CD is 010, this octet contains a special function code as
+ defined below:
+
+ 0: RESET all connections between Source and Destination TCPs
+
+ l: RESET the specific connection referenced in this packet
+
+ 2: ECHO return packet to sender with the special function code
+ ECHOR (Echo Reply).
+
+ 3: QUERY Query status of connection referenced in this packet
+
+ 4: STATUS Reply to QUERY with requested status.
+
+ 5: ECHOR Echo Reply
+
+ 6: TRASH Discard packet without acknowledgment
+
+ >6: Unused
+
+ Note: Special function packets not pertaining to a particular
+ connection [RESET all, ECHO, ECHOR, and TRASH] are normally
+ sent using socket zero as described in section 3.2.
+
+ If CD is 01l, this octet contains an as yet undefined REJECT code.
+
+ If CD is 1XX, this octet is undefined.
+
+ 4 bits: Length of destination network address in 4 bit units (current
+ value is 1)
+
+ 4 bits: Destination network address
+
+ 1010-1111 are addresses of ARPANET, UCL, CYCLADES, NPL, CADC, and
+ EPSS respectively.
+
+ 16 bits: Destination TCP address
+
+ 8 bits: Padding
+
+ 4 bits: length of source network address in 4 bit units (current
+ value is 1)
+
+ 4 bits: source network address (as for destination address)
+
+
+
+
+Cerf, Dalal & Sunshine [Page 19]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ 16 bits: Source TCP address
+
+ 24 bits: Destination port address
+
+ 24 bits: Source port address
+
+ 16 bits: Checksum (if EOS bit is set)
+
+4.2.2 TRANSMISSION CONTROL BLOCK
+
+ It is highly likely that any implementation will include shared data
+ structures among parts of the TCP and some asynchronous means of
+ signaling users when letters have been delivered.
+
+ One typical data structure is the Transmission Control Block (TCB)
+ which is created and maintained during the lifetime of a given
+ connection. The TCB contains the following information (field sizes
+ are notional only and may vary from one implementation to another):
+
+ 16 bits: Local connection name
+
+ 48 bits: Local socket
+
+ 48 bits: Foreign socket
+
+ 16 bits: Receive window size in octets
+
+ 32 bits: Receive left window edge (next sequence number expected)
+
+ 16 bits: Receive packet buffer size of TCB (may be less than
+ window)
+
+ 16 bits: Send window size in octets
+
+ 32 bits: Send left window edge (earliest unacknowledged octet)
+
+ 32 bits: Next packet sequence number
+
+ 16 bits: Send packet buffer size of TCB (may be less than window)
+
+ 8 bits: Connection state
+
+ E/C - 1 if TCP has been synchronized at least once (i.e. has
+ been established, else O, meaning it is closed; this bit is
+ reset after FINS are exchanged and the user has done a CLOSE).
+ The bit is not reset if the connection is only desynchronized
+ on send or receive or both directions.
+
+
+
+
+Cerf, Dalal & Sunshine [Page 20]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ SS - SYNCed on send side (if set) else desynchronized
+
+ SR - SYNCed on receive side (if set, else desynchronized)
+
+ 16 bits: Special flags
+
+ S1 - SYN sent if set
+
+ S2 - SYN verified if set
+
+ R - SYN received if set
+
+ Y - FIN sent if set
+
+ C - CLOSE from local user received if set
+
+ U - Foreign socket unspecified if set
+
+ SDS - Send side DSN sent if set
+
+ SDV - Send side DSN verified if set
+
+ RDR - Receive side DSN received if set
+
+ Initially, all bits are off [no pun intended] (i.e. SS, SR, E/C, S1,
+ S2, R, F, C, SDS, SDV, RDR =0). When R is set, so is SR. When S1 and
+ S2 are both set, so is SS. SR is reset when RDR is set. SS is reset
+ when both SDS and SDV are set. These bits are used to keep track of
+ connection state and to aid in arriving packet processing (e.g. Can
+ sequence number be validated? Only if SR is set.).
+
+ 16 bits: Retransmission timeout (in eighths of a second#]
+
+ 16 bits: Head of Send buffer queue [buffers SENT from user to TCP,
+ but not packetized]
+
+ 16 bits: Tail of Send buffer queue
+
+ 16 bits: Pointer to last octet packetized in partially packetized
+ buffer (refers to the buffer at the head of the queue)
+
+ 16 bits: Head of Send packet queue
+
+ 16 bits: Tail of Send packet queue
+
+ 16 bits: Head of Packetized buffer Queue
+
+ 16 bits: Tail of Packetized buffer queue
+
+
+
+Cerf, Dalal & Sunshine [Page 21]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ 16 bits: Head of Retransmit packet queue
+
+ 16 bits: Tail of Retransmit packet queue
+
+ 16 bits: Head of Receive buffer queue [queue of buffers given by user
+ to RECEIVE letters, but unfilled]
+
+ 16 bits: Tail of Receive buffer queue
+
+ 16 bits: Head of Receive packet queue
+
+ 16 bits: Tail of receive packet queue
+
+ 16 bits: Pointer to last contiguous receive packet
+
+ 16 bits: Pointer to last octet filled in partly filled buffer
+
+ 16 bits: Pointer to next octet to read from partly emptied packet
+
+ [Note: The above two pointers refer to the head of the receive
+ buffer and receive packet queues respectively]
+
+ 16 bits: Forward TCB pointer
+
+ 16 bits: Backward TCB pointer
+
+4.3 CONNECTION MANAGEMENT
+
+4.3.1 INITIAL SEQUENCE NUMBER SELECTION
+
+ The protocol places no restriction on a particular connection being
+ used over and over again. New instances of a connection will be
+ referred to as incarnations of the connection. The problem that
+ arises owing to this is, "how does the TCP identify duplicate packets
+ from previous incarnations of the connection?". This problem becomes
+ harmfully apparent if the connection is being opened and closed in
+ quick succession, or if the connection breaks with loss of memory and
+ is then reestablished.
+
+ The essence of the solution [TOML74] is that the initial sequence
+ number [ISN] must be chosen so that a particular sequence number can
+ never refer to an "o1d" octet, Once the connection is established the
+ sequencing mechanism provided by the TCP filters out duplicates.
+
+ For an association to be established or initialized, the two TCP's
+ must synchronize on each other's initial sequence numbers. Hence the
+ solution requires a suitable mechanism for picking an initial
+ sequence number [ISN], and a slightly involved handshake to exchange
+
+
+
+Cerf, Dalal & Sunshine [Page 22]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ the ISN's. A "three way handshake" is necessary because sequence
+ numbers are not tied to a global clock in the network, and TCP's may
+ have different mechanisms for picking the ISN's. The receiver of the
+ first SYN has no way of knowing whether the packet was an old delayed
+ one or not, unless it remembers the last sequence number used on the
+ connection which is not always possible, and so it must ask the
+ sender to verify this SYN.
+
+ The "three way handshake" and the advantages of a "clock-driven"
+ scheme are discussed in [TOML74]. More on the subject, and algorithms
+ for implementing the clock-driven scheme can be found in [DALA74].
+
+4.3.2 ESTABLISHING A CONNECTION
+
+ The "three way handshake" is essentially a unidirectional attempt to
+ establish the connection, i.e. there is an initiator and a responder.
+ The TCP's should however be able to establish the connection even if
+ a simultaneous attempt is made by both TCP's to establish the
+ connection. Simultaneous attempts are treated like "collisions" in
+ "Aloha" systems and these conflicts are resolved into unidirectional
+ attempts to establish the connection. This scheme was adopted because
+
+ (i) Connections will normally have a passive and an active end,
+ and so the mechanism should in most cases be as simple as
+ possible.
+
+ (ii) It is easy to implement as special cases do not have to be
+ accounted for.
+
+ The example below indicates what a three way handshake between TCP's
+ A and B looks like
+
+ A B
+
+ --> <SEQ x><SYN> -->
+
+ <-- <SEQ y><SYN, ACK x+l> <--
+
+ --> <SEQ x+1><ACK y+l><DATA BYTES> -->
+
+ The receiver of a "SYN" is able to determine whether the "SYN" was
+ real (and not an old duplicate) when a positive "ACK" is returned for
+ the receiver's "SYN,ACK" in response to the "SYN". The sender of a
+ "SYN" gets verification on receipt of a "SYN,ACK" whose "ACK" part
+ references the sequence number proposed in the original "SYN" [pun
+ intended]. If the TCP is in the state where it is waiting for a
+ response to its SYN, but gets a SYN instead, then it always thinks
+ this is a collision and goes into the state prior to having sent the
+
+
+
+Cerf, Dalal & Sunshine [Page 23]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ SYN, i.e. it forgets that it had sent a SYN. The TCP will try to
+ establish the connection again after some time, unless it has to
+ respond to an arriving SYN. Even if the wait times in the two TCPs
+ are the same, the varying delays in network transmission will usually
+ be adequate to avoid a collision on the next cycle of attempts to
+ send SYN.
+
+ When establishing a connection, the state of the TCP is represented
+ by 3 bits --
+
+ S1 S2 R
+
+ S1 = 1 -- SYN sent
+
+ S2 = 1 -- My SYN verified
+
+ R = 1 -- SYN received
+
+ Some examples of attempts to establish the connection are now shown.
+ The state of the connection is indicated when a change occurs. We
+ specifically do not show the cases in which connection
+ synchronization is carried out with packets containing both SYN and
+ data. We do this to simplify the explanation, but we do not rule out
+ an implementation which is capable of dealing with data arriving in
+ the first packet (it has to be stored temporarily without
+ acknowledgment or delivery to the user until the arriving SYN has
+ been verified).
+
+ The "three way handshake" now looks like --
+
+ A B
+ ------------ ------------
+ S1 S2 R S1 S2 R
+
+ 0 0 0 0 0 0
+
+ --> <SEQ x><SYN> -->
+
+ 1 0 0 0 0 1
+
+ <-- <SEQ y><SYN, ACK x+l> <--
+
+ 1 1 1 1 0 1
+
+ --> <SEQ x+1><ACK y+1>(DATA OCTETS) -->
+
+ 1 1 1 1 1 1
+
+
+
+
+Cerf, Dalal & Sunshine [Page 24]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ The scenario for a simultaneous attempt to establish the connection
+ without the arrival of any delayed duplicates is --
+
+ A B
+ ------------ ------------
+ S1 S2 R S1 S2 R
+
+ 0 0 0 0 0 0
+
+ (M1) 1 0 0 --> <SEQ x><SYN> ...
+
+ (M2) 0 0 0 <-- <SEQ y><SYN) <-- 1 0 0
+
+ (M1) B returns no SYN sent --> 0 0 0
+
+ (M1) 1 0 0 --> <SEQ z><SYN> * --> 0 0 1
+
+ (M3) 1 1 1 <-- <SEQ y+1><SYN,ACK z+1> <-- 1 0 1
+
+ (M4) 1 1 1 --> <SEQ z+1><ACK y+1><DATA> --> 1 1 1
+
+ Note: "..." means that a message does not arrive, but is delayed
+ in the network. State changes are upon arrival or upon departure
+ of a given message, as the case may be. Packets containing the SYN
+ or INT or DSN bits implicitly contain a "dummy" data octet which
+ is never delivered to the user, but which causes the packet
+ sequence numbers to be incremented by 1 even if no real data is
+ sent. This permits the acknowledgment of these controls without
+ acknowledging receipt of any data which might also have been
+ carried in the packet. A packet containing a FIN bit has a dummy
+ octet following the last octet of data (if any) in the packet.
+
+ * Once in state 000 sender selects new ISN z when attempting to
+ establish the connection again.
+
+4.3.3 HALF-OPEN CONNECTIONS
+
+ An established connection is said to be a "half-open" connection if
+ one of the TCP's has closed the connection at its end without the
+ knowledge of the other, or if the two ends of the connection have
+ become desynchronized owing to a crash that resulted in loss of
+ memory. Such connections will automatically become reset if an
+ attempt is made to send data in either direction. However, half-open
+ connections are expected to be unusual, and the recovery procedure is
+ somewhat involved.
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 25]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ If one end of the connection no longer exists, then any attempt by
+ the other user to send any data on it will result in the sender
+ receiving the event code "Connection does not exist at foreign TCP".
+ Such an error message should indicate to the user process that
+ something is wrong and it is expected to CLOSE the connection.
+
+ Assume that two user processes A and B are communicating with one
+ another when a crash occurs causing loss of memory to B's TCP.
+ Depending on the operating system supporting B's TCP, it is likely
+ that some error recovery mechanism exists. When the TCP is up again B
+ is likely to start again from the beginning or from a recovery point.
+ As a result B will probably try to OPEN the connection again or try
+ to SEND on the connection it believes open. In the latter case 1t
+ receives the error message "connection not open" from the local TCP.
+ In an attempt to establish the connection B's TCP will send a packet
+ containing SYN. A's TCP thinks that the connection is already
+ established and so will respond with the error "unacceptable SYN (or
+ SYN/ACK) arrived at foreign TCP". B's TCP knows that this refers to
+ the SYN it just sent out, and so should reset the connection and
+ inform the user process of this fact.
+
+ It may happen that B is passive and only wants to receive data. In
+ this case A's data will not reach B because the TCP at B thinks the
+ connection is not established. As a result A'S TCP will timeout and
+ send a QRY to B's TCP. B's TCP will send STATUS saying the connection
+ is not synched. A's TCP will treat this as if an implicit CLOSE had
+ occurred and tell the user process, A, that the connection is
+ closing. A is expected to respond with a CLOSE command to his TCP.
+ However, A's TCP does not send a FIN to B's TCP, since it would not
+ be accepted anyway on the unsynced connection. Eventually A will try
+ to reopen the connection or B will give up and CLOSE. If B CLOSES,
+ B's TCP will simply delete the connection since it was not
+ established as far as B's TCP is concerned. No message will be sent
+ to A'S TCP as a result.
+
+4.3.4 RESYNCHRONIZING A CONNECTION
+
+ Details of resynchronization have not yet been specified since the
+ need for this should be infrequent in the initial testing stages.
+
+4.3.5 CLOSING A CONNECTION
+
+ There are essentially three cases:
+
+ a) The user initiates by telling the TCP to CLOSE the connection
+
+ b) The remote TCP initiates by sending a FIN control signal
+
+
+
+
+Cerf, Dalal & Sunshine [Page 26]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ c) Both users CLOSE simultaneously
+
+ Two bits are used to maintain control over the closing of a
+ connection: these are called the "FIN sent" bit [F] and the "USER
+ Closed" bit, [C] respectively. The control procedure uses these two
+ bits to assure that the connection is properly closed.
+
+ Case 1: Local user initiates the close
+
+ In this case, both the F and C bits are initially zero, but the C
+ bit is set immediately upon receipt of the user call "CLOSE." When
+ the FIN is sent out by the TCP, the F bit is set. All pending
+ RECEIVES are terminated and the user is told that they have been
+ prematurely terminated ("connection closing"} without data.
+ Similarly, any pending SENDS are terminated with the same
+ response, "connection closing."
+
+ Several responses may arrive as the result of sending a FIN. The
+ one which is generally expected is a matching FIN. When this is
+ received, the TCB CAN BE ELIMINATED. If a "connection does not
+ exist at foreign TCP" message comes in response to the FIN, then
+ the TCB can likewise be eliminated. If no response is forthcoming,
+ or if "Foreign TCP inaccessible" arrives then the resolution is
+ moot. One might simply timeout and discard the TCB. Since the
+ local user wants to CLOSE anyway, this is probably satisfactory,
+ although it will leave a potential "half-open" connection at the
+ other side. We deal with half open connections in section 4.3.3.
+
+ When the acknowledging FIN arrives after the connection state bits
+ are set (F=1, C=1), then the TCB can be deleted.
+
+ Case 2: TCP receives a FIN from the network
+
+ First of all, a FIN must have a sequence number which lies in the
+ valid receive window. If not, it is discarded and the left window
+ edge is sent as acknowledgment. If the FIN can be processed, it is
+ handled (possibly out of order, since it is taken as an imperative
+ to shut down the connection). All pending RECEIVES and SENDS are
+ responded to by showing that they were terminated by the other
+ side's close request (i.e. "connection closing"). The user is also
+ told by an unsolicited event or signal that the connection has
+ been closed (in some systems, the user might have to request
+ STATUS to get this information). Finally, the TCP sends FIN in
+ response.
+
+ Thus, because a FIN arrived, a FIN is sent back, so the F bit is
+ set. However, the TCB stays around until the local user does a
+ CLOSE in acknowledgment of the unsolicited signal that the
+
+
+
+Cerf, Dalal & Sunshine [Page 27]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ connection has been closed by the other side. Thus, the C bit
+ remains unset until this happens. If the C and F bits go from (F=1
+ C=O) to (F=l, C=1), then the connection is closed and the TCB can
+ be removed.
+
+ Case 3: both users close simultaneously
+
+ If this happens, both connections will be in the (F=1, C=1) state.
+ When the FINs arrive, the connections w11i be shut down. If one
+ FIN fails to arrive, we have two choices. One is to insist on
+ acknowledgments for FINs, in which case the missing one will be
+ retransmitted. Another is merely to permit the half-open
+ connection to remain (we prefer this solution}. It can timeout
+ independently and go away after a while. If an attempt is made to
+ reestablish the connection, the initiator will discover the
+ existence of the open connection since an "inappropriate SYN
+ received" message will be sent by the TCP which holds the "half-
+ open" connection. The receiver of this message can tell the other
+ TCP to reset the connection. We cannot permit the holder of the
+ half-open connection to reset automatically on receipt of the SYN
+ since its receipt is not necessarily prima facie evidence of a
+ half open connection. (The SYN could be a delayed duplicate.)
+
+4.3.6. CONNECTION STATE and its relation to USER and INCOMING CONTROL
+ REQUESTS
+
+ In order to formalize the action taken by the TCP when it receives
+ commands from the User, or Control information from the network, we
+ define a connection to be in one of 7 states at any instant. These
+ are known as the TCB Major States. Each Major State is simply a
+ convenient name for a particular setting or group of settings of the
+ state bits, as follows:
+
+ S1 S2 R U F C # name
+
+ - - - - - - 0 no TCB
+
+ 0 0 0 0/1 0 0 1 unsync
+
+ 1 0 0 0 0 0 2 SYN sent
+
+ 1 0 1 0/1 0 0 3 SYN received
+
+ 1 1 1 0 0 0 4 established
+
+ 1 0/1 1 0/1 1 1 5 FIN wait
+
+ 1 1 1 0 1 0 6 FIN received
+
+
+
+Cerf, Dalal & Sunshine [Page 28]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ The connection moves from state to state as shown below. The
+ transition from one state to another will be represented as
+
+ [X, Y]<cause><action>
+
+ which means that there is a transition from state X to state Y owing
+ to <cause>. The action taken by the TCP is specified as <action>. We
+ use this notation to give the important state transitions, often
+ simplifying the cause and action fields to take into account a number
+ of situations. Figure 1 illustrates these transitions in traditional
+ state diagram form. Section 4.4.6 and section 4.4.7 fully specify the
+ effect of all User commands and Control information arriving from the
+ network.
+
+ [0,l] <OPEN> <create TCB>
+
+ [1,2] <SEND,INTERRUPT, or collision timeout> <send SYN>
+
+ [1,3] <SYN arrives> <send SYN,ACK>
+
+ [1,0] <CLOSE> <remove TCB>
+
+ [2,1] <SYN arrives (collision)> <set timeout, forget SYNs>
+
+ [2,0] <CLOSE> <remove TCB>
+
+ [2,4] <appropriate SYN,ACK arrives> <send ACK>
+
+ [3,4] <appropriate ACK arrives> <none>
+
+ [3,1] <error arrives or timeout> <(forget SYN)>
+
+ [3,5] <CLOSE> <send FIN>
+
+ [4,5] <CLOSE> <send FIN>
+
+ [4,6] <appropriate FIN arrives> <send FIN, inform user>
+
+ [5,0] <FIN or error arrives, or timeout> <remove TCB>
+
+ [6,0] <CLOSE> <remove TCB>
+
+4.4 STRUCTURE 0F THE TCP
+
+4.4.l INTRODUCTION [See figure 2.1]
+
+ There are many possible implementations of the TCP. We offer one
+ conceptual framework in which to view the various algorithms that
+
+
+
+Cerf, Dalal & Sunshine [Page 29]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ make up the TCP design. In our concept, the TCP is written in two
+ parts, an interrupt or signal driven part (consisting of four
+ processes), and a reentrant library of subroutines or system calls
+ which interface the user process to the TCP. The subroutines
+ communicate with the interrupt part through shared data structures
+ (TCB's, shared buffer queues etc.). The four processes are the Output
+ Packet Handler which sends packets to the packet switch; the
+ Packetizer which formats letters into internet packets; the Input
+ Packet Handler which processes incoming packets; and the Reassembler
+ which builds letters for users.
+
+ The ultimate bottleneck is the pipe through which arriving and
+ departing packets must travel. This is the Host/Packet Switch
+ interface. The interrupt driven TCP shares among all TCB's its
+ limited packet buffer resources for sending and receiving packets.
+ From the standpoint of controlling buffer congestion, it appears
+ better to TREAT INCOMING PACKETS WITH HIGHER PRIORITY THAN OUTGOING
+ PACKETS. That is, packet buffers which can be released by copying
+ their contents into user buffers clearly help to reduce congestion.
+ Neither the packetizer nor the input packet handler should be allowed
+ to take up all available packet buffer space; an analogous problem
+ arises in the IMP in the allocation of store and forward, and
+ reassembly buffer space. One policy is to permit neither contender
+ more than, say, two-thirds of the space. The buffer allocation
+ routines can enforce these limits and reject buffer requests as
+ needed. Conceptually, the scheduler can monitor the amounts of
+ storage dedicated to the input and output routines, and can force
+ either to sleep if its buffer allocation exceeds the limit.
+
+ As an example, we can consider what happens when a user executes a
+ SEND call to the TCP service routines. The buffer containing the
+ letter is placed on a SEND buffer queue associated with the user's
+ TCB. A 'packetizer' process is awakened to look through all the TCB's
+ for 'packetizing' work. The packetizer will keep a roving pointer
+ through the TCB list which enables it to pick up new buffers from the
+ TCB queue and packetize them into output buffers. The packetizer
+ takes no more than one letter at a time from any single TCB. The
+ packetizer attempts to maintain a non-empty queue of output packets
+ so that the output handler will not fall idle waiting for the
+ packetizing operation. However, since arriving packets compete with
+ departing packets, care must be taken to prevent either class from
+ occupying all of the shared packet buffer space. Similarly since the
+ TCB's all compete for space in service to their connections, neither
+ input nor output packet space should be dominated by any one TCB.
+
+ When a packet is created, it is placed on a FIFO SEND packet queue
+ associated with its origin TCB. The packetizer wakes the output
+ handler and then continues to packetize a few more buffers, perhaps,
+
+
+
+Cerf, Dalal & Sunshine [Page 30]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ before going to sleep. The output handler is awakened either by a
+ 'hungry' packet switch or by the packetizer; in either case, it uses
+ a roving TCB pointer to select the next TCB for service. The send
+ packet queue can be used as a 'work queue' for the output handler.
+ After a packet has been sent, but usually before an ACK is returned,
+ the output handler moves the packet to a retransmission queue
+ associated with each TCB.
+
+ Retransmission timeouts can refer to specific packets and the
+ retransmission list can be searched for the specific packet. If an
+ ACK is received, the retransmission entry can be removed from the
+ retransmit queue. The send packet queue contains only packets waiting
+ to be sent for the first time. INTERRUPT requests can remove entries
+ in both the send packet queue and the retransmit packet queue.
+
+ Since packets are never in more than one queue at a time, it appears
+ possible for INT, FIN or RESET commands to remove packets from the
+ receive, send, or retransmit packet queues with the assurance that an
+ already issued signal to enter the reassembler, the packetizer or the
+ output handler will not be confusing.
+
+ Handling the INTERRUPT and CLOSE functions can however require some
+ care to avoid confusing the scheduler, and the various processes. The
+ scheduler must maintain status information for the processes. This
+ information includes the current TCB being serviced. When an
+ INTERRUPT is issued by a local process, the output queue of letters
+ associated with the local port reference is to be deleted. The
+ packetizer, for example, may however be working at that time on the
+ same queue. As usual, simultaneous reading and writing of the TCB
+ queue pointers must be inhibited through some sort of semaphore or
+ lockout mechanism. When the packetizer wants to serve the next send
+ buffer queue, it must lock out all other access to the queue, remove
+ the head of the queue (assuming of course that there are enough
+ buffers for packetization), advance the head of the queue, and then
+ unlock access to the queue.
+
+ If the packetizer keeps only a TCB pointer in a global place called
+ CPTCB (current packetizer TCB address), and always uses the address
+ in CPTCB to find the TCB in which to examine the send buffer queue,
+ then removal of the output buffer queue does not require changes to
+ any working storage belonging to the packetizer. Even more important,
+ the arrival and processing of a RESET or CLOSE, which clears the
+ system of a given TCB, can update the CPTCB pointer, as long as the
+ removal does not occur while the packetizer is still working on the
+ TCB.
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 31]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ Incoming packets are examined by the input packet handler. Here they
+ are checked for valid connection sockets, and acknowledgments are
+ processed, causing packets to be removed, possibly, from the SEND or
+ RETRANSMIT packet queues as needed. As an example, consider the
+ receipt of a valid FIN request on a particular TCB. If a FIN had not
+ been sent before (i.e. F bit not set), then a FIN packet is
+ constructed and sent after having cleared out the SEND buffer and
+ SEND packet queues as well as the RETRANSMIT queue. Otherwise, if the
+ F and C bits are both set, all queues are emptied and the TCB is
+ returned to free storage.
+
+ Packets which should be reassembled into letters and sent to users
+ are queued by the input packet handler, on the receive packet queue,
+ for processing by the reassembly process. The reassembler looks at
+ its FIFO work queue and tries to move packets into user buffers which
+ are queued up in an input buffer queue on each TCB. If a packet has
+ arrived out of order, it can be queued for processing in the correct
+ sequence. Each time a packet is moved into a user buffer, the left
+ window edge of the receiving TCB is moved to the right so that
+ outgoing packets can carry the correct ACK information. If the SEND
+ buffer queue is empty, then the reassembler creates a packet to carry
+ the ACK.
+
+ As packets are moved 1nto buffers and they are filled, the buffers
+ are dequeued from the RECEIVE buffer queue and passed to the user.
+ The reassembler can also be awakened by the RECEIVE user call should
+ it have a non-empty receive packet queue with an empty RECEIVE buffer
+ queue. The awakened reassembler goes to work on each TCB, keeping a
+ roving pointer, and sleeping if a cycle is made of all TCB's without
+ finding any work.
+
+4.4.2 INPUT PACKET HANDLER [See figure 2.2]
+
+ The Input Packet Handler is awakened when a packet arrives from the
+ network. It first verifies that the packet is for an existing TCB
+ (i.e. the local and foreign socket numbers are matched with those of
+ existing TCB's). If this fails, an error message is constructed and
+ queued on the send packet queue of a dummy TCB. A signal is also sent
+ to the output packet handler. Generally, things to be transmitted
+ from the dummy TCB have a default retransmission timeout of zero, and
+ will not be retransmitted. (We use the idea of a dummy TCB so that
+ all packets containing errors, or RESET can be sent by the output
+ packet handler, instead of having the originator of them interface to
+ the net. These packets, it will be noticed, do not belong to any
+ TCB).
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 32]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ The input packet handler looks out for control or error information
+ and acts appropriately. Section 4.4.7 discusses this in greater
+ detail, but as an example, if the incoming packet is a RESET request
+ of any kind (i.e. all connections from designated TCP or given
+ connection), and is believable, then the input packet handler clears
+ out the related TCB(s), empties the send and receive packet queues,
+ and prepares error returns for outstanding user SEND(s) and
+ RECEIVE(s) on each reset TCB. The TCB's are marked unused and
+ returned to storage. If the RESET refers to an unknown connection, it
+ is ignored.
+
+ Any ACK's contained in incoming packets are used to update the send
+ left window edge, and to remove the ACK'ed packets from the TCB
+ retransmit packet queue. If the packet being removed was the end of a
+ user buffer, then the buffer must be dequeued from the packetized
+ buffer queue, and the User informed. The packetizer is also signaled.
+ Only one signal, or one for each packet, will have to be sent,
+ depending on the scheduling scheme for the processes. See section
+ 4.4.7 for a detailed discussion.
+
+ The packet sequence number, the current receive window size, and the
+ receive left window edge determine whether the packet lies within the
+ window or outside of it.
+
+ Let W = window size
+
+ S = size of sequence number space
+
+ L = left window edge
+
+ R = L+W-1 = right window edge
+
+ x = sequence number to be tested
+
+ For any sequence number, x, if
+
+ (R-x) mod S <= W
+
+ then x is within the window.
+
+ A packet should be rejected only if all of it lies outside the
+ window. This is easily tested by letting x be, first the packet
+ sequence number, and then the sum of packet sequence number and
+ packet text length, less one. If the packet lies outside the window,
+ and there are no packets waiting to be sent, then the input packet
+ handler should construct a dummy ACK and queue it for output on the
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 33]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ send packet queue, and signal the output packet handler. Successfully
+ received packets are placed on the receive packet queue in the
+ appropriate sequence order, and the reassembler signaled.
+
+ The packet window check can not be made if the associated TCB is not
+ in the 'established' state, so care must be taken to check for
+ control and TCB state before doing the window check.
+
+4.4.3 REASSEMBLER [See figure 2.3]
+
+ The Reassembler process is activated by both the Input Packet Handler
+ and the RECEIVE user call. While the reassembler is asleep, if
+ multiple signals arrive, all but one can be discarded. This is
+ important as the reassembler does not know the source of the signal.
+ This is so in order that "dangling" signals from work in TCB's that
+ have subsequently been removed don't confuse it. Each signal simply
+ means that there may be work to be done. If the reassembler is awake
+ when a signal arrives, it may be necessary to put 1t in a
+ "hyperawake" state so that even if the reassembler tries to quit, the
+ scheduler will run it one more time.
+
+ When the reassembler is awakened it looks at the receive packet queue
+ for each TCB. If there are some packets there then it sees whether
+ the RECEIVE buffer queue is empty. If it is then the reassembler
+ gives up on this TCB and goes on to the next one, otherwise if the
+ first packet matches the left window edge, then the packet can be
+ moved into the User's buffer. The reassembler keeps transferring
+ packets into the User's buffer until the letter is completely
+ transferred, or something causes it to stop. Note that a buffer may
+ be partly filled and then a sequence 'hole' is encountered in the
+ receive packet queue. The reassembler must mark progress so that the
+ buffer can be filled up starting at the right place when the 'hole'
+ is filled. Similarly a packet might be only partially emptied when a
+ buffer is filled, so progress in the packet must be marked.
+
+ If a letter was successfully transferred to a User buffer then the
+ reassembler signals the User that a letter has arrived and dequeues
+ the buffer associated with it from the TCB RECEIVE buffer queue. If
+ the buffer is filled then the User is signaled and the buffer
+ dequeued as before. The event code indicates whether the buffer
+ contains all or part of a letter, as described in section 2.4.
+
+ In every case when a packet is delivered to a buffer, the receive
+ left window edge is updated, and the packetizer is signaled. This
+ updating must take account of the extra octet included in the
+ sequencing for certain control functions [SYN, INT, FIN, DSN]. If the
+ send packet queue is empty then the reassembler must create a packet
+ to carry the ACK, and place it on the send packet queue.
+
+
+
+Cerf, Dalal & Sunshine [Page 34]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ Note that the reassembler never works on a TCB for more than one User
+ buffer's worth of time, in order to give all TCB's equal service.
+
+ Scheduling of the reassembler is a big issue, but perhaps running to
+ completion will be satisfactory, or else it can be time sliced. In
+ the latter case it will continue from where it left off, but a new
+ signal may have arrived producing some possible work. This work will
+ be processed as part of the old incomplete signal, and so some
+ wasteful processing may occur when the reassembler wakes up again.
+ This is the general problem of trying to implement a protocol that is
+ fundamentally asynchronous, but at least it is immune to harmful
+ race-conditions. E.g. if we were to have the reassembler 'remove' the
+ signal that caused it to wake up, just before it went to sleep (in
+ order that new arriving ones were discarded) then a new signal may
+ arrive at a critical time causing 1t not to be recognized; thus
+ leaving some work pending, and this may result in a deadlock [see
+ previous comments on "hyperawake" state].
+
+4.4.4 PACKETIZER [See figure 2.4]
+
+ The Packetizer process gets work from both the Input Packet Handler
+ and the SEND user call. The signal from the SEND user call indicates
+ that there is something new to send, while the one from the input
+ packet handler indicates that more TCP buffers may be available from
+ delivered packets. This latter signal is to prevent deadlocks in
+ certain kind of scheduling schemes. We assume the same treatment of
+ signals as discussed in section 4.4.3.
+
+ When the packetizer is awakened it looks at the SEND buffer queue for
+ each TCB. If there is a new or partial letter awaiting packetization,
+ it tries to packetize the letter, TCB buffer and window permitting.
+ It packetizes no more than one letter for a TCB before servicing
+ another TCB. For every packet produced it signals the output packet
+ handler (to prevent deadlock in a time sliced scheduling scheme). If
+ a 'run till completion' scheme is used then one signal only need be
+ produced, the first time a packet is produced since awakening. If
+ packetization is not possible the packetizer goes on to the next TCB.
+
+ If a partial buffer was transferred then the packetizer must mark
+ progress in the SEND buffer queue. Completely packetized buffers are
+ dequeued from the SEND buffer queue, and placed on a Packetized
+ buffer queue, so that the buffer can be returned to the user when an
+ ACK for the last bit is received.
+
+ When the packetizer packetizes a letter it must see whether it is the
+ first piece of data being sent on the connection, in which case it
+ must include the SYN bit. Some implementations may not permit data to
+ be sent with SYN and others may discard any data received with SYN.
+
+
+
+Cerf, Dalal & Sunshine [Page 35]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ The Packetizer goes to sleep if it finds no more work at any TCB.
+
+4.4.5 OUTPUT PACKET HANDLER [see figure 2.5]
+
+ When activated by the packetizer, or the input packet handler, or
+ some of the user call routines, the Output Packet Handler attempts to
+ transmit packets on the net (may involve going through some other
+ network interface program). It looks at the TCB's in turn,
+ transmitting some packets from the send packet queue. These are
+ dequeued and put on the retransmit queue along with the time when
+ they should be retransmitted.
+
+ All data packets that are transmitted have the latest receive left
+ window edge in the ACK field. Error and control messages may have no
+ ACK [ACK bit off], or set the ACK field to refer to a received
+ packet's sequence number.
+
+ The RETRANSMIT PROCESS:
+
+ This process can either be viewed as a separate process, or as part
+ of the output packet handler. Its implementation can vary; it could
+ either perform its function, by being woken up at regular intervals,
+ or when the retransmission time occurs for every packet put on the
+ retransmit queue. In the first case the retransmit queue for each TCB
+ is examined to see if there is anything to retransmit. If there is, a
+ packet is placed on the send packet queue of the corresponding TCB.
+ The output packet handler is also signaled.
+
+ Another "demon" process monitors all user Send buffers and
+ retransmittable control messages sent on each connection, but not yet
+ acknowledged. If the global retransmission timeout is exceeded for
+ any of these, the User is notified and he may choose to continue or
+ close the connection. A QUERY packet may also be sent to ascertain
+ the state of the connection [this facilitates recovery from half open
+ connections as described in section 4.3.3].
+
+4.4.6 USER CALL PROCESSING
+
+ OPEN [See figure 3.1]
+
+ 1. If the process calling does not own the specified local socket,
+ return with <type 1><ELP 1 "connection illegal for this process">.
+
+ 2. If no foreign socket is specified, construct a new TCB and add
+ it to the list of existing TCB's. Select a new local connection
+ name and return it along with <type 1><OLP 0 "success">. If there
+ is no room for the TCB, respond with <type 1><ELT 4 "No room for
+ TCB">.
+
+
+
+Cerf, Dalal & Sunshine [Page 36]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ 3. If a foreign socket is specified, verify that there is no
+ existing TCB with the same <local socket, foreign socket> pair
+ (i.e. same connection), otherwise return <type l><ELP 6
+ "connection already open">. If there is no TCB space, return as in
+ (2), otherwise, create the TCB and link it with the others,
+ returning a local connection name with the success event code.
+
+ Note: if a TCB is created, be sure to copy the timeout parameter
+ into it, and set the "U" bit to 0 if a foreign socket is
+ specified, else set U to 1 (to show unspecified foreign socket).
+
+ SEND [see figure 3.2]
+
+ 1. Search for TCB with local connection name specified. If none
+ found, return <type 10><ELP 3 "connection not open">
+
+ 2. If TCB is found, check foreign socket specification. If not set
+ (i.e. U = 1 in TCB), return <type 10><ELT 5 "foreign socket
+ unspecified">. If the connection is in the "closing" state (i.e.
+ state 5 or 6), return <type 3><ELP 12 "connection closing"> and do
+ not process the buffer.
+
+ 3. Put the buffer on the Send buffer queue and signal the
+ packetizer that there is work to do.
+
+ INTERRUPT [see figure 3.3]
+
+ 1. Validate existence of the referenced connection, sending out
+ error messages of the form <type 3><ELP 3 "connection not open">
+ or <type 3><ELT 5 "foreign socket unspecified"> as appropriate. If
+ the local connection refers to a connection not accessible to the
+ process interrupting, send <type 3><ELP 1 "connection illegal for
+ this process">.
+
+ 2. If the connection is in the "closing" state (i.e. states 5 or
+ 6), return <type 3><ELT 12 "connection closing"> and do not send
+ an INT packet to the destination.
+
+ 3. Any pending SEND buffers should be returned with <type 10><ELP
+ 10 "buffer flushed due to interrupt">. An INT packet should be
+ created and placed on the output packet queue, and the output
+ packet handler should be signaled.
+
+ RECEIVE [See figure 3.4]
+
+ 1. If the caller does not have access to the referenced local
+ connection name, return <type 20><ELP 1 "connection illegal for
+ this process">. And if the connection is not open, return <type
+
+
+
+Cerf, Dalal & Sunshine [Page 37]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ 20><ELP 3 "connection not open"). If the connection is in the
+ closing state (e.g. a FIN has been received or a user CLOSE is
+ being processed), return <type 20><ELP 12 "connection closing">.
+
+ 2. Otherwise, put the buffer on the receive buffer queue and
+ signal the reassembler that buffer space is available.
+
+ CLOSE [See figure 3.5]
+
+ 1. If the connection is not accessible to the caller, return <type
+ 2><ELP 1 "connection illegal for this process">. If there is no
+ such connection respond with <type 2><ELP 3 "connection not
+ open">.
+
+ 2. If the R bit is 0 (i.e. connection is in state 1 or 2), simply
+ remove the TCB.
+
+ 3. If the R bit is set and the F bit is set, then remove the TCB.
+
+ 4. Otherwise, if the R bit is set, but F is 0 (i.e. states 3 or
+ 4), return all buffers to the User with <type x><ELP 12
+ "connection closing">, clear all output and input packet queues
+ for this connection, create a FIN packet, and signal the output
+ packet handler. Set the C and F bits to show this action.
+
+ STATUS [See figure 3.6]
+
+ 1. If the connection is illegal for the caller to access, send
+ <type 30><ELP 1 "connection illegal for this process">.
+
+ 2. If the connection does not exist, return <type 30><ELP 3
+ "connection not open">.
+
+ 3. Otherwise set status information from the TCB and return it via
+ <type 30><O-T 0 "status data...">.
+
+4.4.7 NETWORK CONTROL PROCESSING
+
+ The Input Packet Handler examines the header to see if there is any
+ control information or error codes present. We do not discuss the
+ action taken for various special function codes, as it is often
+ implementation dependent, but we describe those that affect the state
+ of the connection. After initial screening by the IPC [see section
+ 4.4.2 and figure 2.2], control and error packets are processed as
+ shown in figures 4.l-4.7. [ACK and data processing is done within the
+ IPC.]
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 38]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+4.4.8 TCP ERROR HANDLING
+
+ Error messages have CD=001 and do not carry user data. Depending on
+ the error, zero or more octets of error information will be carried
+ in the packet text field. We explicitly assume that this data is
+ restricted in length so as to fall below the GATEWAY fragmentation
+ threshold (probably 512 bits of data and header). Errors generally
+ refer to specific connections, so the source and destination socket
+ identifiers are relevant here. The ACK field of an error packet
+ contains the sequence number of the packet that caused the error, and
+ the ACK bit is off. [RESET and STATUS special functions may use the
+ ACK field in the same way.] This allows the receiver of an error
+ message to determine which packet caused the error. Error packets are
+ not ACK'ed or retransmitted.
+
+
+4.5. BUFFER AND WINDOW ALLOCATION
+
+4.5.1 INTRODUCTION
+
+ The TCP manages buffer and window allocation on connections for two
+ main purposes: equitably sharing limited TCP buffer space among all
+ connections (multiplexing function), and limiting attempts to send
+ packets, so that the receiver is not swamped (flow control function).
+ For further details on the operation and advantages of the window
+ mechanism see CEKA74.
+
+ Good allocation schemes are one of the hardest problems of TCP
+ design, and much experimentation must be done to develop efficient
+ and effective algorithms. Hence the following suggestions are merely
+ initial thoughts. Different implementations are encouraged with the
+ hope that results can be compared and better schemes developed.
+
+ Several of the measurements discussed in a later section are aimed at
+ providing information on the performance of allocation mechanisms.
+ This should aid in determining significant parameters and evaluating
+ alternate schemes.
+
+4.5.2 The SEND Side
+
+ The window is determined by the receiver. Currently the sender has no
+ control over the SEND window size, and never transmits beyond the
+ right window edge. There exists the possibility of specifying two
+ more special function codes so that the sender can request the
+ receiver to INCREASE or DECREASE the window size, without specifying
+ by how much. The receiver, of course, needn't satisfy this request.
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 39]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ Buffers must be allocated for outgoing packets from a TCP buffer
+ pool. The TCP may not be willing to allocate a full window's worth of
+ buffers, so buffer space for a connection may be less than what the
+ window would permit. No deadlocks are possible even if there is
+ insufficient buffer or window space for one letter, since the
+ receiver will ACK parts of letters as they are put into the user's
+ buffer, thus advancing the window and freeing buffers for the
+ remainder of the letter.
+
+ It is not mandatory that the TCP buffer outgoing packets until
+ acknowledgments for them are received, since it is possible to
+ reconstruct them from the actual letters sent by the user.
+
+ However, for purposes of retransmission and processing efficiency it
+ is very convenient to do.
+
+4.5.3 The RECEIVE Side
+
+ At the receiving side there are two requirements for buffering:
+
+ (l) Rate Discrepancy:
+
+ If the sender produces data much faster or much slower than the
+ receiver consumes it, little buffering is needed to maintain the
+ receiver at near maximum rate of operation. Simple queuing
+ analysis indicates that when the production and consumption
+ (arrival and service) rates are similar in magnitude, more
+ buffering is needed to reduce the effect of stochastic or bursty
+ arrivals and to keep the receiver busy.
+
+ (2) Disorderly Arrivals:
+
+ When packets arrive out of order, they must be buffered until the
+ missing packets arrive so that packets (or letters) are delivered
+ in sequence. We do not advocate the philosophy that they be
+ discarded, unless they have to be, otherwise a poor effective
+ bandwidth may be observed. Path length, packet size, traffic
+ level, routing, timeouts, window size, and other factors affect
+ the amount by which packets come out of order. This is expected to
+ be a major area of investigation.
+
+ The considerations for choosing an appropriate window are as follows:
+
+ Suppose that the receiver knows the sender's retransmission timeout,
+ also, that the receiver's acceptance rate is 'U' bits/sec, and the
+ window size is 'W' bits. Ignoring line errors and other traffic, the
+ sender transmits at a rate between W/K and the maximum line rate (the
+ sender can send a window's worth of data each timeout period).
+
+
+
+Cerf, Dalal & Sunshine [Page 40]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ If W/K is greater than U, the difference must be retransmissions
+ which is undesirable, so the window should be reduced to W', such
+ that W'/K is approximately equal to U. This may mean that the entire
+ bandwidth of the transmission channel is not being used, but it is
+ the fastest rate at which the receiver is accepting data, and the
+ line capacity is free for other users. This is exactly the same case
+ where the rates of the sender and receiver were almost equal, and so
+ more buffering is needed. Thus we see that line utilization and
+ retransmissions can be traded off against buffering.
+
+ If the receiver does not accept data fast enough (by not performing
+ sufficient RECEIVES) the sender may continue retransmitting since
+ unaccepted data will not be ACK'ed. In this case the receiver should
+ reduce the window size to "throttle" the sender and inhibit useless
+ retransmissions.
+
+ Receiver window control:
+
+ If the user at the receiving side is not accepting data, the
+ window should be reduced to zero. In particular, if all TCP
+ incoming packet buffers for a connection are filled with received
+ packets, the window must go to zero to prevent retransmissions
+ until the user accepts some packets.
+
+ Short term flow control:
+
+ Let F = the number of user receive buffers filled
+
+ B = the total user receive buffers
+
+ W = the long-term or nominal window size
+
+ W' = the window size returned to the sender
+
+ then a possible value for W' is
+
+ W' = W*[1-F/B]**a
+
+ The value of 'a' should be greater than one, in order to shut the
+ window faster as buffers run out. The values of W' and F actually
+ used could be averages of recent values, in order to get smooth
+ control. Note that W' is constantly being recomputed, while the
+ value of W, which sets the upper limit of W', only changes slowly
+ in response to other factors.
+
+ The value of W can be large (up to half the sequence number space)
+ to allow for good throughput on high delay channels. The sender
+ needn't allocate W worth of buffer space anyway. The long-term
+
+
+
+Cerf, Dalal & Sunshine [Page 41]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ variation of W to match flow requirements may be a separate
+ question
+
+ This short-term mechanism for flow control allows some buffering in
+ the two TCP's at either end, (as much as they are willing), and the
+ rest in the user process at the send side where the data is being
+ created. Hence the cost of buffering to smooth out bursty traffic is
+ borne partly by the TCP's, and partly by the user at the send side.
+ None of it is borne by the communication subnet.
+
+5. NETWORK MEASUREMENT PLANS FOR TCP
+
+5.1 USERLEVEL DIAGNOSTICS
+
+ We have in mind a program which will exercise a given TCP, causing it
+ to cycle through a number of states; opening, closing, and
+ transmitting on a variety of connections. This program will collect
+ statistics and will generally try to detect deviation from TCP
+ functional specifications. Clearly there will have to be a copy of
+ this program both at the local site being tested and some site which
+ has a certified TCP. So we will have to produce a specification for
+ this user level diagnostic program also.
+
+ There needs to be a master and a slave side to all this so the master
+ can tell the slave what's going wrong with the test.
+
+5.2 SINGLE CONNECTION MEASUREMENTS
+
+ Round trip delay times
+
+ Time from moment the packet is sent by the TCP to the time that
+ the ACK is received by the TCP.
+
+ Time from the moment the USER issues the SEND to the time that the
+ USER gets the successful return code.
+
+ Note: packet size should be used to distinguish from one set of
+ round trip times and another.
+
+ Network destination, and current configuration and traffic load
+ may also be issues of importance that must be taken into
+ account.
+
+ What if the destination TCP decides to queue up ACKs and send a
+ single ACK after a while? How does this affect round trip
+ statistics?
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 42]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ What about out of order arrivals and the bunched ACK for all of
+ them?
+
+ The histogram of round trip times include retransmission times
+ and these must be taken into account in the analysis and
+ evaluation of the collected data.
+
+ Packet size statistics
+
+ Histogram of packet length in both directions on the full duplex
+ connection.
+
+ Histogram of letter size in both directions.
+
+ Measure of disorderly arrival
+
+ Distance from the first octet of arriving packet to the left
+ window edge. A histogram of this measure gives an idea of the out
+ of order nature of packet arrivals. It will be 0 for packets
+ arriving in order.
+
+ Retransmission Histogram
+
+ Effective throughput
+
+ This is the effective rate at which the left edge of the window
+ advances. The time interval over which the measure is made is a
+ parameter of the measurement experiment. The shorter the interval,
+ the more bursty we would expect the measure to be.
+
+ It is possible to measure effective data throughput in both
+ directions from one TCP by observing the rate at which the left
+ window edge is moving on ACK sent and received for the two
+ windows.
+
+ Since throughput is largely dependent upon buffer allocation and
+ window size, we must record these values also. Varying window for
+ a fixed file transmission might be a good way to discover the
+ sensitivity of throughput to window size.
+
+ Output measurement
+
+ The throughput measurement is for data only, but includes
+ retransmission. The output rate should include all octets
+ transmitted and will give a measure of retransmission overhead.
+ Output rate also includes packet format overhead octets as well as
+ data.
+
+
+
+
+Cerf, Dalal & Sunshine [Page 43]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ Utilization
+
+ The effective throughput divided by the output rate gives a
+ measure of utilization of the communication connection.
+
+ Window and buffer allocation measurements
+
+ Histogram of letters outstanding, measured at the instant of SEND
+ receipt by TCP from user or at instant of arrival of a letter for
+ a receiving user.
+
+ Buffers in use on the SEND side upon packet departure into the
+ net; buffers in use on the RECEIVE side upon delivery of packet
+ into a USER Buffer.
+
+5.3 MULTICONNECTION MEASUREMENTS
+
+ Statistics on User Commands sent to the local TCP
+
+ Statistics of error or success codes returned [histogram of each type
+ of error or return response]
+
+ Statistics of control bit use
+
+ Counter for each control bit over all packets emitted by the TCP
+ and another for packets accepted
+
+ Count data carrying packets
+
+ Count ACK packets with no data
+
+ Error packets distribution by error type code received from the net
+ and sent out into the net
+
+5.4 MEASUREMENT IMPLEMENTATION PHILOSOPHY
+
+ We view the measurement process as something which occurs internal to
+ the TCP but which is controllable from outside. A well known socket
+ owned by the TCP can be used to accept control which will select one
+ or more measurement classes to be collected. The data would be
+ periodically sent to a designated foreign socket which would absorb
+ the data for later processing, in the manner currently used in the
+ ARPANET IMPs. Each measurement class has its own data packet format
+ to make the job of parsing and analyzing the data easier.
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 44]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ We would restrict access to TCP measurement control to a few
+ designated sites [e.g. NMC, SU-DSL, BBN]. This is easily done by
+ setting up listening control connections on partially specified
+ foreign sockets.
+
+6. SCHEDULE OF IMPLEMENTATION
+
+7. REFERENCES
+
+ 1. CEKA74
+
+ V. Cerf and R. Kahn, "A Protocol For Packet Network
+ Intercommunication," IEEE Transactions on Communication, vol. C-
+ 2O, No. 5. May 1974, pp. 637-648.
+
+ 2. CERF74
+
+ V. Cerf, "An Assessment of ARPANET Protocols," in Proceedings of
+ the Jerusalem Conference on Information Technology, July l974
+ [RFC#635, INWG Note # ***].
+
+ 3.CESU74
+
+ V. Cerf and C. Sunshine, "Protocols and Gateways for the
+ Interconnection of Packet Switching Networks," Proc. of the
+ Subconference on Computer Nets, Seventh Hawaii International
+ Conference on Systems Science, January 1974.
+
+ 4. HEKA70
+
+ F. Heart, R.E. Kahn, et al, "The Interface Message Processor for
+ the ARPA Computer Network," AFIPS 1970 SJCC Proceedings, vol. 36,
+ Atlantic City, AFIPS Press, New Jersey, pp. 551-567.
+
+ 5. POUZ74
+
+ L. Pouzin, "CIGALE, the packet switching machine of the CYCLADES
+ computer network," Proceedings of the IFIP74 Congress, Stockholm,
+ Sweden.
+
+ 6. ROWE74
+
+ L. Roberts and B. Wessler, "Computer Network Development to
+ achieve resource sharing," AFIPS 1970, SJCC Proceedings, vol. 36,
+ Atlantic City, AFIPS Press, New Jersey, pp. 543-549.
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 45]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ 7. POUZ73
+
+ L. Pouzin, "Presentation and major design aspects of the CYCLADES
+ Computer Network," Data Networks: Analysis and Design, Third Data
+ Communications Symposium, St. Petersburg, Florida, November 1973,
+ pp. 80-87.
+
+ 8. SCWI71
+
+ R. Scantlebury and P.T. Wilkinson, "The Design of a Switching
+ System to allow remote Access to Computer Services by other
+ computers and Terminal Devices," Second Symposium on Problems in
+ the Optimization of Data Communication Systems Proceedings, Palo
+ Alto, California, 0ctober 1971, pp. 160-167.
+
+ 9. POST72
+
+ J. Postel, "Official Initial Connection Protocol," Current Network
+ Protocols, Network Information Center, Stanford Research
+ Institute, Menlo Park, California. January 1972 (NIC 7101).
+
+ 10. CACR70
+
+ C.S. Carr, S.D. Crocker, and V.G. Cerf, "Host-Host Communication
+ Protocol in the ARPA Network," AFIPS Conference Proceedings, vol.
+ 36, 1970 SJCC, AFIPS Press, Montvale, N.J.
+
+ 11. ZIEL74
+
+ H. Zimmerman and M. Elie, "Transport Protocol. Standard Host-Host
+ Protocol for heterogeneous computer networks," INWG#61, April
+ 1974.
+
+ 12. CRHE72
+
+ S. D. Crocker, J. F. Heafner, R. M. Metcalfe and J. B. Postel,
+ "Function-oriented protocols for the ARPA Computer Network," AFIPS
+ Conference Proceedings, vol. 41, 1972 FJCC, AFIPS Press, Montvale,
+ N.J.
+
+ 13. DALA74
+
+ Y. Dalal, "More on selecting sequence numbers," INWG Protocol Note
+ #4, October 1974.
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 46]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+ 14. SUNS74
+
+ C. Sunshine, "Issues in communication protocol design -- formal
+ correctness." INWG Protocol Note #5, October 1974
+
+ BELS74
+
+ D. Belsnes, "Note on single message communication," INWG Protocol
+ Note #3. September 1974.
+
+ 16. TOML74
+
+ R. Tomlinson, "Selecting sequence numbers," INWG Protocol Note #2,
+ September 1974.
+
+ 17. SCHA74
+
+ R. Schantz, "Reconnection Protocol", private communication;
+ available from Schantz at BBN.
+
+ 18. POUZ74A
+
+ L. Pouzin, "A proposal for interconnecting packet switching
+ networks, INWG Note #60, March 1974 [also submitted to EUROCOMP
+ 74].
+
+ 19. DLMG74
+
+ D. Lloyd, M. Galland, and P. T. Kirstein, "Aims and objectives of
+ internetwork experiments," to be published as an INWG Experiments
+ Note.
+
+ 20. MCKE73
+
+ A. McKenzie, "Host-Host Protocol for the ARPANET," NIC # 8246,
+ Stanford Research Institute [also in ARPANET Protocols Notebook
+ NIC 7104].
+
+ 21. BELS74A
+
+ D. Belsnes, "Flow control in packet switching networks," INWG Note
+ #63, October 1974.
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 47]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 1: TCB Major States
+
+ 0-no TCB
+ \____________________________________________________________/
+ OPEN | A CLOSE CLOSE A
+ ---------- | | ---------- ---------- |
+ set up TCB | | remove TCB remove TCB |
+ | | |
+ | | collision retry, |
+ SYN arrives __V____|__ SEND, INTER |
+ ------------- / S1=0 \ ---------------- |
+ send SYN, ACK | S2=0 F=0 | send SYN |
+ ______________________| R=0 C=0 |_____________________ |
+ | | U=0/1 | | |
+ | | | SYN arrives | |
+ | error,timeout | 1-OPEN | ----------- | |
+ | ------------- \__________/ collision; | |
+ | clear TCB A A set timeout | |
+ | _____________________| |_____________________ | |
+ __V____|__ _|___V__|_
+ / S1=1 \ / S1=1 \
+| S2=0 F=0 | | S2=0 F=0 |
+| R=1 C=0 | SYN, ACK arrives | R=0 C=0 |
+| U=0/1 | ACK arrives ---------------- | U=0 |
+| | ----------- send ACK | |
+| 3-SYN rcvd |_________________ _________________| 2-SYN sent |
+ \__________/ | | \__________/
+ | __V_____V__
+ | / S1=1 \
+ | CLOSE | S2=1 F=0 |
+ | -------- | R=1 C=0 | FIN arrives
+ | send FIN | U=0 | -------------------
+ | | | tell user, send FIN
+ | ________________|4-established|______________________
+ | | CLOSE \___________/ |
+ | | ------- |
+ __V_____V_ send FIN _______V__
+ / S1=1 \ / S1=1 \
+| S2=0/1 F=1 | timeout or | S2=1 F=1 |
+| R=1 C=1 | FIN, error, arrives CLOSE | R=1 C=0 |
+| U=0/1 | ------------------- ---------- | U=0 |
+| | remove TCB remove TCB | |
+| 5-FIN wait |_____________________ _____________| 6-FIN rcvd |
+ \__________/ | | \__________/
+ | |
+ ____________________________V_____V_______________________
+ / \
+ 0-no TCB
+
+
+
+Cerf, Dalal & Sunshine [Page 48]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 2.1: Structure of the TCP
+
+
+
+
+ | _____________ _______________ |
+ | | | | | |
+ | | | | INPUT PACKET |<---->|
+ | | REASSEMBLER | | HANDLER | |
+ | |_____________| |_______________| |
+ | |_______________ | |
+ | | | |
+ | _________ | | |
+ | | | __V_________V____ | NETWORK
+ |<=====| SYSTEM | | | | or
+ | | CALLS |<========| TCB's |<========| some
+USERS |=====>| or | | and | | NETWORK
+ | | USER |========>|ASSOCIATED QUEUES|========>| INTERFACE
+ |<---->|INTERFACE| |_________________| | PROGRAM
+ | |_________| A A |
+ | | | |
+ | ______________| | |
+ | _______|_____ _______|_______ |
+ | | | | | |
+ | | PACKETIZER | | OUTPUT PACKET | |
+ | | | | HANDLER |<---->|
+ | |_____________| |_______________| |
+ | |
+
+
+
+
+
+
+ =======> Logical or physical flow of data (packets/letters)
+
+ -------> "Interaction"
+
+ NOTE: The signalling of processes by others is not shown
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 49]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 2.2a: ________
+Address Check / Begin \
+ \________/
+ |
+ _V_
+ .' '.
+ .' packet '.
+ .' foreign '.
+ ___________________.' socket matches '.
+ | no '. a TCB local .'
+ | '. socket .'
+ | '. ? .'
+ | '.___.'
+ | | yes
+ | _V_
+ | .' '.
+ | .' packet '. ___
+ | .'local socket '. / \
+ | .' matches fully '.____\| YES |
+ | '. specified TCB .' / \___/
+ | '.fgn socket .'
+ | '. ? .'
+ _V_ '.___.'
+ .' '. | no
+ .' SYN, '. _V_
+ .'FIN,INT,DSN, '. .' '.
+ _____.'or text length>0 './_____ .' matches '.
+ | no '. or QUERY .' \ | .'partly spec. '.
+ | '. .' |___.' or unspec. TCB '.
+ | '. ? .' no '. foreign .'
+ | '.___.' '. socket .'
+ | | yes '. ? .'
+ | __________V_________ '.___.'
+ | | | | yes
+ | | Create error 7 | _V_
+ | | packet. Signal OPH | .' '.
+ | |____________________| .' packet '.
+ | | ______.' has SYN set '.
+ | ____V____ | no '. .'
+ | | | | '. ? .'
+ |_________\| discard |/________| '.___.'
+ /|_________|\ |
+ | _V_
+ _V_ / \
+ / \ | YES |
+ | NO | \___/
+ \___/
+
+
+
+
+Cerf, Dalal & Sunshine [Page 50]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 2.2b-1: _______
+Input Packet Handler / Begin \
+ \_______/
+ |
+ ________________________________________\|/_________________________
+| A /|\ |
+| | | |
+| | _V_ |
+| | .' '. _______ |
+| | .' input '. | go to | |
+| | .' packet '.____\| sleep | |
+| | '.available.' no /|_______| |
+| | '.__?__.' |
+| | | yes |
+| | _V_ |
+| | .' '. |
+| .->SPECIAL FUNCT. Fig 4.7 | .'address'. |
+| | .->ERR Fig 4.5,4.6 |___.' check OK '. |
+| | | .->SYN Fig 4.1,4.2 no '. ? .' |
+| | | | .->INT Fig 4.3 '._____.' |
+| | | | | .->FIN Fig 4.4 | yes ________|_
+| | | | | | _V_ | discard |
+| _|_|_|_|_|___________ .' '. |(or queue)|
+| | | .' error '. |__________|
+|<-| Control Processing |/_________.'or control '. A
+ |____________________|\ yes '. ? .' |
+ | '._____.' |
+ | (INT with data) | no |
+ | | |
+ V _V_ |
+ to "X" .' '. . |
+ in Fig 2.2b-2 .'(estab)'. .' '. |
+ _____.' R=S1=S2=1 '.----->.'seq.#'.--->|
+ | yes '. ? .' no '.OK .' no |
+ | '._____.' '.' |
+ | | yes |
+ | _______________ | |
+ | | Set S2=1, U=0 | V |
+ | | Notify user | .'. |
+ |<--| with event 2 | .'ACK'. |
+ | | if U was 1 |<-----'. OK .'--->'
+ | |_______________| yes '. .' no
+ | '
+ V
+ to "Y"
+ in Fig 2.2b-2
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 51]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 2.2b-2: Input Packet Handler (continued)
+
+ "Y"
+ |
+ .'. _V_
+ .'txt'. .' '. ______________________________
+ .'lgth>0 '. .'within '. |Use ACK to advance send window|
+,<----'. or DSN .'<---'. window .'--->|Release ACK'ed packets from |
+| no '. ? .' no '. ? .' yes |retransmit or send queues. If |
+| '._.' '._.' |any packet had EB bit set |
+| | yes |remove buffer from Packetized |
+| ________V____________________ |buffer queue and inform user |
+| |Create ACK packet. Put on | |(success). Signal Packetizer. |
+|<-|Send packet queue. Signal OPH| |______________________________|
+| |_____________________________| |
+| |
+| _____________________________________________|
+| |
+| |
+| | "X"
+| | |
+| _V_ _V_ _____________________
+| .' '. .'TCB'. |Put packet on |
+| .' text '. yes .'Receive'. yes |Receive packet queue |
+| .' length>0 '.-------->.' buffer '.------>|in the right order. |
+| '. or DSN .' A '.available.' |Signal Reassembler. |
+| '. ? .' | '. ? .' |_____________________|
+| '._.' | '._.' |
+| | no | | no |
+| | | _V_ |
+|________\| | .' '. |
+ /| | .' seq # '. ________ |
+ | | .' of packet '. yes |Discard | |
+ | | '. highest so .'---->|packet |----->|
+ | | '. far .' |________| |
+ | | '. ? .' |
+ | | '._.' |
+ | | | no |
+ | | _______V______________ |
+ | | |Discard packet with | |
+ | |_____|highest seq. no from | |
+ | |Receive packet queue. | |
+ | |______________________| |
+ | |
+ |_____________________________________________________|
+ |
+ V
+ to "Begin" in Fig 2.2b-1
+
+
+
+Cerf, Dalal & Sunshine [Page 52]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 2.3-1: Reassembler
+
+ _______
+ / Begin \
+ \_______/
+ |
+ |
+ |<----------------------------------------------.
+ | _____ | yes
+ ______V_____ .' '. _|_
+ |Get ready | .' Receive '. yes .'any'.
+ |for next TCB|--------->.'Packet Queue '.-------->.' more '.
+ |____________| A '. empty ? .' A '.work?.'
+ | '._______.' | '._.'
+ | | no | | no
+ "R"------>---------' __V__ | ____V____
+ .' is '. | | Go to |
+ .' packet '. | | Sleep |
+ .--<----------------------'.DSN with no.' | |_________|
+ | yes '. data? .' |
+ | '.___.' |
+ | | no |
+ | __V__ |
+ | .' '. |
+ | .' Receive '. yes |
+ | .'Buffer Queue '.--->|
+ | '. empty ? .' |
+ | ________________ '._______.' |
+ | |Copy from packet| | no |<-------------"S"
+ | |to buffer until | __V__ |
+ | |one is exhausted| .'First'. |
+ | |Update receive | yes .' packet '. no |
+ | |window. |<----.'matches Recv '.--->'
+ | |________________| '.left window.'
+ | | '. edge ?.'
+ | __V__ '.___.'
+ | .'Send '.
+ | .' Packet '. yes _____________________________
+ | .' Queue empty '.---->|Create ACK packet containing |
+ | '. ? .' |new window. Signal OPH. |
+ | '._______.' |_____________________________|
+ | no | |
+ | | |
+ | '--------------------------->|
+ | |
+ V V
+to "T" to "U"
+in Fig 2.3-2 in Fig 2.3-2
+
+
+
+Cerf, Dalal & Sunshine [Page 53]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 2.3-2: Reassembler (continued)
+
+
+
+
+ "T" "U"
+ | |
+ | | _____________
+ ___V____ ___ __V__ |Mark progress|
+ |process | yes .' '. yes .'whole'. no |in packet. |
+ | DSN |<-----.' DSN '.<-----.' packet '.--->|Return buffer|--->.
+ |________| '. set?.' '.copied?.' |to user. | |
+ | '._.' '.___.' |_____________| |
+ | | no |
+ '--------------->| |
+ | |
+ __V__ __________________________ |
+ .' EOL '. yes |Return buffer to user. | |
+ '. set? .'--------->|Return packet to free |--->|
+ '.___.' |storage. Signal Packetizer| |
+ no | |__________________________| |
+ | A |
+ __V__ | |
+ .' full'. | |
+ '. buffer.'--------------' |
+ '.___.' yes |
+ | no |
+ | |
+ ___________________V__________________ |
+ |Mark progress in buffer. Return packet| |
+ |to free storage. Signal Packetizer. | ,--------'
+ |______________________________________| |
+ | |
+ | |
+ V V
+ to "R" in Fig 2.3-1 to "S" in Fig 2.3-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 54]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 2.4: Packetizer
+
+ _______ ________________________
+ / Begin \____________\| Get ready for next TCB |/___________________
+ \_______/ /|________________________|\ |
+ | |
+ __V__ _____ |
+ .'Send '. .' any '. |
+ no .' Buffer '. yes .' more '. yes |
+ .-------------'. Queue .'---->'. work .'-----'
+ | '.empty? .' A '. ? .'
+ ____________V____________ '.___.' | '.___.'
+ |Pick packet size depend- | | | no
+,-->|ing on send buffer, TCB | | ______V______
+| |buffer space, window, etc| | | go to sleep |
+| |_________________________| | |_____________|
+| | |
+| __V__ |
+| .'Send '. |
+| .' window '. no |
+| '.has room ? .'--------------------->|
+| '._______.' |
+| | yes |
+| __V__ |
+| .' TCB '. |
+| .' buffer '. no |
+| .'space avail- '.---------------------'
+| '. able ? .' A
+| '._______.' |
+| | yes |
+| _____________V____________ _________|_______ ____________
+| |Copy from Send buffer to | |Move buffer from | |Set EOL bit |
+| |packet until packet full. | |Send queue to |<--|in packet |
+| |Put packet on Send packet | |packetized queue | |header |
+| |queue. Signal OPH. | |_________________| |____________|
+| |__________________________| A A
+| | | no |
+| __V__ __|__ |
+| .'whole'. .' EOL '. |
+| .' Send '. yes .' set in '. yes |
+| '. buffer .'----------->'. Send .'-----------'
+| '.copied?.' '.buffer?.'
+| '.___.' '.___.'
+| | no
+| _____________V__________
+| |Note in TCB where in |
+ --|Send buffer we stopped. |
+ |________________________|
+
+
+
+Cerf, Dalal & Sunshine [Page 55]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 2.5a:
+Output Packet Handler
+ _______
+ / Begin \
+ \_______/
+ |
+ |<--------------------------.
+ ____________V___________ |
+ | Get ready for next TCB | |
+ |________________________| |
+ | |
+,------------------------------------>| |
+| __V__ _____ |
+| _____ .'Send '. .' any '. |
+| yes .' ACK '. no .' Buffer '. yes .' more '. yes |
+| .-----'.bit set.'<------'. Queue .'---->'. work .'-----'
+| | '.___.' '.empty? .' A '. ? .'
+| | no |________ '.___.' | '.___.'
+| | |__________ | | no
+| ____V__________________ | | |
+| |Put latest receive left| ________v______ | ______V______
+| |window edge in ACK. |->|Transmit packet| | | go to sleep |
+| |_______________________| |_______________| | |_____________|
+| | |
+| ________________ __V__ |
+| |Return packet to| .'pckt '. |_________________
+| |buffer pool as | no .'seq # to '. |
+| |it has been |<------.'rgt of Send '. |
+| |ACKed | '.left window.' |
+| |________________| '. edge .' |
+| | '.___.' |
+| | | yes |
+| | _______________V________________ |
+| | |Move packet to retransmit queue;| |
+| | |set new retrans. time for it. | |
+| | |________________________________| |
+| | | |
+| '---------------------->| |
+| __V__ |
+| no .'Time '. yes |
+ -------------------------------.'to switch'.---------------------'
+ '.TCB's? .'
+ '.___.'
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 56]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 2.5b:
+Retransmit Process
+
+ _______
+ / Begin \
+ \_______/
+ |
+ |<----------------------------------.
+ ____________V___________ |
+ | Get ready for next TCB | |
+ |________________________| |
+ | |
+ .-------------------------------->| |
+ | __V__ |
+ | .' Any '. _____ |
+ | .'packet's '. .' any '. |
+ | .'retrans. time'. no .' more '. yes |
+ | '. has occurred .'----->'. work .'-----'
+ | '. for this .' '. ? .'
+ | '. TCB ? .' '.___.'
+ | '.___.' |
+ | | yes | no
+ | | ______V______
+ | ________V________ | go to sleep |
+ | |Move packet to | |_____________|
+ '------------------------|Send Packet |
+ |queue. Signal OPH|
+ |_________________|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 57]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 3.1:
+OPEN
+ _______
+ / Begin \
+ \_______/
+ |
+ __V__
+ .'User '. _______
+ .'permitted'. no | |
+ .' access to '.---->|error 1|------------.
+ '.this local .' |_______| |
+ '.socket?.' |
+ '.___.' |
+ | yes |
+ __V__ |
+ .' fgn '. |
+ yes .' socket '. no |
+ .-----'. specified .'----. |
+ | '. ? .' | |
+ __V__ '.___.' __V__ _______ |
+ _______ .'conn-'. .'space'. no | | |
+ | | yes .' ection '. '.for TCB.'---->|error 4|-->|
+,-|error 6|<----'. already .' '.___.' |_______| |
+| |_______| '.exists?.' | yes |
+| '.___.' | |
+| | no ____V__________ |
+| _______ __V__ |Create TCB. Set| |
+| | | no .'space'. |S1=S2=R=F=C=1 | |
+|<-|error 4|<-----'.for TCB.' |Set U=1 | |
+| |_______| '.___.' |_______________| |
+| | yes | |
+| | | |
+| _________V__________ | |
+| |Create TCB. Set U=0 | | |
+| |Set S1=S2=R=F=C=1 | | |
+| |____________________| | |
+| | | |
+| '-------------.-------------' |
+| | |
+| _____________________V__________________ |
+| |Return local connection name and Success| |
+| |________________________________________| |
+| | |
+ ----------------------------------->|<--------------------------------'
+ ____V___
+ / Return \
+ \________/
+
+
+
+
+Cerf, Dalal & Sunshine [Page 58]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 3.2:
+SEND
+ _______
+ / Begin \
+ \_______/
+ |
+ __V__
+ .'conn-'.
+ .' ection '. _________
+ .' legal for '. no | |
+ '. this process .'---------->| error 1 |-----------.
+ '. ? .' |_________| |
+ '._______.' |
+ | yes |
+ __V__ |
+ .'conn-'. _________ |
+ .' ection '. no | | |
+ .' open '.----------->| error 3 |---------->|
+ '. ? .' |_________| |
+ '._______.' |
+ | yes |
+ __V__ |
+ .' fgn '. _________ |
+ .' socket '. no | | |
+ '. specified .'------------>| error 5 |---------->|
+ '.(U=0)? .' |_________| |
+ '.___.' |
+ | yes |
+ __V__ |
+ .'conn-'. _________ |
+ .' ection '. yes | | |
+ '. closing ? .'------------>| error 12|---------->|
+ '.(F,C=1).' |_________| |
+ '.___.' |
+ | no |
+ ____________________V________________________________ |
+ |Put buffer on Send Buffer queue and signal Packetizer| |
+ |_____________________________________________________| |
+ | |
+ |<-----------------------------------------'
+ ____V___
+ / Return \
+ \________/
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 59]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 3.3:
+INTERRUPT
+
+
+ _______
+ / Begin \
+ \_______/
+ |
+ |
+ V
+
+
+ Same as SEND
+
+
+ | |
+ | |
+ ____________________V_________________________ |
+ |Return any pending Send buffers with code 10. | |
+ |Create INT packet on outgoing packet queue. | |
+ |Signal Output Packet Handler. | |
+ |______________________________________________| |
+ | |
+ |<-----------------------------------------'
+ ____V___
+ / Return \
+ \________/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 60]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 3.4:
+RECEIVE
+ _______
+ / Begin \
+ \_______/
+ |
+ __V__
+ .'conn-'.
+ .' ection '. _________
+ .' legal for '. no | |
+ '. this process .'---------->| error 1 |-----------.
+ '. ? .' |_________| |
+ '._______.' |
+ | yes |
+ _V_ |
+ .' '. |
+ .' '. |
+ .'connection '. |
+ .' state '. |
+ :___________________: _________ |
+ | | | | | |
+ 1-4 | 5,6 | 0 '-------------------->| error 3 |-->|
+ | '---------------------. |_________| |
+ __________V__________ | |
+ |Put buffer on Receive| | _________ |
+ |Buffer queue. Signal | | | | |
+ |Reassembler | '----->| error 12|-->|
+ |_____________________| |_________| |
+ | |
+ |<------------------------------------------------'
+ ____V___
+ / Return \
+ \________/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 61]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 3.5:
+CLOSE
+ _______
+ / Begin \
+ \_______/
+ |
+ __V__
+ .'conn-'.
+ .' ection '. _________
+ .' legal for '. no | |
+ '. this process .'---------->| error 1 |-----------.
+ '. ? .' |_________| |
+ '._______.' |
+ | yes |
+ _V_ |
+ .' '. |
+ .' '. |
+ .'connection '. |
+ .' state '. |
+ :___________________: _________ |
+ 5| |3,4 |1,2,6 |0 | | |
+ | | | '------------------>| error 3 |-->|
+,------------' | '-------------------. |_________| |
+| ______________V______________________ | |
+| |Return all buffers to user with error| | ___________ |
+| |12; clear all packet queues, create | | |Remove TCB | |
+| |FIN packet, signal Output Packet | '--->|Return |--->|
+| |Handler, set C=F=1 | |Success | |
+| |_____________________________________| |___________| |
+| | |
+ --------------------->|<----------------------------------------'
+ ____V___
+ / Return \
+ \________/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 62]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 3.6:
+STATUS
+ _______
+ / Begin \
+ \_______/
+ |
+ __V__
+ .'conn-'.
+ .' ection '. _________
+ .' legal for '. no | |
+ '. this process .'---------->| error 1 |-----------.
+ '. ? .' |_________| |
+ '._______.' |
+ | yes |
+ __V__ __________ |
+ .'conn-'. |Return | |
+ .' ection '. no |state=0 or| |
+ '. open ? .'------------>|error 3 |--------->|
+ '._______.' |__________| |
+ | yes |
+ ___________V___________ |
+ |Fill in reply from TCB.| |
+ |Return Success to user.| |
+ |_______________________| |
+ | |
+ |<-----------------------------------------'
+ ____V___
+ / Return \
+ \________/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 63]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 4.1:
+SYN (no ACK)
+ _______
+ / Begin \
+ \_______/
+ |
+ _V_
+ .' '.
+ .' '.
+ .' S1, S2, R '.
+ .' ? '.
+ :___________________: 1,1,1 _________
+ __________ | | | | (states 4-6) | |
+|Treat as a| 1,0,1 | | | '------------->| error 6 |-->.
+|duplicate.|<-----------' | | |_________| |
+|Retransmit| | | 1.0,0 |
+|SYN, ACK | 0,0,0 | | (Syn sent) ________________ |
+|__________| (listening) | '------------>|Collision: Clear| |
+ | | |S1, set timeout,| |
+ | _____________________V________________ |remove SYN from |-->|
+ | |Set R=S1=1. If U=1 set foreign socket | |retransmit queue| |
+ | |in TCB to match packet local socket. | |________________| |
+ | |Send SYN, ACK. Signal OPH. Fill in TCB| |
+ | |with send window, receive sequence #. | |
+ | |______________________________________| |
+ | | |
+ | | |
+ '----------------------->|<---------------------------------------'
+ ___V__
+ / Done \
+ \______/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 64]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 4.2:
+SYN,ACK
+
+ _______
+ / Begin \
+ \_______/
+ |
+ __V__
+ .' '.
+ .' State 2 '. no
+ '.S1=1;S2=R=0.'----------------.
+ '. ? .' |
+ '.___.' |
+ | yes |
+ __V__ _______V______
+ .' ACK '. no | |
+ .' correct '.-------->| send error 6 |
+ '. ? .' |______________|
+ '.___.' |
+ | yes |
+ _________V_________ |
+ |Set S2=R=1. Process| |
+ |ACK. Send ACK. | |
+ |___________________| |
+ | |
+ |<----------------------'
+ ___V__
+ / Done \
+ \______/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 65]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 4.3:
+INT (from net)
+ _______ ____________
+ / Begin \____\|Process ACK |
+ \_______/ /|(may set S2)|------.
+ |____________| |
+ |
+ __V__
+ ____________ .' in '.
+ | Discard | no .' state 4 '.
+ .<-------| (or queue) |<-------'. S1=S2=R=1 .'
+ | |____________| '. F=0 ? .'
+ | '.___.'
+ | | yes
+ | __V__
+ | ____________ .' '.
+ | | ACK and | no .' within '.
+ |<-------| discard |<-------'. window .'
+ | |____________| '. ? .'
+ | '.___.'
+ | | yes
+ | ____________________________V_______________
+ | |Move Receive Left window edge to sequence |
+ | |number of INT. Return event 10 with any |
+ | |pending Receive buffers. Ruturn event 11 to |
+ | |user. Send ACK for INT. |
+ | |____________________________________________|
+ | |
+ | __V__
+ | see yes .'data '.
+ | Figure<----------.' in this '.
+ | 2.2 '.packet?.'
+ | '.___.'
+ | | no
+ '------------------------------------>|
+ ___V__
+ / Done \
+ \______/
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 66]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 4.4:
+FIN
+ _______ ____________
+ / Begin \____\|Process ACK |
+ \_______/ /|(may set S2)|------.
+ |____________| |
+ |
+ __V__
+ .' '.
+ no .'S1=S2=R=1'.
+ .--------------'. (estab- .'
+ | '.lished).'
+ | '.___.'
+ | | yes
+ | __V__
+ ______V_____ .' '.
+ | | no .' within '.
+ .-----------------| discard |<-------'. window .'
+ | |____________| '. ? .'
+ | '.___.'
+ | | yes
+ | __V__
+ | (state 4) 0 .'F bit'. 1 (state 5)
+ | .------------'. value .'------------.
+ | | '.___.' |
+ | _________________________V________ |
+ | |Return all user buffers (event 12)| _____________________V__
+ | |Clear all packet queues. Send FIN | |Return success to User's|
+ | |packet. Set F=1. Inform user | |CLOSE. Remove TCB. |
+ | |"connection closing" (event 12) | |________________________|
+ | |__________________________________| |
+ | | |
+ '----------------->|<-----------------------------------'
+ ___V__
+ / Done \
+ \______/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 67]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 4.5:
+Error 6 (bad SYN)
+
+
+ _______
+ / Begin \
+ \_______/
+ |
+ |
+ __V__
+ .' '.
+ .'refers to'.
+ .'current pckt?'. _________
+ .'(ACK matches seq '. no | |
+ '. # of packet on .'----------------->| discard |-----------.
+ '.retrans or send.' |_________| |
+ '. queues?) .' |
+ '._______.' |
+ | yes |
+ | |
+ _V_ |
+ .' '. 1 (state 3) |
+ .' value '.--------------------------------. |
+ '. of R.' bad SYN,ACK | |
+ '._.' | |
+ | | |
+ | 0 (state 2) | |
+ | bad SYN | |
+ __________________V__________________ _______V______ |
+|Other side is established. Send RESET| |Clear S1, R | |
+|(put error packet's seq. # in ACK | |Remove SYN,ACK| |
+|field. Return all user buffers with | |from retrans | |
+|code 14. Inform user with event 14 | |queue. | |
+|_____________________________________| |______________| |
+ | | |
+ | V |
+ |<--------------------------------------------------'
+ ___V__
+ / Done \
+ \______/
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 68]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 4.6:
+Error 7,8
+
+
+ _______
+ / Begin \
+ \_______/
+ |
+ __V__
+ .' '.
+ .'refers to'. _________
+ .' current '. no | |
+ '. packet (check .'---------------->| discard |-----------.
+ '. ACK)? .' A |_________| |
+ '._______.' | |
+ | yes | |
+ _V_ | |
+ .' '. | |
+ .' '. | |
+ .'connection '. | |
+ .' state '. | |
+ :___________________: | |
+ 4| 5| 3| 2| 6| | |
+ .-------' | | | '------' |
+ | | | '-----------------------------. |
+ | | '-------------. | |
+ | | | | |
+ ___V___ ____V_______ ______V_______ ________V_________ |
+|Pass to| |Remove TCB. | |Clear S1, R. | |Discard. SYN will | |
+|user | |Return | |Remove SYN,ACK| |be retrans to | |
+|_______| |success to | |from transmit | |avoid receiver | |
+ | |user's CLOSE| |queue (go to | |having to queue it| |
+ | |____________| |state 1). | |__________________| |
+ | | |______________| | |
+ | V | V |
+ '------------------------------>|<---------------------------------'
+ ___V__
+ / Done \
+ \______/
+
+
+
+
+
+
+
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 69]
+
+RFC 675 Specification of Internet TCP December 1974
+
+
+FIGURE 4.7:
+RESET
+ _______
+ / Begin \
+ \_______/
+ |
+ __V__
+ no .'Reset'. yes
+ .------------'. All ? .'------------------.
+ | '.___.' |
+ | _________V_________
+ | |Clear all TCB's for|
+ | |foreign TCP. Inform|
+ | |users with event 14|
+ | |___________________|
+ __V__ |
+ .' Is '. _________ |
+ .' RESET '. no | | |
+ .'believable ? '.------->| discard |------------->|
+ '.(check ACK .' |_________| |
+ '.field) .' |
+ '.___.' |
+ | yes |
+ ________________V________________ |
+|Clear all queues for this TCB. | |
+|Return event 14 for user buffers.| |
+|Inform User with event 14. | |
+|_________________________________| |
+ | |
+ |<----------------------------------------'
+ ___V__
+ / Done \
+ \______/
+
+
+
+
+
+
+
+
+
+
+ [ This RFC was put into machine readable form for entry ]
+ [ into the online RFC archives by Alex McKenzie with ]
+ [ support from GTE, formerly BBN Corp. 2/2000 ]
+
+
+
+
+
+Cerf, Dalal & Sunshine [Page 70]
+