Frequently Asked Question (FAQ) [out-of-date - see FAQ that comes with JM]

1. General
1.1. What's Jungle Monkey?
1.2. Where do I send questions, comments, bug reports?
1.3. What's Monkey Central?
1.4. What makes a channel a "root" channel?
1.5. I just added a file and it took my friend a long time to see it. Why is this?
1.6. Why's my domain name or IP address wrong?
1.7. How does JM work with NAT/IP Masquerading/Firewalls?
1.8. How do I limit the number of connections?
1.9. Will there be a Windows port?
1.10. Why is it called "Jungle Monkey"?
1.11. What's the name of the Wonder Twin's monkey?
2. Technology
2.1. How does Jungle Monkey work?
2.2. What is end-to-end multicast?
2.3. Why don't you use IP Multicast?
2.4. Why not use IPv6 Multicast?
2.5. How does searching work?
2.6. How do I limit the amount of bandwidth that Jungle Monkey can use?
3. Jungle Monkey and other file transfer programs
3.1. What's the difference between JM and FTP?
3.2. What's the difference between JM and Hotline?
3.3. What's the difference between JM and Napster?
3.4. What's the difference between JM and iMesh or CuteMX?
3.5. What's the difference between JM and Gnutella?
3.6. What's the difference between JM and Freenet?
3.7. What's the difference between JM and ___?
4. Developers
4.1. I'd like write my own version of Jungle Monkey, where is the protocol documented?
4.2. How can I help?
4.3. How do I get the repository version of Jungle Monkey?
4.4. What do the numbers X, Y, and Z mean in "Jungle Monkey X.Y.Z"?

1. General

1.1. What's Jungle Monkey?

Jungle Monkey (JM) is a distributed file sharing program. You join channels where people offer files for download. You can offer your own files and create your own channels as well. Once you download a file, others can connect to you to get that file. You can also search for files.

Jungle Monkey is part of a research project at the EECS Department. of the University of Michigan. We're looking at End-to-End Multicast and other multicast issues (see below for more information).

1.2. Where do I send questions, comments, bug reports?

You can send them to the Jungle Monkey mailing list. Click here to goto the mailing list page.

1.3. What's Monkey Central?

Monkey Central is the main channel. When you start Jungle Monkey, it connects to Monkey Central to receive announcements for other channels.

If you do not want to connect to Monkey Central when you begin, specify the URL of another channel on the command line when you start JM (do 'jm --help for more information').

If Monkey Central is down, then you will not be able to get a new listing of channels. If you are running the GNOME version of Jungle Monkey, then you can bookmark your favorite channels.

1.4. What makes a channel a "root" channel?

A root channel is a channel that's not advertised on any other channel. Monkey Central is a root channel. You can create a root channel by right clicking and selecting "Create root channel". If you want other people to be able to join it, you will need to give them URL (then they can use "Join Channel" to join it).

In the future, you will be able to more easily link channels to other channels (ie, advertise channels in more than one place).

NoteNOTE
 

One can NOT add files to a root channel, only channels and folders are allowed. You should recieve and error message if you try to do this.

1.5. I just added a file and it took my friend a long time to see it. Why is this?

When you add a file (or directory or channel), an advertisement is sent to the channel its on. After that, advertisements are sent about once every 10 seconds. If your friend joins the channel after the first announcement is sent, he may have to wait a bit before seeing the advertisement.

1.6. Why's my domain name or IP address wrong?

If JM cannot properly determine your domain name or IP address, try using the --hostname, --interface, and/or --no-hostname options.

If you have the Gnome version, use the network configuration option in the Preferences window. Unfortunately, if you mess up the configuration or the configuration isn't right from the start, you will need to use the command line options. This will be fixed soon.

1.7. How does JM work with NAT/IP Masquerading/Firewalls?

If your network uses NAT, IP Masquerading, or a Firewall and you get a "Bad Internet Interface" error, you will need to manually set your address to your address on the LAN and your hostname to the address or name of the NAT box. If you have the GTK version, use the --interface and --hostname command line options. If you have the Gnome version, go to Setting->Preferences->Network and set this there. Once you have done this, configure your NAT box to allow connections to port 5660 to go to you.

1.8. How do I limit the number of connections?

You can't do that yet. We've done some simulations that suggest the number is small. However, we do not yet have any empirical data to back this.

1.9. Will there be a Windows port?

Maybe. Once we've ported the network library (GNet) to Windows, we'll see what it would take to port the rest of Jungle Monkey. Work would begin only after a stable release of Jungle Monkey for UNIX.

1.10. Why is it called "Jungle Monkey"?

We wanted to name the program after an animal and Jungle Monkey was the most distributed (as in "distributed system") animal we could think of.

1.11. What's the name of the Wonder Twin's monkey?

Gleek. (And Zan and Jayna were the names of the Wonder Twins.) See http://fantasia.ncsa.uiuc.edu/Doug/superhtml/gleek.html

2. Technology

(The explainations are written for the average user. If you would like a more in-depth answer, please email us. )

2.1. How does Jungle Monkey work?

Jungle Monkey is built upon multicast. Multicast lets you send one thing to many computers at once. Computers join a "multicast group" and can then send to or receive from that group. The alternative is to use unicast, which lets you send one thing to one computer. However, if you needed to send something to multiple computers you would need to send it multiple times.

A channel in Jungle Monkey is a multicast group. People send announcements for stuff they have to the group. Announcements are sent periodly, so it may take a while before you see announcements for a channel you just joined.

When you download a file, you actually join another multicast group which is used to find the closest computer with that file. When you offer a file for download, you become the coordinator for the multicast group computers join to get the file.

The variant of multicast Jungle Monkey uses is called end-to-end multicast.

2.2. What is end-to-end multicast?

The variant of multicast Jungle Monkey uses is end-to-end multicast (as opposed to IP Multicast or IPv6 Multicast - see below). End-to-end multicast organizes a bunch of computers together in a tree so that they can share data efficiently.

An end-to-end multicast tree is similar to telephone tree. A telephone tree is a tree of people with phone numbers used to distribute information. For example, I might be organizing a party and distribute a telephone tree to my friends. The telephone tree may say if David calls Alice and Bob, Alice should call Carl and Dana and Bob should call Elijah and Fred, then Carl should call Gary and Hilda, and so on. Each person is responsible for calling two people so that in the end, everyone who is in the telephone tree wil receive the information and everyone had to call at most 2 people.

End-to-end multicast is not like a telephone tree in that the tree is self-organizing. The means that when you join the group, your computer finds the closest computer and makes that computer your parent in the tree. Also, other computers may make your computer their parent.

There are different variants of end-to-end multicast. The protocol Jungle Monkey uses is called the "Banana Tree Protocol".

2.3. Why don't you use IP Multicast?

IP Multicast is an extension of the Internet Protocol, the protocol that make the Internet work. It supports multicast at a low-level protocol and is, in theory, more efficient than End-to-End Multicast. However, IP Multicast is not widely available. In fact, the original version of Jungle Monkey used IP Multicast, but we abondoned it because we couldn't find any users who had it.

2.4. Why not use IPv6 Multicast?

IPv6, the next generation of the Internet Protocol, supports multicast. We will consider using it once IPv6 is more widely used, but don't hold your breathe.

2.5. How does searching work?

The Jungle Monkey search server uses the same backend as the Jungle Monkey program. Whenever it receives an announcement of a new channel, it joins that channel. Whenever it receives an announcement for a file, it add that file to a list. The server may also announce its address on the Jungle Monkey root channel.

When you search for a file, you choose a search server and connect to it. You send it a string, and returns a list of files that match that string.

The source code distribution comes with an extra program called 'jmsearchclient'. This is a command line JM client. Be warned, it might not work.

2.6. How do I limit the amount of bandwidth that Jungle Monkey can use?

The end host cannot currently limit the amount of bandwidth used or number of connections made. Jungle Monkey uses TCP, so the congestion control mechanisms that most TCP implemenations use should be sufficient to avoid congesting the network.

Also, if you are a network administrator, there is something else you can do to lower the bandwidth used by JM. When file transfers are made, the ToS bits on the packets are set to IPTOS_LOWCOST. Network administrators may be able to set queueing policies based on this so that file transfers receive a lower priority than other network traffic. (If you know how to do this or have a reference on how to do this, please send it to me so that I can include this information.)

3. Jungle Monkey and other file transfer programs

3.1. What's the difference between JM and FTP?

FTP is the classic file transfer protocol/program. You connect to an FTP server with an FTP client and download or upload files. Archie is the classic FTP searching tool. Nowdays you can search for files using any search engine. The FTP protocol is well documented and has hundreds of implementations.

Jungle Monkey is not client-server based. The JM protocols are not well documented and there is only one implementation.

3.2. What's the difference between JM and Hotline?

Hotline is basically FTP but all servers can register with a central server to create lists of available servers. Hotline also has news and chat. I believe the clients are free, but you have to pay for a server. Hotline is a proprietary program.

Jungle Monkey just does file transfer. Jungle Monkey is open source and free. Because Jungle Monkey uses multicast, it is potentially more scalable.

Hotline Homepage: http://www.hotlinesw.com

3.3. What's the difference between JM and Napster?

Napster is a program for sharing MP3's. A central Napster server has a list of the MP3's Napster clients have (I believe you send the server both file names and MP3 tags). You can search this database to find the closest Napster client with the MP3 you want. You receive the MP3 directly from the client with the MP3 - it does not come from the Napster server.

Jungle Monkey works with any file. When you download the file, you will download it from the closest host with the file, which is not necessarily the host which originially had the file.

People can use search servers to find files in Jungle Monkey. Anyone can run a search server. Search servers automatically advertise themselves on the root channel.

Jungle Monkey is open source, Napster is not (though there are open source clones).

Napster Homepage: http://www.napster.com

3.4. What's the difference between JM and iMesh or CuteMX?

Both of the programs are basically like Napster, but will work with any sort of file.

IMesh homepage: http://imesh.com/

CuteMX: http://cutemx.com/

3.5. What's the difference between JM and Gnutella?

Gnutella is Nullsoft's file sharing program (Nullsoft is owned by AOL). It has not been released yet, and it is unclear whether it will ever be released. However, some programmers have reverse-engineered an early beta and written clones based on it.

Like Freenet (see below), Gnutella clients form a mesh. Users join the mesh by first connecting to a well-known server and then the user may manually connect to other clients. When a client joins the mesh, it floods the mesh with information about it (which is basically an address and a globally unique ID). Each client who receives this message responds with information about itself. This way, all clients know the next hop to all other clients.

Clients search for files by flooding the mesh with search messages. The message has a TTL to limit its spread. One unofficial spec says that other clients must track the search message to prevent loops. (Though this isn't necessary because clients have the routing information to do reverse path broadcasting.) If a client has a file the requester wants, it sends a message back to it. The file transfer is made directly from the client with the file using an HTTP-like protocol.

One of Nullsoft's employees said in an IRC chat that Gnutella would probably not scale to more than 250 or so clients. The intent was that groups of people would join one small mesh that was known only to them (eg, a group of friends might have their own mesh). The advantage of this is that there is no central server which an ISP could ban connections to.

Official Gnutella homepage (down): http://www.gnullsoft.com/ Unofficial Gnutella hompage: http://gnutella.wego.com/

3.6. What's the difference between JM and Freenet?

Freenet is a distributed file publication system. In Freenet, each node (or "host", or "computer") has a cache of files and each file has a name. Nodes connect to each other to form a mesh (it is not specified how the host decides who its neighbors are in the mesh). The namespace in Freenet is flat and nodes can allocate names freely.

Hosts can place files in their cache or any of their neighbors caches. If a host needs a file not in their cache, it asks its neighbor for the file. If the neighbor has the file, it gives the file to the requesting host. Otherwise, the neighbor asks one of its neighbors for the file. If that neighbor doesn't have it, it asks the next neighbor, and so on. In this manner, the mesh is searched depth-first for the file (though there is a TTL on the search so that the entire mesh isn't searched). It is not specified how a host decides which neighbor to ask for a file it needs.

Note that to get a file it only needs to be in a cache _somewhere_ in the mesh. That is, the node that originally had the file may not even be in the mesh.

In Jungle Monkey, each file has a URL allocated by a host. The URL has includes the host's name, so the namespace isn't flat. File are transfered using an E2E multicast tree, but to join the tree a host must connect to the host with the file first. The advantage of this is that each host effectively has its own namespace that cannot be polluted by other hosts. The disadvantage is that two hosts may offer the same file but it would have different multicast channels and thus different URLs (see the TODO file for one idea involving hashes to 'solve' this).

Unlike Freenet, Jungle Monkey does not have searching inherent in its design. (We considered searching as Freenet does, but it didn't seem scalable - we'll see). Instead, Jungle Monkey has centralized search servers which hosts can optionally use. Search servers advertise themselves on root channels so that new search servers can be added. Anyone can run a search server anywhere.

Freenet was conceived by Ian Clarke of the University of Edinburgh. It is described in his paper/tech report/thesis (?), "A Distributed Decentralised Information Storage and Retrieval System", available on the Freenet homepage. The paper also includes the results of some basic proof-of-concept experiments.

Freenet homepage: http://freenet.sourceforge.net/

3.7. What's the difference between JM and ___?

The difference between our E2EM protocol, Banana Tree Protocol (BTP), and other E2EM and related projects will be presented in our paper.

Some other E2EM projects include:

Yoid http://www.aciri.org/yoid Narada http://www.cs.cmu.edu/~hzhang/multicast/other/endsystem-index.html

Some other overlay network projects include:

MBone http://www.cs.columbia.edu/~hgs/internet/mbone-faq.html X-Bone http://www.isi.edu/xbone

Write me (dhelder@umich.edu) if I've missed your project.

4. Developers

4.1. I'd like write my own version of Jungle Monkey, where is the protocol documented?

The protocol won't be fully documented until version 1.0.0 and may change at any point until then, especially the end-to-end multicast code.

We do separate the GUI from the backend, so if you want JM on another system, I'd recommend porting the backend and writing a new GUI. Write us for more information.

4.2. How can I help?

Please read the online TODO list for ideas. Then email me, and tell me what you're interested in doing.

4.3. How do I get the repository version of Jungle Monkey?

The source code for Jungle Monkey is an a repository. This is the most current code, but is not necessarily the most stable code. In fact, the code may not even compile and may not be compatable with the stable version.

To get this code:

	cd (directory I want Jungle Monkey to go)
	setenv CVSROOT:pserver:cvs@ask.eecs.umich.edu:/z/home/dhelder/repositories/jm-repository
	[or: export CVSROOT=:pserver:cvs@mofo.eecs.umich.edu:/z/home/dhelder/repositories/jm-repository]
	cvs login       [hit return, then enter 'cvs' as the password]
	cvs -z3 checkout jm
	cd jm
	cvs -z3 update -d -P
      

Use the autogen.sh script to build the necessary files you will need to build Jungle Monkey.

	./autogen.sh
	or
	./autogen.sh --enable-gnome
      

You can join the jm-dev-cvs mailing list to get notifications of commits to the repository. Join it like you would the other mailing lists.

4.4. What do the numbers X, Y, and Z mean in "Jungle Monkey X.Y.Z"?

They are version numbers. X is the major version, Y is the minor version, and Z is the microversion.

Releases with an even minor version (ie, 1.0.3) are stable releases and intended for the general public. Releases with an odd minor version (ie, 0.3.2) are developer releases and should be used by developers and alpha-testers only.

For stable releases, the microversion denotes the bug fix version. Stable releases in the same series should be compatable, but ones with larger microversions probably have fewer bugs.