I have not investigated UDT in detail. My sense is that it is pretty much like TCP but assumes that the bottleneck is actually a fixed rate link, rather than one with significant variability in the capacity-per-flow available.
I don't think it uses the "biggest gun" that can improve things when the end-to-end latency gets long: non-ordered delivery acknowledgement coupled with Fountain Codes (or some other rateless erasure code).
For file transfer (where the only goal is complete delivery of the entire file), sending every file block independently and using rateless erasure coding to ensure that any sufficiently large subset of the packets will give the contents of the file, one can allow the bottleneck link to use packet drops to signal congestion, while not requiring sequential retransmission.
So if I were starting with fq_codel in the network, I would use a rate-controlled UDP with Fountain Coding on the file contents, per-file-block acknowledgment (using a run-length-coded bitstring for blocks correctly received), and a rate-controller that uses the number of blocks received vs. blocks sent to detect drops due to buffer overflow to set window size to limit the number of blocks in transit.
That would maximize FTP, while still allowing "mice" and "ants" and other FTPs to get great, low-latency, service.
-----Original Message-----
From: "Dave Taht" <dave.taht@gmail.com>
Sent: Friday, February 22, 2013 11:48am
To: cerowrt-devel@lists.bufferbloat.net, "bloat" <bloat@lists.bufferbloat.net>
Subject: [Cerowrt-devel] Fwd: High Speed WAN Rsync now possible via UDT
Since we are essentially observing "wan" latencies anyway I am curious as to how the UDT protocol functions... has anyone tried it?
If useful (or scary) I'll try to find the time to package it up for cero.
I liked how mosh solved the terminal emulation problem over lousy links (in fact, reflecting on it, had it existed in 1998 when I was mucking with the strip protocol, I'd have not bothered with getting tcp to work at all. :) ) I also get a kick out of people using ssh to "authenticate" and then dropping to something else....