TCP window sizes

TCP window sizes during HTTP transfers

These figures show the evolution of window size during 100 HTTP transfers. The x-axis is the measurement number; the y-axis is the window size (the number of packets that arrived at the receiver) during each flight. The size of the first flight, labeled 1, is the initial congestion window.

(above) Apparently something drastic happened to network conditions after the first 50 measurements, possibly a path change., Or, we might have been redirected to a different server, since at the same time, the initial congestion window goes from 2 to 3 packets.

Prior to the switch, the first few rounds of slow start go pretty much according to plan, with some of the nondeterministic behavior I discuss in the paper. After the switch, slow start ends after the second flight and the system goes into congestion avoidance, pretty consistently adding one packet per flight.

(above) The first three rounds are mostly deterministic, with only a few substandard congestion windows. After three rounds the window levels off at 11 or 12 packets, probably due to buffer space at the sender. The spikes are caused by dropped packets, which can cause several windows of arrivals to be presented to the application at the same time. The window sizes are not multiples of the mss.

(above) Highly nondeterministic starting in the second flight. Window behavior after the third round is odd. It seems to be growing faster than congestion avoidance but slower than slow start. The congestion window never reaches the bdp, and there is no evidence of dropped packets. The initial congestion window is not a multiple of the mss, but all subsequent windows are.

(above) Canonical example of nondeterministic window behavior. Window sizes are not multiples of the mss.

(above) Mostly deterministic in the first two rounds; considerable variability in the third and fourth. Congestion window never reaches the bdp; in fact, the fifth round gets truncated by the end of the transfer. All windows are multiples of the mss.

(above) Nondeterminism starts in the third round. Congestion window level off at 10-12, probably due to buffer space at the sender. The icw is not a multiple of the mss; subsequent windows are.

(above) One of the more deterministic of the bunch, which is also one of the two with the lowest bottleneck bandwidth. After four rounds, most transfers are self-clocking at the bottleneck bandwidth, which is about 15 packets per rtt. All windows are multiples of the mss.

(above) He's dead, Jim.

Almost perfectly deterministic. All windows are multiples of the rtt.

(above) Initial congestion window varies, which is a little odd. After the first round, most transfers enter congestion avoidance; all subsequent windows are 1-5 packets. Some transfers are self-clocking.

(above) First three rounds are almost entirely deterministic. Again, this is one of the low-bandwidth connections. Windows are multiples of mss.

(above) Some nondeterminism, even in the first round. The icw is not a multiple of mss, but subsequent windows are. After the fourth round, the window seems to settle gradually toward 11 packets. The buffer at the sender apparently has to be bigger than that, so it is not clear why the transfer rate is so limited. The icw is 2.229 packets; subsequent windows are multiples of mss.

(above) Mostly slow start, with lots of nondeterminism; a few transfers drop into congestion avoidance early. The congestion window never reaches the bdp. All windows are multiples of mss.

(above) Slightly nondeterministic in the second round; very nondeterministic thereafter. All windows are multiples of the mss.