Gdy użytkownik A chce coś wyszukać, wysyła zapytanie do każdego z węzłów, z którymi jest obecnie aktywnie połączony. Może się okazać, że niektóre z nich już się rozłączyły z siecią, w takim przypadku użytkownik A próbuje się połączyć z węzłami, które zapisał jako awaryjne. Liczba węzłów, z którymi jest połączony dany użytkownik A, jest zwykle całkiem niewielka (ok. 5), więc każdy z tych węzłów przekazuje dalej to zapytanie do tych następnych węzłów, z którymi jest połączony i tak dalej. W teorii zapytanie w końcu dotrze do każdego z użytkowników podłączonych do sieci Gnutella.
Jeżeli zapytanie da jakieś rezultaty, węzeł, który ma dany plik, kontaktuje się bezpośrednio z użytkownikiem, który wydał to zapytanie (którego adres IP został zawarty w zapytaniu). Negocjują transfer plików i transfer się rozpoczyna. Jeśli więcej niż jedna kopia tego samego pliku zostaje znaleziona, wyszukujący może wykonać tzw. - ściągnięcie kawałków pliku z różnych komputerów. Powoduje to zwiększenie szybkości pobierania plików.
Gdy użytkownik A rozłącza się, program-klient zapisuje listę węzłów, z którą był aktywnie połączony i listę węzłów zapasowych. Jest ona wykorzystywana przy następnym łączeniu.