Verry basic info:
When you start your gnutella client, you don't connect to a server, you connect to a hostcache that provides you with ip addresses from other gnutella clients that are on line.
With this information your client tries to connect to other clients, and by doing so, become a part of the network.
Your client recieves searches from clients, and passes them on to other clients, same happens with search results
When you do a search and want to download a file, your client sends a direct request to an other computer (the comp that shares that file)
When the download starts the transfer goes directly from that computer to yours.
If you want to read more about gnutella go
here