
https://en.wikipedia.org/wiki/UDP-based_Data_Transfer_Protocol
UDT began in 2001 as a successful attempt to overcome TCP protocol overhead problems, especially over high speed networks. UDT is built on top of User Datagram Protocol (UDP), adding congestion control and reliability control mechanisms. UDT is an application level, connection oriented, duplex protocol that supports both reliable data streaming and partial reliable messaging. In October, 2003, the NCDM achieved a 6.8 gigabits per second transfer from Chicago, United States to Amsterdam, Netherlands. During the 30-minute test they transmitted approximately 1.4 terabytes of data. Initially, UDT was a UDP stream + a TCP control stream, later, TCP stream was removed, with control messages sent over the UDP data stream. In UDT3 (2006), congestion control was improved to support "normal internet" UDT connections (improved low bandwidth support), and significant reduction in CPU and RAM needs. UDT4 is designed to support concurrent UDT streams (through the same port) and firewall traversing (rendezvous/ hole punching). UDT uses periodic ACKs and NACKs - reducing traffic control traffic (so ACKS are proportional to time, not to xfer volume). AIMD with decreasing increase UDT uses an AIMD (additive increase multiplicative decrease) style congestion control algorithm. The increase parameter is inversely proportional to the available bandwidth (estimated using the packet pair technique), thus UDT can probe high bandwidth rapidly and can slow down for better stability when it approaches maximum bandwidth. The decrease factor is a random number between 1/8 and 1/2. This helps reduce the negative impact of loss synchronization. In UDT, packet transmission is limited by both rate control and window control. The sending rate is updated by the AIMD algorithm described above. The congestion window, as a secondary control mechanism, is set according to the data arrival rate on the receiver side.