Connected: An Internet Encyclopedia
4.2.2.20 Event Processing: RFC-793 Section 3.9

Up: Connected: An Internet Encyclopedia
Up: Requests For Comments
Up: RFC 1122
Up: 4. TRANSPORT PROTOCOLS
Up: 4.2 TRANSMISSION CONTROL PROTOCOL -- TCP
Up: 4.2.2 PROTOCOL WALK-THROUGH
Prev: 4.2.2.19 Time to Live: RFC-793 Section 3.9, page 52
Next: 4.2.2.21 Acknowledging Queued Segments: RFC-793 Section 3.9

4.2.2.20 Event Processing: RFC-793 Section 3.9

4.2.2.20 Event Processing: RFC-793 Section 3.9

While it is not strictly required, a TCP SHOULD be capable of queueing out-of-order TCP segments. Change the "may" in the last sentence of the first paragraph on page 70 to "should".

DISCUSSION:

Some small-host implementations have omitted segment queueing because of limited buffer space. This omission may be expected to adversely affect TCP throughput, since loss of a single segment causes all later segments to appear to be "out of sequence".

In general, the processing of received segments MUST be implemented to aggregate ACK segments whenever possible. For example, if the TCP is processing a series of queued segments, it MUST process them all before sending any ACK segments.

Here are some detailed error corrections and notes on the Event Processing section of RFC-793.

  1. CLOSE Call, CLOSE-WAIT state, p. 61: enter LAST-ACK state, not CLOSING.

  2. LISTEN state, check for SYN (pp. 65, 66): With a SYN bit, if the security/compartment or the precedence is wrong for the segment, a reset is sent. The wrong form of reset is shown in the text; it should be:

            <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>
    

  3. SYN-SENT state, Check for SYN, p. 68: When the connection enters ESTABLISHED state, the following variables must be set:
                        SND.WND <- SEG.WND
                        SND.WL1 <- SEG.SEQ
                        SND.WL2 <- SEG.ACK
    

  4. Check security and precedence, p. 71: The first heading "ESTABLISHED STATE" should really be a list of all states other than SYN-RECEIVED: ESTABLISHED, FIN-WAIT- 1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, and TIME-WAIT.

  5. Check SYN bit, p. 71: "In SYN-RECEIVED state and if the connection was initiated with a passive OPEN, then return this connection to the LISTEN state and return. Otherwise...".

  6. Check ACK field, SYN-RECEIVED state, p. 72: When the connection enters ESTABLISHED state, the variables listed in (c) must be set.

  7. Check ACK field, ESTABLISHED state, p. 72: The ACK is a duplicate if SEG.ACK =< SND.UNA (the = was omitted). Similarly, the window should be updated if: SND.UNA =< SEG.ACK =< SND.NXT.

  8. USER TIMEOUT, p. 77:

    It would be better to notify the application of the timeout rather than letting TCP force the connection closed. However, see also Section 4.2.3.5.


Next: 4.2.2.21 Acknowledging Queued Segments: RFC-793 Section 3.9

Connected: An Internet Encyclopedia
4.2.2.20 Event Processing: RFC-793 Section 3.9