Once I heard @yangzhe1990 talking about TCP congestion avoidance algorithm.

I did the experiment myself today. The link is in IPv6. One end is me and the other end is a server locates at Portland using HE's IPv6 tunnel to gain IPv6 connectivity. Packet loss rate is about 3%~4%.

TCP Reno.

$ scp elivagar.ream.at:/home/windywinter/10mb.test .
10mb.test 100% 10MB 27.2KB/s 06:16

TCP BIC. This is optimized for high speed networks with high latency and used by default in Linux kernels 2.6.8 through 2.6.18.

$ scp elivagar.ream.at:/home/windywinter/10mb.test .
10mb.test 100% 10MB 28.9KB/s 05:54

TCP CUBIC. This is a less aggressive and more systematic derivative of BIC, and the default algorithm used by Linux kernels since version 2.6.19.

$ scp elivagar.ream.at:/home/windywinter/10mb.test .
10mb.test 100% 10MB 31.7KB/s 05:23

And TCP Hybla. Suggested by @yangzhe1990.


$ scp elivagar.ream.at:/home/windywinter/10mb.test .
10mb.test 100% 10MB 129.6KB/s 01:19