RFC Errata
RFC 793, "Transmission Control Protocol", September 1981
Note: This RFC has been obsoleted by RFC 9293
Note: This RFC has been updated by RFC 1122, RFC 3168, RFC 6093, RFC 6528
Source of RFC: LegacyArea Assignment: tsv
Errata ID: 3301
Status: Held for Document Update
Type: Technical
Publication Format(s) : TEXT
Reported By: Botong Huang
Date Reported: 2012-07-30
Held for Document Update by: Wes Eddy
Date Held: 2012-09-13
Section 3.9 says:
SEGMENT ARRIVES Otherwise (Other States) fifth check the ACK field p71 if the ACK bit is on SYN-RECEIVED STATE If SND.UNA =< SEG.ACK =< SND.NXT then enter ESTABLISHED state and continue processing. If the segment acknowledgment is not acceptable, form a reset segment, <SEQ=SEG.ACK><CTL=RST> and send it.
It should say:
SEGMENT ARRIVES Otherwise (Other States) fifth check the ACK field p71 if the ACK bit is on SYN-RECEIVED STATE If SND.UNA < SEG.ACK =< SND.NXT then enter ESTABLISHED state and continue processing. If the segment acknowledgment is not acceptable, form a reset segment, <SEQ=SEG.ACK><CTL=RST> and send it.
Notes:
In SYN-RECEIVE, SND.UNA == ISS. When the first ACK arrive with SEG.ACK == SND.UNA, it should be not accepted and thus transfer to ESTABLISHED state. This doesn't seem to be in rfc1122. Not sure if it is reported somewhere.
Verifier Note:
The side sending generating a packet that would erroneously check out would either be in error itself for generating the packet (not following the standard), or the packet would be extremely old (from a prior connection), and the responses should generate RSTs. Existing code seems to already be implementing this correctly, so I do not think there is an interoperability issue.