TCP Congestion – Why TCP cwnd Increases During Congestion

congestioniperflinuxtcp

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

    : [TOPOLOGY] HOST1 -SWITCH1 – HOST2

  • 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 10.0.0.1 -p 1212 -t 10 -f m -b 130M -A 7 -l 63k -w 10M -i 1

Connecting to host 10.0.0.1, port 1212
[  4] local 10.0.0.2 port 42010 connected to 10.0.0.1 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!

Best Answer

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.