TCP Throughput Calculator
One of the challenges we face in satellite communications networks is latency. Because of the inherent latecny of going to and from a geostationary satellite we immediately incur a 550ms latency penality. We can't change this, this is physics. So then we put up that super high speed satellite link, but are unpleasantly surprised to see relatively slow file transfers across this high speed, long distance link -- Bummer! Before you call tech support, let's do a quick calculation of what you should can realistically expect in terms of TCP throughput from one host to anotehr over this long distance link.
When using TCP to transfer data, the two most important factors are the TCP window size and the round trip latency. If you know TCP window size and the end to end latency, you can quickly calculate the maximium possible data transfer throughput between two hosts regardless of how much bandwidth you have.
Calculate TCP Throughput
Formula to Calculate TCP Throughput
TCP Window Size in Bits / Latency in Seconds = Bits Per Second throughput
Let's work through the example using the default values in the form above. We have a 100 MBPS satellite link from Antarctica to the New York City. If we try to transfer a large file from a server in New York to a server in Antarctica, what is the best throughput we can expect?
First we weill convert the TCP window size from bytes to bits. In this case, we are using the standard 64KB TCP window size of a Windows machine. 64KB = 65536 Bytes. 65536 * 8 = 524288 bits. Next, we take the TCP window in bits and divide it by the round trip latency of our link in seconds. Our latency is the satellite round trip latency plus any coding delay, so if our combined latency 750 ms, we will use 0.750 in our calculation.
524288 bits/ 0.750 seconds = 699,050 bits per second throughput = 699 Kbps maximum possible throughput. So although we may have a 100 MBPS these two sites, we should not expect more than 699 Kbps when transfering files between two servers given the window size and and latency.
Making it faster
What can we do to make it faster? Increase the TCP window size and/or reduce latency.
We can increase the TCP window size using a WAN accelerator at each end that uses a larger TCP window and other TCP optimizations such as TCP selective acknowledgements just between the accelerators on each end of the link, and does not requre any special tuning or extra memorty on the servers. The accelerators may also be able to employ Layer 7 application specific optimizations to reduce round trips required by the application.
We can reduce the latency by changing the coding algorithm we are using, and also again placing a WAN accelerator at each end that locally acknowledges the TCP segments to the local server, thereby fooling the servers into seeing very low LAN like latency for teh TCP data transfers. Because the local server is seeing very fast local acknowledgments, rather than waiting for the far end server to acknowledge, is the very reason we do not need to adjust the TCP window size.