The maximum speed that I could possibly download data from the USA via FTP or HTTP is a little over 200kbytes/second.
Both HTTP and FTP are based on the TCP/IP protocol, which provides a reliable stream of data between two points. One of the reliablity mechanisms built into TCP is that a receiver will tell the sender when it has received a chunk of data. If the sender doesn’t get this acknowledgement, it resends the data.
Because of the way that TCP packets are structured, one computer can send up to 64k bytes of data to another without acknowledgement. When the sender has received an acknowledgement for some or all of that 64k, it can send some more data, but not before.
From here in Sydney, the round-trip time to servers in the USA, as reported by ping, is 300 milliseconds, give or take. Some of this – 60 or 70 milliseconds – is due to the speed of light. The rest of it is due to the the routers and switches between here and there.
Therefore, a TCP connection between my server and one of those in the USA can transmit at most 64kbytes per 300 milliseconds, or 213 kbytes per second. If I wanted to receive data any faster than this I would need to look at multiple TCP connections, or a different protocol altogether.
In reality, the fastest connection I have ever had to the USA was about 150kbytes/second. In contrast, I’ve been able to download at 500 kbytes/second from local servers.
Comments
Actually, there are some TCP extensions that are widely implemented (IIRC) that get around this limitation; the window scale option, and selective acknowledgement are both techniques that eliminate tihs maximum speed bump for "Long, Fat Pipes". Check out RFC 1323 and RFC 2018 for all the skinny.
Thanks for the pointers to the RFCs, Rob.
Here are URLs for the RFC.
RFC 1323: http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1323.html
RFC 2018: http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2018.html