Wykrywanie rówieśników i odkrywanie zasobów (w twoim przypadku plików) to dwie różne rzeczy.
Bardziej znam JXTA, ale wszystkie sieci peer to peer działają na tych samych podstawowych zasadach.
Pierwszą rzeczą, która musi się wydarzyć, jest wzajemne odkrywanie.
Peer Discovery
Większość sieci p2p to sieci „seeded”: przy pierwszym uruchomieniu peer połączy się ze znanym (zakodowanym na stałe) adresem, aby pobrać listę działających peerów. Może to być inicjowanie bezpośrednie, takie jak łączenie się z, dht.transmissionbt.com
jak wspomniano w innym poście, lub pośrednie inicjowanie, jak zwykle ma to miejsce w przypadku JXTA, gdzie peer łączy się z adresem, który dostarcza tylko zwykłą listę tekstową adresów sieciowych innych peerów.
Po ustanowieniu połączenia z pierwszym (kilkoma) peerem (ami), peer nawiązujący połączenie wykrywa inne peery (wysyłając żądania) i utrzymuje ich tablicę. Ponieważ liczba innych peerów może być ogromna, łączący się peer utrzymuje tylko część Distributed Hash Table (DHT) peerów. Algorytm określający, którą część tabeli powinien utrzymywać uczestnik połączenia, różni się w zależności od sieci. BitTorrent używa Kademlia ze 160-bitowymi identyfikatorami / kluczami.
Odkrywanie zasobów
Po wykryciu kilku peerów przez łączącego się peer, ten ostatni wysyła do nich kilka żądań odnalezienia zasobów. Łącza magnetyczne identyfikują te zasoby i są zbudowane w taki sposób, że stanowią „sygnaturę” zasobu i gwarantują, że jednoznacznie identyfikują żądaną zawartość wśród wszystkich rówieśników. Łączący się peer wyśle następnie żądanie wykrycia łącza magnetycznego / zasobu do sąsiadów wokół niego. DHT jest zbudowany w taki sposób, że pomaga określić, których rówieśników należy najpierw zapytać o zasób (więcej informacji na temat Kademlia w Wikipedii). Jeśli żądany peer nie posiada żądanego zasobu, zwykle „przekaże” zapytanie dodatkowym peerom pobranym z własnego DHT.
Liczba „przeskoków”, przez które zapytanie może zostać przekazane, jest zwykle ograniczona; 4 to typowa liczba w sieciach typu JXTA.
Gdy partner posiada zasób, odpowiada, podając jego wszystkie szczegóły. Łączący się peer może wtedy połączyć się z peerem posiadającym zasób (bezpośrednio lub przez przekaźnik - nie będę tutaj wchodził w szczegóły) i rozpocząć pobieranie.
Zasoby / usługi w sieciach P2P nie są bezpośrednio dołączone do adresów sieciowych: są rozproszone i na tym polega piękno tych wysoce skalowalnych sieci.