I am a newbie network engineer.

I did a small experiment with iperf3. But I run into a small problem.

(1) My question.

I think TCP flow do not act properly despite of its congestion control.

The flow decrease its rate due to congestion ( flow rate > link bandwidth).

However its cwnd is increasing continuously.

How can it happen?

(2) The experiment environment

  • Ubuntu 14.04

  • Mininet 2.3.0d5


  • Linux TC at kernel version 4.4.0-148-generic

    : Set all link bandwidth 100Mbps with proper MTU size

(3) The contents of experiment

I generated a flow having 130Mbps rate, from H2 to H1.

Due to the link bandwidth 100Mbps,

It has to decrease its rate from 130Mbps to 100Mbps due to its congestion algorithm

I observed this decrease and the congestion algorithm.

a. server : iperf3 -s -p 1212 -f m -A 7 -i 1
b. client : iperf3 -c -p 1212 -t 10 -f m -b 130M -A 7 -l 63k -w 10M -i 1

Connecting to host, port 1212
[  4] local port 42010 connected to port 1212
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  14.0 MBytes   118 Mbits/sec    0    570 KBytes       
[  4]   1.00-2.00   sec  15.5 MBytes   130 Mbits/sec    0   1.13 MBytes       
[  4]   2.00-3.00   sec  15.5 MBytes   130 Mbits/sec    0   1.69 MBytes       
[  4]   3.00-4.00   sec  12.7 MBytes   106 Mbits/sec    0   2.27 MBytes       
[  4]   4.00-5.00   sec  11.3 MBytes  95.0 Mbits/sec    0   2.84 MBytes       
[  4]   5.00-6.00   sec  11.4 MBytes  95.5 Mbits/sec    0   3.41 MBytes       
[  4]   6.00-7.00   sec  11.4 MBytes  95.4 Mbits/sec    0   3.98 MBytes       
[  4]   7.00-8.00   sec  11.3 MBytes  95.0 Mbits/sec    0   4.55 MBytes       
[  4]   8.00-9.00   sec  11.4 MBytes  95.3 Mbits/sec    0   5.12 MBytes        

(4) My question in detail.

  • Due to its bandwidth ( 100Mbps ), I think the flow will experience a congestion and decrease its cwnd.

  • But it didn't. the cwnd of the flow is increasing continuously.

  • Furthermore, although it didn't decrease its cwnd, it decreased its rate. How can it happen? There is no re-transmission.

Could you give me a litte hint for understanding this weird thing?

Thank you for reading!

  • 1
    Your idea of congestion is not quite right. Congestion happens out on the network, not within the source host. The host does not drop packets due to congestion, so you really are not losing packets. If you want to mimic congestion, have one link to the switch be 1 Gbps, and the other link be 100 Mbps, then send 1 Gbps to the 100 Mbps. That will mimic network congestion.
    – Ron Maupin
    Commented Aug 11, 2019 at 13:12
  • @RonMaupin I really thank you for your comments. I understand. I follow your advice right now. Thank you again!
    – nimdrak
    Commented Aug 11, 2019 at 23:20

1 Answer 1


I found an answer.

It is not weird behavior. I'm just short in understanding.

Before the congestion occur, the transmitted packets are queuing in the switch buffer.

As the number of packets in the buffer is increasing, the RTT value is also increasing.

Therefore, the flow's rate looks constant although the cwnd value is increasing.

However a overflow in the buffer will occur when the cwnd value is larger and the packets are transmitted enough to be queuing in the buffer.

Then we can see the re-transmission, packet loss and tcp congestion state transition.

  • I thought you're not seeing congestion because the host's NIC cannot physically put more than 100 Mbps onto the wire so hence it would just back pressure upwards and slow down the socket send call? Commented Oct 28, 2022 at 2:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.