3.1.1.8 Congestion Control

The Congestion Control abstract data model (ADM) element is used to limit the rate at which the sender sends Source Packets. Controlling the network throughput enables sharing the network resources with other users and avoiding network congestion. The sender MUST implement some form of Congestion Control logic. Any NewReno variant implementation can be an acceptable option. For more information about NewReno variants, see [RFC3782].

When the sender receives the RDPUDP_FLAG_CN flag (section 2.2.2.1), which notifies of a datagram loss, the sender MUST immediately react and reduce its network throughput. The next Source Packet sent by the sender MUST have an RDPUDP_FLAG_CWR flag (section 2.2.2.1) to indicate that the sender has reacted to the Congestion Notification ADM element. The sender will remember the source packet that carries the RDPUDP_FLAG_CWR. The receiver will stop setting the RDPUDP_FLAG_CN on acknowledgment once it receives the RDPUDP_FLAG_CWR. On the other side, the sender will then ignore the set RDPUDP_FLAG_CN flags on subsequent acknowledgments from any receiver that has an snSourceAck ADM in the acknowledgment that is less than the previously remembered sequence number.

Additionally, the sender SHOULD set the RDPUDP_FLAG_CWR flag whenever a retransmit occurs due to the Retransmit Timer (section 3.1.6.1) firing to indicate that a datagram loss was detected, even if the RDPUDP_FLAG_CN flag was not set by the receiver. If the receiver is not setting the RDPUDP_FLAG_CN flag, no action is needed on receipt of the RDPUDP_FLAG_CWR flag.

The sender reacts to losses that take place every round-trip time (RTT) only. There could be multiple losses in an RTT, and the sender MUST NOT react to those events. This behavior is similar to the NewReno variants behavior, as described in [RFC3782].