Frequent Asked Questions

1. What is UDT?
2. Who developed UDT?
3. Why do I need UDT?
4. My application uses UDT, can I run it over a traditional low bandwidth network, or even on the public Internet?
5. Why can't I reach the expected high throughput with Gigabit NIC?
6. Can you give me some hints in tuning the performance?
7. I use UDT for file transfer, but it seems significantly slower than memory-memory transfer. Why?
8. When I run the example applications, it prompts for missing library error. What happens?
9. Does UDT care about the byte order conversion between different platforms?
10. Why can't the UDT connection be set up? Why listen or connect call fails?
11. Is the UDT connection secure?
12. Why does my application often have packet loss even though the throughput is much lower than the available bandwidth?
13. Is UDT TCP friendly?
14. What copyright and license issues shall I be aware of when using UDT?
15. Is UDT only suitable for bulk data?
16. What's the relationship between UDT and SABUL?
17. Where can I find help regarding to the use of UDT library?
18. What background knowledge is necessary in order to use UDT?


1. What is UDT?

UDT stands for UDP-based Data Transfer. It can refer to both the UDT protocol and its implementation (the UDT library). Basically, UDT is built on top of UDP by adding reliability control and congestion control.

2. Who developed UDT?

UDT is a research product of the National Center for Data Mining (NCDM) at the University of Illinois at Chicago. The project was supported in part by US National Science Foundation, US Department of Energy, and US Army.

3. Why and when do I need UDT?

The original (and major) purpose of UDT is to provide a high performance transfer interface to distributed data intensive applications over a wide area network, where TCP seldom works well for efficiency and fairness reasons. It can also be used in other situation where TCP is not suitable (e.g., multimedia streaming, firewall punching, partial reliability, etc.)

There is no explicit standard to determine when to use UDT or when not to. Generally speaking, if you are not satisfied with TCP's performance or functionality, UDT is probably what you need, especially in high speed networks where a small number of bulk sources share the abundant bandwidth.

4. My application uses UDT, can I run it over a traditional low bandwidth network, or even on the public Internet?

Yes, you can do it. But please be aware that your application may use a large amount of bandwidth and may be regarded as attack or improper use of network by ISPs and firewalls. In addition, UDT's impact on the Internet is not comprehensively tested yet.

5. Why can't I reach the announced high throughput with my Gigabit NIC?

There are many factors that can affect the throughput, especially for Gigabit NICs.

First of all, you need to test it using some other benchmark tools like IPerf. They will give you the highest performance for the current configuration. If UDT has similar performance, then it is all right, and you need to tune your network settings.

If UDT's performance is much lower than the performance obtained from the benchmark, try to modify the UDT options.

Finally, your applications affect the transfer speed. Any data intensive applications can cost substantial CPU time in computing and memory replication, which will affect UDT's performance. Try to test the throughput with the example applications in the UDT SDK.

6. Can you give me some hints in tuning the performance?

Please read the Configuration section of the UDT Tutorial for the answer. The default UDT parameter are set for high speed networks. If your network bandwidth is siginicantly slower (<< 1Gb/s), you may set smaller buffer sizes.

7. I use UDT for file transfer, but it seems significantly slower than memory-memory transfer. Why?

Performance of file transfer is often limited by the bottleneck speed of disk IO. Besides, disk IO is often bursting and cause difficulties for the congestion control of transport protocols. UDT has been thoroughly tested for the disk-disk transfer scenario. Try to use some benchmark software to test your disk performance.

8. When I run the example applications, it prompts for missing library error. What happens?

You forget to set the system environment of library path. On Linux/BSD/UNIX, use "export" or "setenv" to configure the LD_LIBRARY_PATH environment variable so that it contains the directory having the libudt.so file. On Windows, copy udt.dll file to the same directory containing you UDT applications (this usually also works for Linux/BSD/UNIX by copying libudt.so to the current working directory).

9. Does UDT care about the byte order conversion between different platforms?

No, the application should care about the conversion itself. However, UDT does work between different platforms even with different byte orders.

10. Why the UDT connection cannot be set up? Why does the listen or connect call fail?

The most likely reason is that one of the machines is behind a firewall. You can change the firewall settings if you have the privilege or do something in the UDT program to bypass the firewall. Note that UDT has same semantics as TCP and generates UDP traffic in both directions. UDT4 also provides rendezvous connection setup in order to punch firewalls.

Another reason is that at least one of the server or client sides has multiple addresses, and UDT is bound to an address different from what you use in the application. To solve the problem, explicitly set the IP address in bind call.

There can be other reasons, such as domain name lookup failure. Try to use an explicit IP address if possible.

11. Is UDT connection secure?

No. If you need a secure connection, you should add other mechanisms on the top of UDT in your application.

12. Why does my application often have packet loss even the throughput is much lower than the available bandwidth?

There may be many reasons for packet loss, such as network congestion and hardware failure. Try to use some other benchmark or network test tools first to check the network. Improper setting of UDT parameters may also cause similar problem. Set UDP_RCVBUF as large as UDT_RCVBUF.

13. Is UDT TCP friendly?

TCP friendliness is an obscure concept. Please refer to UDT technical reports for detailed information on the competition between UDT flows and TCP flows.

14. What copyright and license issues shall I be aware of when using UDT?

UDT version 4 is released under BSD license. You may find a copy of the license within the UDT release. Previous UDT versions were released under Lesser GPL (LGPL).

15. Is UDT only suitable for bulk data?

No, UDT can transfer a data buffer from one single byte to multiple tera-bytes, as long as your system can provide enough resources. However, UDT is indeed optimized for bulk data, and it may not have any better performance for message signaling applications.

16. What's the relationship between UDT and SABUL?

UDT is the successor of SABUL. It removes the TCP connection from SABUL and enhances the congestion/flow control.

17. Where can I find help regarding to the use of UDT library?

If you cannot find answers in this documentation, please go to the UDT home at sourceforge.net and post your questions. In order to help more users easily find answers about UDT usage and help increase the activity of this project, please post all general questions to the souceforge forum or send them to the sourceforge mailing list. The forum and the mailing list are monitored by the UDT developers and your questions will be replied as soon as possible.

18. What background knowledge is necessary in order to use UDT?

Knowledge on socket programming and C++ is necessary. Knowledge on TCP is a plus.