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 advantage of this is that there is no central server which an ISP could ban connections to. Freenet is a distributed file publication system. 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. It is not specified how a host decides which neighbor to ask for a file it needs.