2009-08-26 18 views
53

Koduję implementację p2p, którą chciałbym zdecentralizować, ale mam pewne problemy z uchwyceniem DHT w protokołach, takich jak bittorrent. W jaki sposób klient wie, gdzie znajdują się rówieśnicy, jeśli nie ma trackera? Czy peery są przechowywane w aktualnym pliku torrent?Jak działa DHT w torrentach?

Odpowiedz

48

Torrenty trackerless/DHT, adresy IP peer są przechowywane w DHT za pomocą klucza BitTorrent infohash. Ponieważ wszystkie trackery zasadniczo odpowiadają na żądania put/get, ta funkcja dokładnie odpowiada interfejsowi, który zapewnia DHT (rozproszony tablica asocjacyjna): umożliwia wyszukiwanie i przechowywanie adresów IP w DHT przez infohash.

Tak więc, żądanie "get" wyszuka informacje BT i zwróci zestaw adresów IP. "Put" przechowuje adres IP dla danego infohash. Odpowiada to żądaniu "ogłoszenia", które w przeciwnym razie zostałoby wykonane przez moduł śledzący w celu otrzymania słownika adresów IP peerów.

W systemie DHT rówieśniki są losowo przypisywane do wartości przechowywanych należących do niewielkiej części przestrzeni kluczy; funkcja mieszania zapewnia, że ​​klucze są rozdzielane losowo między uczestniczącymi rówieśnikami. Protokół DHT (Kademlia dla BitTorrent) zapewnia, że ​​żądania wysyłania/odbierania są efektywnie kierowane do równorzędnych podmiotów odpowiedzialnych za utrzymywanie list adresów IP danego klucza.

+1

gdzie jest numer portu dla każdego adresu IP? –

+0

Port jest dołączony wraz z adresem IP peera: http://www.bittorrent.org/beps/bep_0005.html#contact-encoding – cce

+1

Czy wartości klucza zostały utracone/wygasły? – schulwitz

10

Co się dzieje z bittorrent i DHT, że na początku bittorrent używa informacji zawartych w pliku torrent, aby przejść do trackera lub jednego z zestawu węzłów z DHT. Następnie, gdy znajdzie jeden węzeł, może nadal znajdować inne i nadal korzystać z DHT bez potrzeby korzystania ze scentralizowanego trackera, aby go utrzymać.

Oryginalna informacja uruchamia później korzystanie z DHT.

0

Węzły DHT mają unikalne identyfikatory, określane jako Node ID. Identyfikatory węzłów wybierane są losowo z tej samej 160-bitowej przestrzeni, co hashtoty z informacjami o BitTorrentu. Bliskość mierzy się porównując tabele trasowania identyfikatora węzła, im bliżej węzła, tym bardziej szczegółowe, co daje w rezultacie optymalną wartość. Co czyni je bardziej optymalnymi niż poprzednik "Kademlia", który używał prostych liczb całkowitych bez znaku: odległość (A, B) = | A xor B | Mniejsze wartości są bliższe. XOR. Poza tym, że nie jest bezpieczny, jego logika była wadliwa.

Jeśli twój klient obsługuje DHT, zarezerwowano 8 bajtów, w których znajduje się 0x09, a następnie 2-bajtowy ładunek z portem UDP i węzłem DHT. Jeśli uzgadnianie zakończy się powodzeniem, powyższe będzie kontynuowane.