TRON: A General Purpose Protocol Stack

Cornell University, Summer 1999

Contents


Obligatory Warning

Use this at your own risk. This code was created with no bad intent or malicious purpose in mind. However, author(s) assume no responsibility for it's use, misuse, or anything that may go wrong in using it or defects within it, etc, etc.

General Overview

The Tron library is designed to be a general purpose protocol stack. In its current form, it provides a sockets-based network layer, a network simulation layer, a simple debugging layer, and a probabilistic broadcast layer based on pbcast (See the Recommended Reading). A protocl stack provides a simple way of putting together simple network protocols to provide a powerful network layer, all the while maintaining the simple interface of the protocol stack. For example, an application can use a protocol stack with a network layer and pbcast layer. It can then add a "compression layer" at a later point and all packets would be "compressed" without having to change a thing. The application sends through the top of the protocol stack and receives in a "Deliver" callback. The protocol stack provides a convenient interface and the layers provide services.

The Tron library is a programming tool. Although the layers it currently provides can be used to solve many networking and reliability problems, the framework that it provides is far more useful. It is quite simple to make new layers and stack them together to solve almost any problem. The tron distribution contains the entire tron library, as well as three example programs. The bcast program can be used to test whether directed broadcast is working on a network, but it is also an example of using the protocol stack with only the network layer. The trontest application is another example of using the protocol stack and uses the pbcast and debug layers as well. Finally, the tronsim application uses the simulation layer instead of the network layer, and shows that to an application that makes correct use of the protocol stack interface, whether or not data is sent on a simulated or actual network does not matter.

Tron was created as an M.Eng project. Its name is from the tron command (tron, troff), or perhaps a certain Disney movie that inspired many to become computer science students. The name really has nothing to do with protocol stacks or building reliable network applications.

Installation and Use

Building the Tron Files

Installation should be quite simple. Use Winzip(tm) or a similar program to unzip the files into a directory, being sure to maintain the directory structure. I have provided Microsoft Visual Studio 6.0 (tm) project workspaces for all of the projects (bcast, mcast, tron, trontest, tronsim). The tron workspace builds a tron.lib file which should be created before the bcast, tronsim, and trontest applications can be built. See the individual project documentation for how to use the applications.

Creating New Applications Using Tron

Creating a new application that uses the tron.lib library requires the following settings in a Visual Studio 6.0 project file (Under Project->Settings):

*Note that the above settings have to be set for both the Debug and Release settings and differ where obvious. The trondist directory should be the directory in which the trondist.zip file was unzipped into.

New layer types (cLayer class) can either be added to the tron.lib by adding them into the tron workspace, or created in the new applications workspace.

Known Issues

The largest known issue with this release is that it may not work properly! Due to either a problem with the local network, or a flaw in the network code (the latter being more likely), the applications that perform multicast experience large interruptions in the receiving stream of packets. It was determined that this occurs somewhere below the network layer. The observed behavior is an arrival stream of packets with no loss or out of order delivery followed by an occasional loss of between 50-150 packets at a time. These are packets that are never received by the multicast listeners, but do appear on the sender's loopback. This causes the pbcast layer to break down, since it can handle loss of a given percentage of packets, but not the loss of a large amount of 100 or so at a time. It is unable to catch up and correctly reports a sequence gap in the delivery stream. If someone were to figure out what is wrong then please email tjb13@cornell.edu. Thanks!

Recommended Reading

  • A Gossip Style Failure Detection Service, Robert van Renesse, Yaron Minsky, and Mark Hayden.
  • Probabilistic Broadcast, Mark Hayden and Ken Birman
  • Bimodal Multicast, Kenneth P. Birman, Mark Hayden, Oznur Ozkasap, Zhen Xiao, Mihai Budiu, Yaron Minsky

    Acknowledgments

    Special thanks to Werner Vogels for being my project advisor and lending me time and resources. Thanks also to Dan Dumitriu for all of his help and discussion, and to Robert van Renesse for his assistance. Finally, thanks to all who have worked on probabilistic broadcast and similar ideas. Oh, and thanks Anu whether you know it or not (how would Anu solve this?).

    Website created by: Ted Bonkenburg (
    tjb13@cornell.edu )