Enterprise Networking Week 3

Spring 2023, Mondays 4:15-6:45 in Crown 105

February 7



Issues with implausible values of cwnd for


What about ethtool -K r-eth1 lro off, and ethtool -K r-eth1 gro off?

Graphing: gnuplot is available everywhere.

gnuplot> plot "3reno.out" with lines

Watch those quotation marks around the file name! They are essential.

Windows: put the gnuplot directory into your %PATH%.

Cubic example

What does TCP Cubic actually do?

Review the cwnd-increment strategy

Let's look at two Reno-Cubic scenarios.

For Reno, if W is the current window size, then the per-ACK increment to W is 1/W (so after a full window, we increment by 1)

For Cubic, the per-ACK increment is 𝚫W = W(t+𝚫t) - W(t) ≃ dW/dt 𝚫t, where 𝚫t is the time since the last ACK, which is generally the time it takes to send one packet on the bottleneck link.

Assumptions: RTT=50 ms

Scenario 1: bottleneck bandwidth is 1 packet/ms (12 mbit)

bdp (bandwidth-delay product) = 50 packets

Assume queue = 50, so Wmax = 100

Reno: W increases by 1/100 every ms at the right edge of the tooth, by 1/50 every ms at the left edge

Cubic: W(t) = C×(t−K)3 + Wmax        K = (Wmax/2)1/3  = time between losses.

Recall 𝚫W = dW/dt 𝚫t.

𝚫t = 1 ms (time between packets), dW/dt = 3C(t-K)². 3C = 1.2. Max value at left edge of the tooth is 1.2K²

K here is about 3.7. Call it 4, which makes 1.2K² = 20.

Then 𝚫W, per packet, is about 20*(1/1000) = 1/50. Window increase is exactly the same as Reno

Scenario 2: bottleneck bandwidth is 100 packets/ms.

For Reno, bdp = 5000 packets. Assume queue = 3000, so Wmax = 8000.

Reno window increase per packet ranges between 1/4000 and 1/8000. (0.00025 to 0.000125)

Cubic: K = cuberoot(4000) ≃ 16

𝚫W = 1.2K² 𝚫t ≃ 300 𝚫t, where 𝚫t = time between ACKs = 0.01 ms = 0.00001 sec.

So 𝚫W ≃ 300/100,000 = 3/1000 = 0.003, 12x larger at left edge of tooth


Theory of competition

Theory of Reno-Reno competition

Mininet Reno-Cubic competition