Connected: An Internet Encyclopedia
RFC 793 - 3.2. Terminology

Top: Connected: An Internet Encyclopedia
Up: Requests For Comments
Up: RFC 793
Up: 3. FUNCTIONAL SPECIFICATION
Prev: 3.1. Header Format
Next: 3.3. Sequence Numbers

### 3.2. Terminology

Before we can discuss very much about the operation of the TCP we need to introduce some detailed terminology. The maintenance of a TCP connection requires the remembering of several variables. We conceive of these variables being stored in a connection record called a Transmission Control Block or TCB. Among the variables stored in the TCB are the local and remote socket numbers, the security and precedence of the connection, pointers to the user's send and receive buffers, pointers to the retransmit queue and to the current segment. In addition several variables relating to the send and receive sequence numbers are stored in the TCB.

        Send Sequence Variables

          SND.UNA - send unacknowledged
          SND.NXT - send next
          SND.WND - send window
          SND.UP  - send urgent pointer
          SND.WL1 - segment sequence number used for last window update
          SND.WL2 - segment acknowledgment number used for last window
                    update
          ISS     - initial send sequence number

        Receive Sequence Variables

          RCV.NXT - receive next
          RCV.WND - receive window
          RCV.UP  - receive urgent pointer
          IRS     - initial receive sequence number

The following diagrams may help to relate some of these variables to the sequence space.

Send Sequence Space

                       1         2          3          4
                  ----------|----------|----------|----------
                         SND.UNA    SND.NXT    SND.UNA
                                              +SND.WND

            1 - old sequence numbers which have been acknowledged
            2 - sequence numbers of unacknowledged data
            3 - sequence numbers allowed for new data transmission
            4 - future sequence numbers which are not yet allowed

                              Send Sequence Space

                                   Figure 4.

The send window is the portion of the sequence space labeled 3 in figure 4.

Receive Sequence Space

                           1          2          3
                       ----------|----------|----------
                              RCV.NXT    RCV.NXT
                                        +RCV.WND

            1 - old sequence numbers which have been acknowledged
            2 - sequence numbers allowed for new reception
            3 - future sequence numbers which are not yet allowed

                             Receive Sequence Space

                                   Figure 5.

The receive window is the portion of the sequence space labeled 2 in figure 5.

There are also some variables used frequently in the discussion that take their values from the fields of the current segment.

        Current Segment Variables

          SEG.SEQ - segment sequence number
          SEG.ACK - segment acknowledgment number
          SEG.LEN - segment length
          SEG.WND - segment window
          SEG.UP  - segment urgent pointer
          SEG.PRC - segment precedence value

A connection progresses through a series of states during its lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, and the fictional state CLOSED. CLOSED is fictional because it represents the state when there is no TCB, and therefore, no connection. Briefly the meanings of the states are:

        LISTEN - represents waiting for a connection request from any remote
        TCP and port.

        SYN-SENT - represents waiting for a matching connection request
        after having sent a connection request.

        SYN-RECEIVED - represents waiting for a confirming connection
        request acknowledgment after having both received and sent a
        connection request.

        ESTABLISHED - represents an open connection, data received can be
        delivered to the user.  The normal state for the data transfer phase
        of the connection.

        FIN-WAIT-1 - represents waiting for a connection termination request
        from the remote TCP, or an acknowledgment of the connection
        termination request previously sent.

        FIN-WAIT-2 - represents waiting for a connection termination request
        from the remote TCP.

        CLOSE-WAIT - represents waiting for a connection termination request
        from the local user.

        CLOSING - represents waiting for a connection termination request
        acknowledgment from the remote TCP.

        LAST-ACK - represents waiting for an acknowledgment of the
        connection termination request previously sent to the remote TCP
        (which includes an acknowledgment of its connection termination
        request).

        TIME-WAIT - represents waiting for enough time to pass to be sure
        the remote TCP received the acknowledgment of its connection
        termination request.

        CLOSED - represents no connection state at all.

A TCP connection progresses from one state to another in response to events. The events are the user calls, OPEN, SEND, RECEIVE, CLOSE, ABORT, and STATUS; the incoming segments, particularly those containing the SYN, ACK, RST and FIN flags; and timeouts.

The state diagram in figure 6 illustrates only state changes, together with the causing events and resulting actions, but addresses neither error conditions nor actions which are not connected with state changes. In a later section, more detail is offered with respect to the reaction of the TCP to events.

NOTE BENE: this diagram is only a summary and must not be taken as the total specification.

                                  +---------+ ---------\      active OPEN
                                  |  CLOSED |            \    -----------
                                  +---------+<---------\   \   create TCB
                                    |     ^              \   \  snd SYN
                       passive OPEN |     |   CLOSE        \   \
                       ------------ |     | ----------       \   \
                        create TCB  |     | delete TCB         \   \
                                    V     |                      \   \
                                  +---------+            CLOSE    |    \
                                  |  LISTEN |          ---------- |     |
                                  +---------+          delete TCB |     |
                       rcv SYN      |     |     SEND              |     |
                      -----------   |     |    -------            |     V
     +---------+      snd SYN,ACK  /       \   snd SYN          +---------+
     |         |<-----------------           ------------------>|         |
     |   SYN   |                    rcv SYN                     |   SYN   |
     |   RCVD  |<-----------------------------------------------|   SENT  |
     |         |                    snd ACK                     |         |
     |         |------------------           -------------------|         |
     +---------+   rcv ACK of SYN  \       /  rcv SYN,ACK       +---------+
       |           --------------   |     |   -----------
       |                  x         |     |     snd ACK
       |                            V     V
       |  CLOSE                   +---------+
       | -------                  |  ESTAB  |
       | snd FIN                  +---------+
       |                   CLOSE    |     |    rcv FIN
       V                  -------   |     |    -------
     +---------+          snd FIN  /       \   snd ACK          +---------+
     |  FIN    |<-----------------           ------------------>|  CLOSE  |
     | WAIT-1  |------------------                              |   WAIT  |
     +---------+          rcv FIN  \                            +---------+
       | rcv ACK of FIN   -------   |                            CLOSE  |
       | --------------   snd ACK   |                           ------- |
       V        x                   V                           snd FIN V
     +---------+                  +---------+                   +---------+
     |FINWAIT-2|                  | CLOSING |                   | LAST-ACK|
     +---------+                  +---------+                   +---------+
       |                rcv ACK of FIN |                 rcv ACK of FIN |
       |  rcv FIN       -------------- |    Timeout=2MSL -------------- |
       |  -------              x       V    ------------        x       V
        \ snd ACK                 +---------+delete TCB         +---------+
         ------------------------>|TIME WAIT|------------------>| CLOSED  |
                                  +---------+                   +---------+

                          TCP Connection State Diagram
                                   Figure 6.

Next: 3.3. Sequence Numbers

Connected: An Internet Encyclopedia
RFC 793 - 3.2. Terminology