Are we still limited by TCP Window Size when we want to fully utilize bandwidth from far away servers? [closed]

TCP uses window size and it's built-in ramp-up process, and increasing the window size is the first step to send bigger packets on the same path and thus have bigger and more packets "on-the-wire" and not having to wait for them to be received and then acknowledged. Another way to not have to worry about the ramp-up and other TCP mechanisms is to tunnel your traffic over a more effective protocol like UDP (as long as you don't suffer from transmission errors like drops etc), and therefor optimize the traffic by using a tunnel that is already running "optimally" with full performance and no handshaking needed.

In Linux you can increase the memory for the send buffers, start by looking at net.core.rmem_max/wmem. It could be worth to look at other guides around performance optimisation, if you are indeed running Linux: Sane value for net.ipv4.tcp_max_syn_backlog in sysctl.conf or search for "tune linux for high latency connections".

I don't have much experience with windows, so if that is what you are using then you are on your own, but I assume there are loads of information regarding the network stack optimisation there as well, I just can't point to them.


The default TCP Window Size maximum is 64 kilobytes. However, it was realised long time ago that it is insufficient for today's networking requirements.

Therefore TCP Window Scaling was invented and documented in RFC 1323. It specifies a scaling factor starting from 1 and ending up to 16384. This means that maximum effective TCP Window Size can be 16384 * 65535 bytes = 1,073,725,440 bytes, that is, one gigabyte.

The actual window scaling factor is determined in the TCP handshake, and the scaling factor is used through the connection.

You can use WireShark to examine what is the true TCP Window Size in your TCP connections.