UFTP - Encrypted UDP based FTP with multicast


UFTP is an encrypted multicast file transfer program, designed to securely, reliably, and efficiently transfer files to multiple receivers simultaneously. This is useful for distributing large files to a large number of receivers, and is especially useful for data distribution over a satellite link (with two way communication), where the inherent delay makes any TCP based communication highly inefficient. The multicast encryption scheme is based on TLS with extensions to allow multiple receivers to share a common key. UFTP also has the capability to communicate over disjoint networks separated by one or more firewalls (NAT traversal) and without full end-to-end multicast capability (multicast tunneling) through the use of a UFTP proxy server. These proxies also provide scalability by aggregating responses from a group of receivers.

UFTP has been used in the production process of The Wall Street Journal to send WSJ pages over satellite to their remote printing plants, and other users have used it to send to over 1000 receivers.


Protocol Summary

A UFTP session consists of 3 main phases: The Announce/Register phase, the File Transfer phase, and the Completion/Confirmation phase. The File Transfer phase additionally consists of the File Info phase and the Data Transfer phase for each file sent.

The Announce/Register phase sets up the multicast file transfer session and negotiates all encryption parameters. The server sends out an announcement over a public multicast address which the clients are expected to be listening on. All subsequent messages from the server go over a private multicast address specified in the announcement. Allowed clients send a registration to respond to the announcement. The server will then send either a confirmation message if encryption is disabled, or the encryption key for the session if encryption is enabled. If the client receives the encryption key, it sends an acknowledgment back to the server.

The File Transfer phase starts with the File Info phase for the first file to send. The server sends a message describing the file in question. Besides the name and size of the file, this message describes how the file will be broken down. A file is divided into a number of blocks, and these blocks are grouped into sections. A block is a piece of the file that is sent in a single packet. A section is a grouping of blocks that can be sent together before the server needs to request feedback from the clients. The total number of blocks and sections is included in this message.

Continuing the File Transfer phase is the Data Transfer phase for the first file. Data packets, each of which is a block, are sent by the server at a rate specified by the user. Because UDP does not guarantee that packets will arrive in order, each block is numbered so the client can properly reassemble the file. When the server finishes a section, it send a message to the clients requesting status. The clients then send back a status message containing the list of NAKs (negative acknowledgments) for the blocks in that section. Once all sections have been sent, if the server has received a non zero number of NAKs from any client, the server will begin a second pass of the data, this time only sending the packets that were NAKed. The server will continue with subsequent passes of the data until all clients have either received the file or have timed out while the server was waited for a status message. When a client has received the entire file, it sends a completion message in response to the next status request.

The File Info phase and the Data Transfer phase are then repeated for each file to be sent during the session

The Completion/Confirmation phase shuts down the session between the server and clients. It starts with a message from the server indicating the end of the session. The clients then respond with a completion message, and the server responds to each completion with a confirmation message.


Documentation

Protocol details
Server usage
Client usage
Proxy usage
Key management utility usage


Downloads

UFTP runs on Solaris, Linux, MacOSX/BSD, and Windows XP. Other UNIX-like operating systems and Windows Vista/7 should also work, possibly with minor tweaks. The source code is available in both .zip and .tar format, however the actual code is the same for both. Windows executables are also available, compiled on XP SP3 32-bit. In the interest of keeping a common code base, a side effect is that the Windows version of the client and proxy will leave a Command Prompt open. This can be worked around by using hidedos, a free utility created by LANDesk for this purpose, which is included in the distribution. Also included are instsrv and srvany (from the Windows Resource Kit) which can be used to run the client or proxy as a Windows service. See the enclosed readme file for details on using these utilities.

  Release Date Source - tar Source - ZIP Windows EXEs - ZIP
3.6.1 12/12/2011 uftp-3.6.1.tar MD5 uftp_src-3.6.1.zip MD5 uftp_exe-3.6.1.zip MD5
3.6 12/3/2011 uftp-3.6.tar MD5 uftp_src-3.6.zip MD5 uftp_exe-3.6.zip MD5
3.5.1 7/10/2011 uftp-3.5.1.tar MD5 uftp_src-3.5.1.zip MD5 uftp_exe-3.5.1.zip MD5
3.5 6/17/2011 uftp-3.5.tar MD5 uftp_src-3.5.zip MD5 uftp_exe-3.5.zip MD5
3.4.3 4/23/2011 uftp-3.4.3.tar MD5 uftp_src-3.4.3.zip MD5 uftp_exe-3.4.3.zip MD5
3.4.2 3/29/2011 uftp-3.4.2.tar MD5 uftp_src-3.4.2.zip MD5 uftp_exe-3.4.2.zip MD5
3.4.1 2/21/2011 uftp-3.4.1.tar MD5 uftp_src-3.4.1.zip MD5 uftp_exe-3.4.1.zip MD5
3.4 12/18/2010 uftp-3.4.tar MD5 uftp_src-3.4.zip MD5 uftp_exe-3.4.zip MD5
3.3.3 11/26/2010 uftp-3.3.3.tar MD5 uftp_src-3.3.3.zip MD5 uftp_exe-3.3.3.zip MD5
3.3.2 10/13/2010 uftp-3.3.2.tar MD5 uftp_src-3.3.2.zip MD5 uftp_exe-3.3.2.zip MD5
3.3.1 7/18/2010 uftp-3.3.1.tar MD5 uftp_src-3.3.1.zip MD5 uftp_exe-3.3.1.zip MD5
3.3 7/8/2010 uftp-3.3.tar MD5 uftp_src-3.3.zip MD5 uftp_exe-3.3.zip MD5
3.2.1 6/16/2010 uftp-3.2.1.tar MD5 uftp_src-3.2.1.zip MD5 uftp_exe-3.2.1.zip MD5
3.2 5/30/2010 uftp-3.2.tar MD5 uftp_src-3.2.zip MD5 uftp_exe-3.2.zip MD5
3.1 4/6/2010 uftp-3.1.tar MD5 uftp_src-3.1.zip MD5 uftp_exe-3.1.zip MD5
3.0 3/11/2010 uftp-3.0.tar MD5 uftp_src-3.0.zip MD5 uftp_exe-3.0.zip MD5
2.10.3 1/21/2010 uftp-2.10.3.tar MD5 uftp_src-2.10.3.zip MD5 uftp_exe-2.10.3.zip MD5
2.10.2 11/3/2009 uftp-2.10.2.tar MD5 uftp_src-2.10.2.zip MD5 uftp_exe-2.10.2.zip MD5

For the change history of UFTP, see the Changes.txt file.

Upgrading

In general, clients will be backward compatible with older severs, so when upgrading all clients should be upgraded before all servers. In particular, while the 3.x protocol is radically different from the 2.x protocol, the version 3.0 and later client speaks both the version 3.x and version 2.10 protocols to allow seamless upgrading between major versions.

Wireshark plugin

There is also a UFTP plugin available for Wireshark. For Windows users, a DLL is provided (built on Windows XP SP3 32-bit) which can simply be dropped into the {install directory}\Wireshark\plugins\{version} directory.

To complile from source, you should be familiar with how to build Wireshark. See the Wireshark developer's guide for details. Once you have the wireshark source and have successfully built it:

  Source - tar Source - ZIP Windows DLL - ZIP
0.0.2 uftp-wireshark-plugin-src-0.0.2.tar uftp-wireshark-plugin-src-0.0.2.zip uftp-wireshark-plugin-dll-0.0.2.zip
0.0.1 uftp-wireshark-plugin-src-0.0.1.tar uftp-wireshark-plugin-src-0.0.1.zip uftp-wireshark-plugin-dll-0.0.1.zip

UFTP is licensed under the GNU General Public License (GPL). Commercial licenses are also available if needed.

If you have any questions or comments regarding UFTP (including bug reports), wish to be notified of updates, or if you wish to discuss commercial licensing or support, you can email the developer, Dennis Bush.

UFTP has been on the web since 2001. There have been visitors to this site since February 2, 2005.

If you wish to make a donation, you may do so via PayPal by clicking the button below.
This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)
This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)

Last update: December 12, 2011