It might be that your TCP receive window size is not at its optimal value! Tuning it is the single most important thing towards optimizing your Internet connection settings.
Download registry files.
Broadband Internet Speed test.
So what is this TCP receive window size, why does it matter, and how can I
change it?
The TCP receive window is the amount of unacknowledged data between the sender
and the receiver. If the window size is set at 16KB, the sender waits
after sending 16KB, until the receiver has acknowledged that it has
received the data. Only then will the sender start transmitting data
again. If the transmission delay between the sender and the receiver
is very high, this will result in very slow throughput. Both sender
and receiver will spend most of the time waiting for data in transmission
between the hosts.
In order to improve throughput the window size needs to be set at a high
enough value, that will enable the sender to keep transmitting data at
all time. The TCP receive window is an upper bound on the amount of data that
will be allowed to be in the pipe between the sending and receiving host.
The actual window size varies throughout the session. The TCP protocol uses
something called slow start, meaning the sender will start sending
a small amount of data at first, until it receives an acknowledgement message
from the receiver. The sender will then try to send larger and larger chunks
of data, until the pipe between sender and receiver becomes full, at which
point the window size is made smaller, and data starts flowing again, and
the window size can be increased again. This cycle of expanding and shrinking
continues throughout the session to make sure the connection is working at
its maximum.
However, there's a hard limit of the window size! The receiver tells the sender
its maximum TCP receive window size, and this sets an upper bound of the connection,
regardless of the actual bandwidth available on the network.
Can I do anything about this, and how?
The most common direction for data to flow is from a remote host to your
computer. This makes the remote host the sender, and your computer the
receiver. Since it's the receiver that sets the upper bound for the throughput,
by its advertising the maximum TCP receive window size, any changes you make
on your end to the recieve window size will affect the throughput you see.
And yes, you can change this value on your computer!
In most cases, the link between you and your ISP is the slowest link of the
network, no matter what site on the Internet you are trying to reach. Therefore
any calculations that involve bandwidth values should use the specification
your ISP provides.
A lot of Internet sites, due to the global nature of the Internet, will be quite
far from where you are located. This will cause a long round-trip delay, that is
the time it takes for messages to travel from your computer to the remote
Internet site, and back to you.
So how big should the TCP receive window size be?
The calculation is simple:
receive window size = bandwidth * delay
While you were loading this page we tried to measure the round trip
delay from our server to your computer, but unfortunately we were not able
to do this. Therefore we will use the hypothetical value of 100 ms.
Let's say you have a WAN connection with a nominal 1544 kbps bandwidth available, and
the delay to the host you want to download from is 100 ms.
Using the algorithm above the TCP receive window size should be at least
1544000 bits/second * 0.1 seconds = 154400 bits = 19 KB
If you have a WAN connection with a nominal 10 Mbps bandwidth available, with
the same delay, the algorithm gives a TCP receive window size of at least
10 Mbps * 100 ms = 122 KB
Now, depending on your delay to our server, and of course the bandwidth you
have available, you may or may not get a reasonable figure using this
algorithm. If you have very high latency on your link you may get an
extremely large value. So are there any negative issues with a large window
size?
You might think that if everyone on the Internet pushed their window sizes
to 128 KB for instance, Bad Things will happen. The TCP algorithm is smarter
than that. The window size is only an upper bound. The sender slowly increases
the size of its transmit window. If packet loss is detected by the server it
uses that as an indication that the window size is too large, and reduces it.
The system is self adjusting, and setting the window size to a large value will
not have any negative affects on the network.
Setting the window size at a large value will not negatively affect connections
with low latency (small delay). Again, the slow start component of TCP will
make sure that the session is working at the maximum of either the bandwidth
available or the TCP receive window size, whatever limit is hit first.
The only negative affect is the memory allocation on your computer. This may
degrade performance on computers with low memory configuration. But RAM is
cheap, and on a system with 128 MB of memory or more, it's unlikely that there
will be a lack of resources with a larger TCP receive window size.