Read the Gnutella 0.6 Protocol, you can find it here:
http://groups.yahoo.com/group/the_gdf/files
I think the Ultrapeer structure is now a essential part of the GNet, so it's not that 0.4 flooding style anymore. There's dynamic querying, LimeWire for instance supports it. You may want to check it out.