well, in the internet everything works by tcp/ip, including http and gnutella.
http usually works by sending a single request for a specific file, and the following answer will be the required file.
gnutella works by constantly sending packages (for queries, replys, pings, pongs and pushes).
when you are using a servent(like limewire, bearshare & co) all querys and answers are made on the gnutella net (i.e. all the people running a gnutella servant), the actual download occurs by http (like if you want do download a www-page.)
for more information, ask google for "gnutella spec" or "gnutella specification".
this will probably answer all your questions
hth
michas