Mówiąc prościej, w jaki sposób klient BitTorrent początkowo odkrywa elementy równorzędne przy użyciu DHT?

45

Przeczytałem już tę odpowiedź SuperUser i ten artykuł w Wikipedii, ale oba są zbyt techniczne, żebym naprawdę mógł się otoczyć.

Rozumiem ideę modułu śledzącego: klienci łączą się z centralnym serwerem, który utrzymuje listę peerów w roju.

Rozumiem także ideę wymiany rówieśników: klienci, którzy są już w roju, wysyłają sobie pełną listę swoich rówieśników. W przypadku wykrycia nowych elementów równorzędnych są one dodawane do listy.

Moje pytanie brzmi: jak działa DHT? To znaczy, w jaki sposób nowy klient może dołączyć do roju bez śledzenia lub wiedzy co najmniej jednego członka roju, aby wymienić się równorzędnymi użytkownikami?

(Uwaga: najlepsze są proste wyjaśnienia).

Steve V.
źródło

Odpowiedzi:

48

Podsumowanie

W jaki sposób nowy klient może dołączyć do roju bez osoby śledzącej lub wiedzy co najmniej jednego członka roju, z którą można wymienić partnerów?

Nie możesz To jest niemożliwe.*

* (O ile węzeł w sieci lokalnej nie jest już węzłem w DHT. W takim przypadku możesz użyć mechanizmu rozgłoszeniowego, takiego jak Avahi, aby „odkryć” tego peera i uruchomić go z niego. Ale jak to zrobić same się ładują? W końcu trafisz na sytuację, w której musisz połączyć się z publicznym Internetem. A publiczny Internet jest przeznaczony tylko do emisji pojedynczej, a nie multiemisji, więc utkniesz przy użyciu wcześniej ustalonych list rówieśników.)


Bibliografia

Bittorrent DHT jest implementowany za pomocą protokołu znanego jako Kademlia , który jest szczególnym przypadkiem teoretycznej koncepcji rozproszonej tabeli mieszającej .


Ekspozycja

Z protokołem Kademlia, kiedy przyłączyć się do sieci, należy przejść przez ładowania początkowego procedury, która bezwzględnie wymaga, aby wiedzieć, z góry , adres IP oraz port co najmniej jednego węzła już uczestniczących w sieci DHT. Na przykład moduł do śledzenia, z którym się łączysz, może być węzłem DHT. Po podłączeniu do jednego węzła DHT, następnie pobierasz informacje z DHT, które dostarczają informacji o łączności dla większej liczby węzłów, a następnie nawigujesz po tej strukturze „wykresu”, aby uzyskać połączenia z coraz większą liczbą węzłów, które mogą zapewnić zarówno łączność z innymi węzłami i dane ładunku (fragmenty pobierania).

Myślę, że rzeczywisty pytanie pogrubione - czyli o tym, jak połączyć się z siecią Kademila DHT, nie znając żadnych innych członków - opiera się na fałszywym założeniu.

Prostą odpowiedzią na twoje pytanie jest pogrubienie : nie . Jeśli nie znasz JAKICHKOLWIEK informacji na temat choćby jednego hosta, który może zawierać metadane DHT, utkniesz - nie możesz nawet zacząć. Mam na myśli, że możesz brutalnie spróbować odkryć adres IP w publicznym Internecie z otwartym portem, który zdarza się transmitować informacje DHT. Ale bardziej prawdopodobne jest, że klient BT jest na stałe zakodowany w określonym statycznym adresie IP lub DNS, który przekształca się w stabilny węzeł DHT, który dostarcza tylko metadane DHT.

Zasadniczo, DHT jest tylko jako zdecentralizowany jako mechanizmu łączącego, a ponieważ mechanizm łączenia jest dość krucha (nie ma mowy, aby „audycji” w całym Internecie! Więc trzeba unicast do indywidualnego wstępnie przypisane hosta, aby uzyskać DHT dane), Kademlia DHT nie jest tak naprawdę zdecentralizowana. Nie w najściślejszym tego słowa znaczeniu.

Wyobraź sobie ten scenariusz: ktoś, kto chce zatrzymać P2P, wychodzi i przygotowuje atak na wszystkie powszechnie używane stabilne węzły DHT, które są używane do ładowania. Po przeprowadzeniu ataku atakują go wszystkie węzły naraz. Wham ; każdy pojedynczy węzeł DHT inicjujący jest wyłączony za jednym zamachem. Co teraz? Nie możesz połączyć się ze scentralizowanymi modułami śledzącymi, aby pobrać z nich tradycyjne listy użytkowników. Cóż, jeśli zaatakują także urządzenia śledzące, to naprawdę, naprawdęw górę potoku. Innymi słowy, Kademlia i cała sieć BT są ograniczone ograniczeniami samego Internetu, ponieważ istnieje skończona (i stosunkowo niewielka) liczba komputerów, które musiałbyś skutecznie zaatakować lub przejść offline, aby zapobiec> 90% użytkowników łączących się z siecią.

Po zniknięciu „pseudo-scentralizowanych” węzłów ładowania, wewnętrzne węzły DHT, które nie są ładowaniem, ponieważ nikt z zewnątrz DHT nie wie o węzłach wewnętrznych , są bezużyteczne; nie mogą wprowadzać nowych węzłów do DHT. Tak więc, ponieważ każdy węzeł wewnętrzny z czasem rozłącza się z DHT, albo z powodu wyłączania komputerów, ponownego uruchamiania w celu aktualizacji itp., Sieć się zawali.

Oczywiście, aby obejść ten problem, ktoś może wdrożyć załatanego klienta BitTorrent z nową listą wcześniej ustalonych stabilnych węzłów DHT lub adresów DNS i głośno reklamować się w społeczności P2P, aby zamiast tego skorzystać z tej nowej listy. Ale stałoby się to sytuacją „walenia w mol”, w której agresor (pożeracz węzłów) stopniowo sam pobierałby te listy i atakował nowe odważne węzły ładowania, a następnie przestawiał je również w tryb offline.

allquixotic
źródło
Sposób, w jaki opisujesz DHT, brzmi tak samo jak wymiana rówieśników.
Celeritas
Rzecz, która jest Ukazuje o DHT jest to, że faktyczna ładowność dane - znaczenie, lista adresów IP i portów, gdzie można pobrać pliki - jest rozpowszechniany. W wymianie równorzędnej cała lista jest przechowywana na jednym komputerze, zwykle w module śledzącym, i pobierana podobnie do pliku do pobrania. Mógłbym wspomnieć o tym w mojej odpowiedzi, ale całe to pytanie (i odpowiedzi) dotyczy tylko pierwszego odkrycia lub przyłączenia się do sieci DHT, a nie tego, co dzieje się po dołączeniu.
allquixotic
1
Uderzenie we wszystkie węzły ładowania spowoduje zatrzymanie ładowania nowych użytkowników, ale niekoniecznie istniejących użytkowników, którzy przejdą w tryb offline, a następnie wrócą. Mam wrażenie, że kilku klientów zapamiętuje swój aktywny zestaw węzłów i używa ich do ponownego łączenia, zamiast za każdym razem ładowania.
clacke
W przypadku projektów takich jak masscan ( github.com/robertdavidgraham/masscan ) odkrywanie węzłów DHT bez scentralizowanego katalogu powinno być wykonalne
newlog
19

Krótka odpowiedź: pobiera ją z pliku .torrent.

Gdy klient BitTorrent generuje plik .torrent bez śledzenia (to znaczy, gdy ktoś przygotowuje się do udostępnienia czegoś nowego za pośrednictwem BitTorrent), dodaje klucz „węzły” (klucz jak w „parze klucz / wartość”; jak nagłówek sekcji, nie kluczem kryptograficznym) do pliku .torrent, który zawiera K najbliższych węzłów DHT znanych klientowi.

http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions

Słownik torrentów bez śledzenia nie ma klawisza „ogłaszaj”. Zamiast tego torrent bez trackera ma klucz „węzłów”. Ten klucz powinien być ustawiony na K najbliższych węzłów w tabeli routingu klienta generującego torrent. Alternatywnie klucz może być ustawiony na znany dobry węzeł, taki jak ten obsługiwany przez osobę generującą torrent. Proszę nie dodawać automatycznie „router.bittorrent.com” do plików torrent ani automatycznie dodawać tego węzła do tabel routingu klientów.

Kiedy więc podajesz klientowi BitTorrent plik .torrent torrenta bez śledzenia, który chcesz pobrać, używa wartości tego klucza „węzłów” z pliku .torrent do znalezienia pierwszych kilku węzłów DHT.

Spiff
źródło
3
To dobra informacja wyjaśniająca. Myślę, że twoja odpowiedź wyjaśnia, co robią obecni klienci BitTorrenta, aby poradzić sobie z teoretycznymi ograniczeniami i problemami zidentyfikowanymi w mojej odpowiedzi. Mamy nadzieję, że obie nasze odpowiedzi są mile widziane, ponieważ wyjaśniają różne aspekty odpowiedzi.
allquixotic
3
Czy dlatego „połączenie nowego pliku torrenta z pobieraniem torrenta” u wielu klientów sprawia, że ​​martwy torrent ożywa?
Jesvin Jose
2
@ aitchnyu tak, ale plik torrent może mieć także dodatkowe / różne moduły śledzące.
longneck
2
Wygląda na to, że żaden klient BitTorrent nie zawiera informacji o węzłach. Przetestowałem transmisję, Vuze, Potop, Mainline i inne.
Aeyoun
1

nie możesz! musisz znać co najmniej jedno IP roju, to jest słabość sieci p2p. Możesz ślepo nadawać, aby znaleźć pierwsze IP, ale w dużej sieci, jeśli wszyscy to robią, będziemy mieli problem z przeciążeniem. Możesz użyć pamięci podręcznej, ale jest to możliwe tylko dla dużych rojów (większa pamięć podręczna adresów równorzędnych). Zawsze musisz podłączyć moduł śledzący, aby zapytać tylko o pierwszy adres IP.

Rozproszony w DHT oznacza, że ​​klienci nie muszą przechowywać całej listy zawierającej sumę md5 nazwy udostępnionych plików wraz z odpowiednimi równorzędnymi. Lista skrótów ma kształty na równe części i jest rozprowadzana z nadmiarem przez rój. Jeśli peer rozłączy się, jest gdzieś inny z tą samą częścią listy skrótów. Rówieśnicy dzielą się adresami do dobrego posiadacza części hashlist.

torrent-freak napisał post na ten temat

z8po
źródło
0

W jaki sposób nowy klient może dołączyć do roju bez osoby śledzącej lub wiedzy co najmniej jednego członka roju, z którą można wymienić partnerów?

Prosi o to.

Klienci Bittorrent obsługujący DHT uruchamiają dwie osobne aplikacje peer-to-peer.

Pierwszy polega na udostępnianiu plików: rój w bittorrent lingo to grupa rówieśników współużytkujących obiekt bittorrent (np. Strukturę pliku lub katalogu). Każdy bittorent obiekt ma pewne metadane zapisane w pliku .torrent. (Obejmuje rozmiar obiektu, nazwę folderu, ewentualnie informacje o śledzeniu lub węzłach. Ect.) Hash metadanych wymaganych do pobrania tego obiektu bittorrent nazywa się infohash.

DHT jest w zasadzie drugą aplikacją P2P mającą na celu zastąpienie trackerów: przechowuje pary (infohash, rój) i aktualizuje rój, jeśli odbierze komunikaty zapowiedzi. Nowy klient musi posiadać wiedzę o jakimś „węźle” (żargon bittorrent dla peera z DHT), aby móc załadować informacje o DHT. Tutaj obowiązują argumenty podane przez @allquixotic. Ponieważ MDHT składa się obecnie z ponad 7 milionów partnerów, ciągły atak typu „odmowa usługi” wydaje się mało prawdopodobny.

Następnie może zapytać DHT o infohash i nie musi używać trackera ani znać partnera, który jest częścią roju. Jeśli jeden z rówieśników, z którymi się kontaktuje, obsługuje udostępnianie metadanych , potrzebuje tylko infohash, który może pobrać plik .torrent z roju.

tameit
źródło
0

Większość klientów sieciowych p2p jest ładowana z listy równorzędnych partnerów, z którymi początkowo łączą się ... po podłączeniu do jednego równorzędnego partnera ładuje resztę w sposób rozproszony. Łączy się z peer bootstrap i pobiera listę peerów DHT, a następnie przechodzi do każdego z nich i robi to samo itp. Itp.

Na przykład:

Oto lista węzłów bootstrap:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10

Oto, gdzie klient łączy się z nimi, aby uwodnić listę użytkowników:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60

Jest to podobne do działania modułu śledzącego, z tym wyjątkiem, że praktycznie każdy może być węzłem ładowania początkowego, więc prawie niemożliwe jest ich zamknięcie.

Portfel rdzeniowy Bitcoin działa w ten sam sposób. Pozwala zmienić peery inicjujące bootstrap, jeśli z jakiegoś powodu domyślne zostaną zamknięte.

chovy
źródło
Linki są martwe
zella