Frequently Asked Question (FAQ)

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's a private channel?
1.5. Can people upload files to my channel?
1.6. Why is it taking so long to add my 6000 files?
1.7. What's a SHA?
1.8. Why's my domain name or IP address wrong?
1.9. What's a CRP server?
1.10. How do I limit the number of connections?
1.11. Will there be a Windows port?
1.12. Why is it called "Jungle Monkey"?
1.13. What's the name of the Wonder Twin's monkey?
2. Technology
2.1. Is Jungle Monkey peer-to-peer?
2.2. How do Jungle Monkey channels work?
2.3. How are files transfered in Jungle Monkey?
2.4. What is end-host multicast (EM)?
2.5. Why don't you use IP Multicast?
2.6. Why not use IPv6 Multicast?
2.7. How does searching work?
2.8. 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. Where is the protocol documented?
4.2. How can I help?
4.3. 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 and chat.

Jungle Monkey is part of a research project at the EECS Department. of the University of Michigan. We're looking at End-host 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. See the README for more information. You can also talk to the developers in the Jungle Monkey chat room on the Jungle Monkey channel.

1.3. What's Monkey Central?

Monkey Central is a channel hosted by junglemonkey.net. It's a sort of home channel that you can use to learn about other channels. You are welcome to add new channels to it.

1.4. What's a private channel?

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

1.5. Can people upload files to my channel?

No. When someone adds a file to your channel, the file stays on their computer unless you explicitly download it from them.

1.6. Why is it taking so long to add my 6000 files?

When you add a file (or directory or channel), Jungle Monkey calculates the SHA of the file and then announces the file on the channel. Calculating the SHA takes some time. If you add 6000 files or 20 Gigs of files, it may take several minutes before they all appear.

1.7. What's a SHA?

SHA stands for Secure Hash Algorithm. SHA is a mathematical formula that converts your file to a small number. This number is sent to other users with the file announcement. When someone downloads your file, they recalculate the number from the file. If the number matches the number you sent, they know they got the right file. The formula was designed in such a way that it is extremely unlikely that two different files have the same number.

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

If JM cannot properly determine your domain name or IP address, you may need to set it manually under Settings->Preferences->Network. This often happens if you are behind a firewall or NAT.

1.9. What's a CRP server?

CRP is the Connection-Reflexion Protocol. A CRP client connects to a CRP server and the CRP server tries to connect back. JM uses CRP to check your network configuration. If the CRP server can connect back to you, then your network configuration is correct. CRP is something we designed - it's not standard. This functionality will probably be intgrated into future versions of MTP and BTP.

1.10. 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. See "How do I limit bandwidth?" below.

1.11. Will there be a Windows port?

Maybe. We have ported most of the network library (GNet) to Windows and replaced most of the non-portable in Jungle Monkey. We will make an announcement as soon as we have a working port. Contact us if you want to help.

1.12. 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.13. 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. Is Jungle Monkey peer-to-peer?

Yes. Jungle Monkey is decentralized; there is no central server.

2.2. How do Jungle Monkey channels work?

Jungle Monkey channels are 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 their files to the group. Announcements are sent periodly, so it may take a while before you see announcements for a channel you just joined.

2.3. How are files transfered in Jungle Monkey?

When you download a file, you first connect to rendezvous server. The rendezvous server has a list of mirrors of that file. JM then figures out which mirror is closest and downloads the file from that mirror. Jungle Monkey will eventually support simultaneous downloads from multiple sources.

2.4. What is end-host multicast (EM)?

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

An end-host 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 (see figure below) so I can keep them up-to-date with party plans. 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. Ultimately, everyone who is in the telephone tree will receive the information and everyone had to call at most 2 people.

End-host 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-host multicast. The protocol Jungle Monkey uses is called the "Banana Tree Protocol".

2.5. 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-host 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.6. 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.7. How does searching work?

Searching is done in "search groups" and each search group has a multicast group. To search, a query message is sent to the group. If another member has a matching file (or channel, search group, or chat group), they will send a match message to the group. Members may cache previous match messages and use them to answer queries. We are currently researching new distributed keyword search architectures.

2.8. 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 is more distributed. Because Jungle Monkey uses multicast, it is potentially more scalable. Jungle Monkey is also open source and free.

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 each client's MP3s. 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. JM search is distributed, there is no central database.

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 was never officially released, and it is unclear whether it will ever be officially released. However, some programmers have reverse-engineered an early beta version and written clones based on it.

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.

A Nullsoft employee 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.

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 ___?

Some other EM projects include:

Some other overlay network projects include:

Some other EM projects include:

Write me if I've missed your project.

4. Developers

4.1. 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-host multicast code.

4.2. How can I help?

See the HACKING file for information on how to contribute.

4.3. 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.