RFC 793, "Transmission Control Protocol", September 1981Source of RFC: Legacy
Area Assignment: tsv
Errata ID: 4785
Status: Held for Document Update
Publication Format(s) : TEXT
Reported By: Sanjeev Ranot
Date Reported: 2016-08-20
Held for Document Update by: Mirja Kühlewind
Date Held: 2016-09-01
Section 3.9 p. 72 says:
If the ACK is a duplicate (SEG.ACK < SND.UNA), it can be ignored.
It should say:
If the ACK is a duplicate (SEG.ACK =< SND.UNA), it can be ignored except when equality is met, then window should be updated. This can happen when there are segments in flight but the receiver shrinks its RCV.BUF to drop all of them and send an ACK carrying zero window update. Upon its arrival at the sending TCP, condition SND.UNA = SEG.ACK is met and we must update SND.WND <- 0. Then sender starts persist timer for sending zero-window probes [Ref. RFC 1122 Section 18.104.22.168, page 92]
The condition is corrected as Duplicate ACK in
RFC 1122, Section 22.214.171.124 (g) p. 94. Accordingly old text must be
modified and new text should also be present to support the corrected
condition in RFC 793.
This is one case where duplicate acknowledgment cannot be ignored. i.e.
when SEG.ACK == SND.UNA and advertised window in the incoming ACK is 0
in which case sender needs to :
1. update window
2. start persist timer
3. send zero window probe segments.
Such ACKs should not be called as duplicates as it fails condition (e)
of definition of "DUPLICATE ACKNOWLEDGMENT" in Ref 5681 Section 2, pg 4