RFC 793 inline-errata, "Transmission Control Protocol", September 1981
Source of RFC: Legacy
⚠ This RFC has been obsoleted!
Obsoleted by: RFC9293
Updated by: RFC1122, RFC3168, RFC6093, RFC6528
Area assignment: tsv
Errata-ID: 3300
- Status:
- Held for Document Update
- Type:
- Technical
- Reported By:
- Botong Huang
- Date Reported:
- 2012-07-30
- Held for Document Update by:
- Wes Eddy
- Date Held for Document Update:
- 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.