Jungle Monkey FAQ ================= Copyright (C) 1999, 2000 David A. Helder Index ===== General What's Jungle Monkey? Where do I send questions, comments, bug reports? What's Monkey Central? What's a private channel? Why is it taking so long to add my 6000 files? What's a SHA? Why's my domain name/IP address wrong? What's a CRP server? How do I limit the number of connections? Will there be a Windows port? Why is it called "Jungle Monkey"? What's the name of the Wonder Twin's monkey? Technology How do Jungle Monkey channels work? How are files transfered in Jungle Monkey? What is end-host multicast? Why don't you use IP Multicast? Why not use IPv6 Multicast? How does searching work? How do I limit the amount of bandwidth that Jungle Monkey can use? Jungle Monkey and other file transfer programs What's the difference between JM and FTP? " Hotline? " Napster? " iMesh or CuteMX? " Gnutella? " Freenet? " ___? Developers Where is the protocol documented? How can I help? What do the numbers X, Y, and Z mean in "Jungle Monkey X.Y.Z"? General ======= 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). 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. 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. 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). Someday you will be able to link channels to other channels. 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. Also, file announcements are sent only periodicly. You may need to wait before you see a file announcement for a file someone else added. Each file should be announced about every 3 minutes. In small channels, you should see all files almost immediately. 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. 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. 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. 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. 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. Contact us if you want to help. 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. 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 Technology ========== (The explainations are written for the average user. If you would like a more in-depth answer, please email us. ) 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. 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. 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). 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. David / \ Alice Bob /\ /\ Carl Dana Elijah Fred /\ /\ /\ /\ Gary Hilda ... 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". 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. 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. 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. 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.) Jungle Monkey and other file transfer programs ============================================== 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. 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 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 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/ 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.nerdherd.net/ 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 end-host 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/ What's the difference between JM and ___? The difference between our EM protocol, Banana Tree Protocol (BTP), and other EM and related projects will be presented in our paper. Some other EM 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. Developers ========== 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-host 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. How can I help? See the HACKING file for information on how to contribute. 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.