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).
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.
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.
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).
No. When someone adds a file to your channel, the file stays on their computer unless you explicitly download it from them.
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.
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.
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.
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.
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.
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.
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.
Gleek. (And Zan and Jayna were the names of the Wonder Twins.) See http://fantasia.ncsa.uiuc.edu/Doug/superhtml/gleek.html
(The explainations are written for the average user. If you would like a more in-depth answer, please email us. )
Yes. Jungle Monkey is decentralized; there is no central server.
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.
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.
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".
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.
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.
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.
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.)
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.
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
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
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/
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/
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/
Some other EM projects include:
Yoid ( http://www.aciri.org/yoid)
Narada ( http://www.cs.cmu.edu/~hzhang/multicast/other/endsystem-index.html)
Overcast
Some other overlay network projects include:
Some other EM 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.
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.
See the HACKING file for information on how to contribute.
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.