A network controls congestion by monitoring how well packets are actually being received at their respective dataflow destinations. The destination nodes are outfitted with a monitor that returns an acknowledgement (ACK) datapacket to the source node for each reception. The return ACK datapackets are marked according to whether congestion was encountered in the delivery to the destination. If so, a rate limiter at the source node is signaled to slow down the data injection rate. If not, the rate limiter is signaled to dial up the injection rate. Several dataflows can be independently and simultaneously controlled this way.