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: 3300
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 SYN-SENT STATE If the ACK bit is set If SEG.ACK =< ISS, or SEG.ACK > SND.NXT, send a reset (unless the RST bit is set, if so drop the segment and return) <SEQ=SEG.ACK><CTL=RST> and discard the segment. Return. If SND.UNA =< SEG.ACK =< SND.NXT then the ACK is acceptable.
It should say:
SEGMENT ARRIVES SYN-SENT STATE If the ACK bit is set If SEG.ACK =< ISS, or SEG.ACK > SND.NXT, send a reset (unless the RST bit is set, if so drop the segment and return) <SEQ=SEG.ACK><CTL=RST> and discard the segment. Return. If SND.UNA < SEG.ACK =< SND.NXT then the ACK is acceptable.
Notes:
In SYN-SENT, SND.UNA == ISS, so the first line is contradictory to the last.
Verifier Notes:
This is being Held for Document Update rather than Verified because technically the algorithm is still correct, as the first check against ISS will fail and cause a reset to be generated. The second sentence that has an off-by-one error appears to be merely a paraphrasing.
In practice today, much code seems to be simplifying further and checking that SEG.ACK == SND.NXT, for stacks that are not sending data on the SYN, so I do not believe this text is leading to any significant issue with bugs or interoperability in the wild.