Skip to main content

6.1.3 The TCP Receiver

6.1.3 The TCP Receiver

When TCP receives a CE packet at the destination end-system, the TCP data receiver sets the ECN-Echo flag in the TCP header of the subsequent ACK packet. If any ACK withholding is implemented, such as in the current "delayed-ACK" TCP implementations where the TCP receiver can send one ACK for two arriving packets, then the ECN-Echo flag in the ACK packet will be set to '1' if the CE codepoint was set in any of the packets being acknowledged. That is, if any received packet is a CE packet, then the returned ACK has the ECN-Echo flag set.

To provide robustness against the possibility of a dropped ACK packet carrying an ECN-Echo flag, the TCP receiver sets the ECN-Echo flag in a series of ACK packets sent subsequently. The TCP receiver uses the CWR flag received from the TCP sender to determine when to stop setting the ECN-Echo flag.

After a TCP receiver sends an ACK packet with the ECN-Echo bit set, that TCP receiver continues to set the ECN-Echo flag in all ACK packets it sends (whether they acknowledge CE packets or non-CE packets) until it receives a CWR packet (a packet with the CWR flag set). After the receipt of the CWR packet, acknowledgements for subsequent non-CE packets do not have the ECN-Echo flag set. If the data receiver receives another CE packet, then the receiver sets the ECN-Echo flag again in ACK packets. While the receipt of a CWR packet does not guarantee that the data sender received the ECN-Echo message, it does indicate that the data sender reduced its congestion window at some time after it sent the packet that was marked with the CE codepoint.

We have specified that the TCP sender need not reduce its congestion window more than once per window of data. If a TCP sender is to avoid unnecessarily reducing the congestion window when a data window includes both a lost packet and (marked) CE packets, some care is needed. This is illustrated in [Floyd98].