Czy BitTorrent używa DHT?

Streszczenie

BitTorrent to protokół peer-to-peer zaprojektowany do przesyłania plików. Pozwala użytkownikom łączyć się bezpośrednio ze sobą w celu wysyłania i odbierania części plików. Protokół wykorzystuje centralny serwer o nazwie Tracker do koordynowania działań wszystkich zaangażowanych rówieśników. Jednak Bittorrent zawiera również rozszerzenie o nazwie Distribut Sloppy Handh Table (DHT), który jest protokołem śledzącego Peer-to-Peer opartego na UDP.

Kluczowe punkty

  • BitTorrent to protokół przesyłania plików.
  • Użytkownicy łączą się bezpośrednio ze sobą, aby wysłać i odbierać części plików.
  • Protokół używa centralnego serwera o nazwie Tracker.
  • Tracker koordynuje działania zaangażowanych rówieśników.
  • Protokół DHT jest przedłużeniem BitTorrent.
  • DHT to protokół śledzenia peer-to-peer oparty na UDP.
  • BitTorrent używa TCP jako protokołu transportu.
  • Znany port TCP dla ruchu Bittorrent to 6881-6889.
  • DHT korzysta z różnych portów UDP wynegocjowanych przez rówieśników.
  • BitTorrent był szeroko przyjęty od czasu jego stworzenia w 2002 roku.

Pytania i odpowiedzi


P: Jak działa BitTorrent?

Odp.: BitTorrent to protokół peer-to-peer, który umożliwia użytkownikom przesyłanie plików poprzez połączenie się bezpośrednio ze sobą. Zamiast polegać na serwerze centralnym, BitTorrent wykorzystuje śledząc do koordynowania działań rówieśników zaangażowanych w przesyłanie plików. To zdecentralizowane podejście pozwala na wydajną dystrybucję plików, ponieważ użytkownicy mogą udostępniać części pliku, które już pobrały z innymi.


P: Jaki jest cel protokołu DHT w Bittorrent?

Odp.: Protokół DHT lub rozproszony niechlujny protokół tabeli skrótów jest rozszerzeniem BitTorrent. Umożliwia torrenty bez śledzenia, przechowując informacje kontaktowe rówieśnicze w rozproszonej tabeli skrótów. Każdy rówieśnik w sieci staje się trackerem, a protokół jest zaimplementowany przez UDP. DHT umożliwia rówieśnikom znalezienie i łączenie się ze sobą bez polegania na centralnym serwerze śledzenia.


P: Jaki protokół transportowy wykorzystuje przede wszystkim BitTorrent?

Odp.: BitTorrent wykorzystuje przede wszystkim TCP (protokół kontroli transmisji) jako protokół transportu. TCP zapewnia niezawodne i uporządkowane dostarczanie pakietów danych między rówieśnikami. Znany zakres portów TCP dla ruchu Bittorrent to 6881-6889.


P: Czy protokół DHT używa UDP lub TCP?

Odp.: Protokół DHT w BitTorrent używa UDP (Protokół DataGram) jako protokół transportu. UDP to protokół bez połączeń, który zapewnia szybsze i mniej niezawodne dostarczanie pakietów w porównaniu z TCP. Rówieśnicy zaangażowani w protokół DHT negocjują porty UDP w celu nawiązania połączeń.


P: Kiedy powstał BitTorrent?

Odp.: BitTorrent został zaprojektowany przez Brama Cohen w kwietniu 2001 roku i wdrożony latem 2002 roku. Był to pierwszy program, który wykorzystał protokół BitTorrent i od tego czasu opracowano wiele aplikacji na podstawie protokołu.


P: Jaka jest rola trackera w Bittorrent?

Odp.: Tracker w BitTorrent jest centralnym serwerem, który zarządza połączeniami między rówieśnikami. Śledzi, którzy rówieśnicy posiadają różne części pliku i ułatwia wymianę danych między nimi. Jednak tracker nie ma wiedzy na temat rozpowszechnianej zawartości pliku.


P: Czy są jakieś konkretne numery portów powiązane z ruchem Bittorrent?

Odp.: Tak, dobrze znany zakres portów TCP dla ruchu Bittorrent to 6881-6889. Porty te są używane do ustanowienia połączeń TCP między rówieśnikami. Dodatkowo porty UDP używane do protokołu DHT są negocjowane przez rówieśników zaangażowanych w komunikację.


P: Jaka jest różnica między rówieśnikiem a węzłem w Bittorrent?

Odp.: W kontekście BitTorrent peer odnosi się do klienta lub serwera, który słucha w porcie TCP i implementuje protokół BitTorrent do przesyłania plików. Z drugiej strony węzeł odnosi się do klienta lub serwera, który słucha w porcie UDP i implementuje protokół Distributed HaSh Table (DHT). Węzły są używane do przechowywania i pobierania informacji kontaktowych rówieśników dla torrentów bez śledzenia.


P: Czy Wireshark jest w stanie analizować ruch BitTorrent?

Odp.: Tak, Wireshark zawiera w pełni funkcjonalny Despector BitTorrent, który może analizować i dekodować ruch BitTorrent. Rozszerzenia DHT i UTP są również obsługiwane przez Wireshark. Dyspector BitTorrent był dostępny od czasu konkretnej wersji Wireshark (nie dostarczone szczegóły).


P: Czy są jakieś ustawienia preferencji związane z BitTorrentem w Wireshark?

Odp.: Tak, istnieją ustawienia preferencji w Wireshark związane z BitTorrent. Niektóre z tych ustawień obejmują możliwość ponownego ponownego montażu komunikatów BitTorrent obejmujących wiele segmentów TCP oraz opcję dekodowania Peer_ID komunikatów uścisku dłoni. Te ustawienia preferencji zawierają bardziej szczegółową analizę ruchu Bittorrent przechwyconego w Wireshark.


P: Czy możesz podać przykładowy plik przechwytywania ruchu BitTorrent?

Odp.: Tak, są przykładowe pliki przechwytywania ruchu dla ruchu BitTorrent. Jednym z przykładów jest „SampleCaptures/BitTorrent.Transfer1.CAP ”, przechwycony za pomocą Microsoft Network Monitor. Zawiera kilka pakietów BitTorrent uzyskanych podczas pobierania na BitTorrent. Innym przykładem jest „SampleCaptures/BitTorrent.PCAP ”, przechwycone za pomocą libpcap. Prowadzi komunikację między dwoma klientami Torrent bez DHT lub Peer Exchange.


P: Jak mogę wyświetlać tylko ruch Bittorrent w Wireshark?

Odp.: Aby wyświetlać tylko ruch oparty na BitTorrent w Wireshark, możesz użyć filtra wyświetlacza „BitTorrent.„Zastosowanie tego filtra pokaże tylko pakiety związane z ruchem BitTorrent. Należy pamiętać, że ten filtr może być dostępny w Wireshark po określonej wersji (nie udostępniono szczegółów).


P: Czy możliwe jest przechwytywanie tylko ruchu śledzenia BitTorrent za pomocą określonego filtra?

Odp.: Podczas przechwytywania ruchu sieciowego nie można bezpośrednio filtrować protokołów Bittorrent. Jeśli jednak znasz port TCP używany przez BitTorrent Tracker (taki jak 6881), możesz ustawić filtr przechwytywania, aby przechwycić tylko ruch nad tym portem. Na przykład filtr przechwytywania „Port TCP 6881” przechwyci tylko ruch śledzący BitTorrent na porcie 6881. Dodatkowo możesz przechwycić ruch śledzący BitTorrent w zakresie domyślnych portów (e.G., 6881-6889) za pomocą filtra „TCP Portrange 6881-6889.”


P: Czy są jakieś zewnętrzne linki związane z BitTorrent?

Odp.: Tak, oto kilka zewnętrznych linków związanych z BitTorrent:


P: Jak działa protokół DHT w BitTorrent?

Odp.: Protokół DHT w BitTorrent wykorzystuje rozproszony tabelę skrót. Każdy węzeł w DHT ma globalnie unikalny identyfikator znany jako „identyfikator węzła.„Węzły utrzymują tabelę routingu zawierającą dane kontaktowe dla innych węzłów. Tabela routingu staje się bardziej szczegółowa, gdy węzły zbliżają się do własnego identyfikatora węzła. Ta struktura pozwala węzłom na efektywne odkrywanie i łączenie się z rówieśnikami.

Dodatkowe informacje

BitTorrent.Org to oficjalna strona internetowa BitTorrent. Zapewnia zasoby, dokumentację i aktualizacje dotyczące protokołu BitTorrent i jego implementacji. BitTorrent używa protokołu DHT, aby umożliwić torrenty bez śledzenia, co zwiększa skalowalność i decentralizację procesu udostępniania plików. Protokół DHT jest zaimplementowany przez UDP i polega na węzłach do przechowywania i pobierania informacji kontaktowych rówieśników.

Uwaga: ten artykuł zawiera zwięzły przegląd BitTorrent, rozszerzenia DHT i powiązanych informacji. Aby uzyskać bardziej szczegółowe szczegóły i specyfikacje techniczne, zaleca się odwiedzenie oficjalnej strony internetowej BitTorrent i podanych linków zewnętrznych.

Czy BitTorrent używa DHT

Po tobie’Znalazłem wszystkich twoich rówieśników, zaczyna się twoje pobieranie!

BitTorrent

BitTorrent to protokół zaprojektowany do przesyłania plików. Ma charakter peer-to-peer, ponieważ użytkownicy łączą się bezpośrednio, aby wysyłać i odbierać części pliku. Istnieje jednak serwer centralny (zwany trackerem), który koordynuje działanie wszystkich takich rówieśników. Tracker zarządza tylko połączeniami, nie ma żadnej wiedzy na temat dystrybucji plików, a zatem duża liczba użytkowników może być obsługiwana ze stosunkowo ograniczoną przepustowością śledzenia.

Niedawnym rozszerzeniem BitTorrent jest protokół DHT („rozproszony niechlujny tabela skrótów” lub po prostu nazywany UDP Tracker). Protokół Peer to Peer to Peer to Peer Tracker. A Utorrent importuje kolejny protokół mikro transportu oparty na UDP o nazwie UTP.

Historia

W kwietniu 2001 r. Bram Cohen zaprojektował protokół Bittorrent, który wdrożył lato 2002. Pierwszym programem korzystającym z protokołu był oryginalny klient BitTorrent. Obecnie dostępnych jest wiele aplikacji, a protokół jest szeroko stosowany.

Zależności protokołu

  • TCP: Zazwyczaj BitTorrent używa TCP jako protokołu transportu. Dobrze znany port TCP dla ruchu Bittorrent to 6881-6889 (i 6969 dla portu śledzenia). Rozszerzenie DHT (Peer2Peer Tracker) wykorzystuje różne porty UDP negocjowane przez rówieśników.

Przykład ruchu

Xxx – Dodaj przykładowy ruch tutaj (jako zwykły tekst lub zrzut ekranu Wireshark).

Wireshark

Dessector Bittorrent jest (w pełni funkcjonalny, częściowo funkcjonalny, nie istniejący,… bez względu na obecny stan). Rozszerzenie DHT zostało obsługiwane od R39653. Rozszerzenie UTP zostało obsługiwane od R36716.

Ustawienia preferencji

  • Ponowne montaż komunikaty BitTorrent obejmujących wiele segmentów TCP
  • Dekoduj peer_id komunikatów uścisku dłoni

Przykład plików przechwytywania

SampleCaptures/BitTorrent.Transfer1.CAP (Microsoft Network Monitor) Oto przechwytywanie z kilkoma pakietami BitTorrent; Zawiera kilka małych pakietów, które otrzymałem podczas pobierania czegoś na BitTorrent.

SampleCaptures/BitTorrent.plik przechwytujący PCAP (libpcap) dwóch klientów Torrent CommunicationG bez wymiany DHT lub Peer.

Filtr wyświetlania

Pełną listę pól filtru BitTorrent można znaleźć w odniesieniu do filtra wyświetlania

Pokaż tylko ruch oparty na BitTorrent:

 BitTorrent

Uwaga: zaimplementowany w Post Post 0.10.12!

Filtr przechwytujący

Nie można bezpośrednio filtrować protokołów bittorrent podczas przechwytywania. Jeśli jednak znasz użyty port TCP (patrz wyżej), możesz filtrować na tym.

Uchwyć tylko ruch śledzący BitTorrent na jednym z domyślnych portów (e.G. 6881):

 Port TCP 6881

Uchwyć ruch trackera BitTorrent w zakresie domyślnych portów (e.G. 6881-6889):

 TCP Portrange 6881-6889

Podczas korzystania z libpcap 0.9.1 lub nowszy lub WinPCap 3.1 lub później; To wyrażenie nie będzie działać ze starszymi wersjami LiBPCAP lub WinPCAP, więc w systemie Windows, aktualizację do WinPCap 3.1 lub później i, na un*x, uaktualnij do libpcap 0.9.x, jeśli to możliwe i, jeśli nie jest to możliwe i masz wersję libpcap przed 0.8.1, użyj

 (TCP [0: 2]> = 6881 i TCP [0: 2] = 6881 i TCP [2: 2] 

(błąd w optymalizatorze libpcap w libpcap 0.8.x oznacza, że ​​to nie zadziała z libpcap 0.8.x, chociaż możesz być w stanie użyć TCPDump z flagą „-O”).

Linki zewnętrzne

  • http: // www.BitTorrent.com/ oficjalna strona BitTorrent
  • Strona Wikipedia BitTorrent
  • Jak Bittorrent działa ogólnie o P2P, BitTorrent i Firewall
  • Protokół DHT (BEP 5), rozszerzenie BitTorrent oparte na UDP dla rozproszonych trackerów (numer portu UDP jest negocjowany). Również: link do projektu protokołu DHT (martwy link), Web Archive Copy (2007-12-21) projektu protokołu DHT.
  • Podpis protokołu hipisowego Opis podpisów protokołu TCP i UDP, które mogą być użyte do heurystycznej identyfikacji linku do archiwum BitTorrent Protocol
  • Więcej o BitTorrent

BitTorrent .org

BitTorrent używa „rozproszonej niechlujnej tabeli skrótów” (DHT) do przechowywania wzajemnych informacji kontaktowych dla torrentów „Bezpośrednich”. W efekcie każdy rówieśnik staje się trackerem. Protokół jest oparty na Kadamili [1] i jest wdrażany przez UDP.

Zwróć uwagę na terminologię zastosowaną w tym dokumencie, aby uniknąć zamieszania. „Peer” to słuchanie klienta/serwera na porcie TCP, który implementuje protokół BitTorrent. „Węzeł” to słuchanie klienta/serwera w porcie UDP wdrażającym protokół Table Tabela rozproszonego. DHT składa się z węzłów i przechowuje lokalizację rówieśników. Klienci BitTorrent obejmują węzeł DHT, który służy do kontaktu z innymi węzłami w DHT, aby pobrać lokalizację rówieśników.

Przegląd

Każdy węzeł ma globalnie unikalny identyfikator zwany „identyfikatorem węzła.„Identyfikatory węzłów są wybierane losowo z tej samej 160-bitowej przestrzeni co BitTorrent Infohashes [2]. „Metryka odległości” służy do porównania dwóch identyfikatorów węzłów lub identyfikatora węzła i infoHash dla „bliskości.„Węzły muszą utrzymywać tabelę routingu zawierającą dane kontaktowe dla niewielkiej liczby innych węzłów. Tabela routingu staje się bardziej szczegółowa, gdy identyfikatory zbliżają się do własnego identyfikatora węzła. Węzły wiedzą o wielu innych węzłach w DHT, które mają identyfikatory, które są „bliskie”, ale mają tylko garść kontaktów z identyfikatorami, które są bardzo daleko od własnych.

W Kademlii wskaźnik odległości to xor, a wynik jest interpretowany jako niepodpisana liczba całkowita. Odległość (a, b) = | a xor b | Mniejsze wartości są bliższe.

Kiedy węzeł chce znaleźć rówieśników do potoku, używa metryki odległości do porównania InfoHash torrentu z identyfikatorami węzłów we własnej tabeli routingu. Następnie kontaktuje się z węzłami, o których wie z identyfikatorami najbliższymi InfoHash i prosi je o informacje kontaktowe rówieśników obecnie pobierających torrent. Jeśli skontaktowany węzeł wie o rówieśnikach do torrentu, informacje kontaktowe rówieśnicze są zwracane z odpowiedzią. W przeciwnym razie skontaktowany węzeł musi odpowiedzieć na dane kontaktowe węzłów w tabeli routingu, które są najbliższe InfoHash Torrent. Oryginalny węzeł iteracyjnie pyta węzły, które są bliżej docelowego informacji, dopóki nie znajdzie żadnych bliższych węzłów. Po wyczerpaniu wyszukiwania klient wkłada następnie dane kontaktowe rówieśników na same w węzłach odpowiadających identyfikatorom najbliższym InfoHash torrentu.

Wartość zwracania zapytania dla rówieśników zawiera nieprzezroczystą wartość znaną jako „token.„Aby węzeł mógł ogłosić, że jego kontrolujący rówieśnik pobiera torrent, musi przedstawić token otrzymany z tego samego węzła zapytania w najnowszym zapytaniu dla rówieśników. Gdy węzeł próbuje „ogłosić” torrent, zapytany węzeł sprawdza token na adresie IP węzła zapytania. Ma to na celu zapobieganie rejestracji złośliwych gospodarzy innych gospodarzy do torrentów. Ponieważ token jest po prostu zwracany przez węzeł zapytania do tego samego węzła, od którego otrzymał token, implementacja nie jest zdefiniowana. Tokeny należy przyjmować przez rozsądny czas po ich rozpowszechnianiu. Implementacja BitTorrent wykorzystuje skrót SHA1 adresu IP połączony z tajemnicą, który zmienia się co pięć minut, a tokeny do dziesięciu minut są akceptowane.

Tabela routingu

Każdy węzeł utrzymuje tabelę routingu znanych dobrych węzłów. Węzły w tabeli routingu są używane jako punkty początkowe dla zapytań w DHT. Węzły z tabeli routingu są zwracane w odpowiedzi na zapytania z innych węzłów.

Nie wszystkie węzły, o których się dowiadujemy, są równe. Niektóre są „dobre”, a niektóre nie. Wiele węzłów korzystających z DHT jest w stanie wysyłać zapytania i odbierać odpowiedzi, ale nie jest w stanie odpowiedzieć na zapytania z innych węzłów. Ważne jest, aby tabela routingu każdego węzła zawierała tylko znane dobre węzły. Dobry węzeł to węzeł zareagował na jedno z naszych zapytań w ciągu ostatnich 15 minut. Węzeł jest również dobry, jeśli kiedykolwiek zareagował na jedno z naszych zapytań i wysłał nam zapytanie w ciągu ostatnich 15 minut. Po 15 minutach bezczynności węzeł staje się wątpliwy. Węzły stają się złe, gdy nie reagują na wiele zapytań z rzędu. Węzły, które, jak wiemy, są dobre, mają pierwszeństwo przed węzłami o nieznanym statusie.

Tabela routingu obejmuje całą przestrzeń ID węzła od 0 do 2 160 . Tabela routingu jest podzielona na „wiadra”, w których każda pokrywa część przestrzeni. Pusta tabela ma jedno wiadro z zakresem przestrzeni ID min = 0, maks. = 2 160 . Gdy do stołu jest wkładany węzeł z id „n” <= N < Max. Pusty stół ma tylko jedno wiadro, więc każdy węzeł musi się w nim zmieścić. Każde wiadro może pomieścić tylko K, obecnie osiem, zanim stanie się „pełne.„Gdy wiadro jest pełne znanych dobrych węzłów, nie można dodać więcej węzł. W takim przypadku wiadro jest zastępowane dwoma nowymi wiadrami, każda z połową zakresu starego wiadra, a węzły ze starego wiadra są rozmieszczone między dwoma nowymi. W przypadku nowego stołu z tylko jednym wiadrem, pełne wiadro jest zawsze podzielone na dwa nowe wiadra pokrywające zakresy 0..2 159 i 2 159 ..2 160 .

Kiedy wiadro jest pełne dobrych węzłów, nowy węzeł jest po prostu odrzucony. Jeśli wiadomo, że którekolwiek węzły w wiadrze stały się złe, to jeden jest zastępowany przez nowy węzeł. Jeśli w wiadrze są jakieś wątpliwe węzły w ciągu ostatnich 15 minut, najmniej niedawno widoczny węzeł jest pingowany. Jeśli pingowany węzeł odpowiada, wówczas następny niedawno widziany wątpliwy węzeł jest pingowany, dopóki nie odpowiemy lub wszystkie węzły w wiadrze są dobre. Jeśli węzeł w wiadrze nie zareaguje na ping, sugeruje się, aby spróbować jeszcze raz przed odrzuceniem węzła i zastąpienie go nowym dobrym węzłem. W ten sposób tabela wypełnia się stabilnymi długoterminowymi węzłami.

Każde wiadro powinno utrzymywać właściwość „ostatnie zmienioną”, aby wskazać, jak „świeża” zawartość. Gdy węzeł w wiadrze jest pingowany i odpowiada lub węzeł jest dodawany do wiadra lub węzeł w wiadrze jest zastąpiony innym węzłem, ostatnia zmiana właściwości wiadra powinna zostać zaktualizowana. Wiadra, które nie zostały zmienione w ciągu 15 minut, powinny być „odświeżone.„Odbywa się to poprzez wybranie losowego identyfikatora w zakresie wiadra i wykonywanie wyszukiwania go Find_Nodes. Węzły, które mogą odbierać zapytania z innych węzłów, zwykle nie muszą często odświeżać wiader. Węzły, które nie są w stanie odbierać zapytań z innych węzłów, zwykle będą musiały okresowo odświeżyć wszystkie wiadra, aby upewnić się, że w ich tabeli są dobre węzły, gdy potrzebny jest DHT.

Po włożeniu pierwszego węzła do tabeli routingu, a po rozpoczęciu później węzeł powinien próbować znaleźć najbliższe węzły w DHT. Robi to, wydając wiadomości Find_node do bliższych i bliższych węzłów, dopóki nie znajdzie się bliżej. Tabela routingu powinna być zapisana między inwokacją oprogramowania klienta.

Rozszerzenie protokołu BitTorrent

Protokół BitTorrent został rozszerzony na wymianę numerów portów węzłów UDP między rówieśnikami, które są wprowadzane przez tracker. W ten sposób klienci mogą automatycznie wysieszyć swoje tabele routingu poprzez pobieranie zwykłych torrentów. Nowo zainstalowani klienci, którzy próbują pobrać torrent bez śledzenia podczas pierwszej próbki, nie będą mieli węzłów w tabeli routingu i będą potrzebować kontaktów zawartych w pliku torrent.

Rówieśnicy obsługujący DHT ustawił ostatni kawałek 8-bajtowych zarezerwowanych flag wymienianych w uścisku dłoni BitTorrent Protocol. Peer otrzymujący uścisk dłoni wskazujący, że zdalny rówieśnik obsługuje DHT, powinien wysłać wiadomość portu. Zaczyna się od bajtu 0x09 i ma dwupajowy ładunek zawierający port UDP węzła DHT w kolejności bajtowej. Rówieśnicy, którzy otrzymują tę wiadomość, powinni próbować pingować węzeł na odebranym porcie i adres IP zdalnego rówieśnika. Jeśli odpowiedź na ping zostanie otrzymana, węzeł powinien próbować wstawić nowe dane kontaktowe do tabeli routingu zgodnie ze zwykłymi zasadami.

Rozszerzenia plików torrent

Słownik bez śledzenia torrentów nie ma klucza „ogłoszenia”. Zamiast tego torrent bez śledzenia ma klucz „węzłów”. Klucz ten powinien być ustawiony na najbliższe węzły K w tabeli routingu klienta generującego torrent. Alternatywnie, klucz można ustawić na znany dobry węzeł, taki jak osoba obsługiwana przez osobę generującą potok. Nie dodawaj automatycznie „Router.BitTorrent.com "do plików torrentowych lub automatycznie dodaj ten węzeł do tabel routingu klientów.

węzły = [["",], ["",], . ] węzły = [[”127.0.0.1 ", 6881], [" twój.router.Node ", 4804], [" 2001: DB8: 100: 0: D5C8: DB3F: 995E: C0F7 ", 1941]]

Protokół KRPC

Protokół KRPC to prosty mechanizm RPC składający się z słowników Bencoded wysłany przez UDP. Wysyłany jest pojedynczy pakiet zapytania, a pojedynczy pakiet jest wysyłany w odpowiedzi. Nie ma ponownej próbki. Istnieją trzy typy wiadomości: zapytanie, odpowiedź i błąd. W przypadku protokołu DHT istnieją cztery zapytania: ping, find_node, get_peers i ogłasza_pener.

Wiadomość KRPC to pojedynczy słownik z trzema klawiszami wspólnymi dla każdej wiadomości i dodatkowymi klawiszami w zależności od rodzaju wiadomości. Każdy komunikat ma klucz „t” z wartością ciągu reprezentującą identyfikator transakcji. Ten identyfikator transakcji jest generowany przez węzeł zapytania i jest powtórzony w odpowiedzi, więc odpowiedzi mogą być skorelowane z wieloma zapytaniami do tego samego węzła. Identyfikator transakcji powinien być zakodowany jako krótki ciąg liczb binarnych, zazwyczaj 2 znaki są wystarczające, ponieważ obejmują 2^16 zaległych zapytań. Każda wiadomość ma również klucz „y” z jedną wartością znaku opisującym typ wiadomości. Wartość klucza „Y” jest jednym z „Q” dla zapytania, „R” dla odpowiedzi lub „e” dla błędu. Klucz „V” powinien być zawarty w każdej wiadomości z ciągiem wersji klienta. String powinien być dwuparakcyjnym identyfikatorem klienta zarejestrowanym w BEP 20 [3], a następnie identyfikatorem wersji dwóch znaków. Nie wszystkie implementacje zawierają klucz „V”, aby klienci nie powinni zakładać jego obecności.

Kodowanie kontaktu

Informacje kontaktowe dla rówieśników są kodowane jako ciąg 6-bajtowy. Znany również jako „Compact IP-Address/Informacje o porcie” 4-bajtowy adres IP jest w kolejności bajtu sieciowego z 2 bajtowym portem w kolejności bajtowej połączonej na końcu.

Informacje kontaktowe dla węzłów są kodowane jako ciąg 26-bajtowy. Znany również jako „Compact Node Info” 20-bajtowy identyfikator węzła w kolejności bajtu sieciowego zawiera kompaktowe informacje o zaadmowaniu IP/porcie, do końca.

Zapytania

Zapytania lub słowniki komunikatów KRPC o wartości „Y” „Q” zawierają dwa dodatkowe klucze; „Q” i „A”. Klucz „Q” ma wartość ciągu zawierającą nazwę metody zapytania. Klucz „A” ma wartość słownika zawierającą o nazwie argumenty do zapytania.

Odpowiedzi

Odpowiedzi lub słowniki wiadomości KRPC o wartości „y” „r”, zawierają jeden dodatkowy klucz „r”. Wartość „R” jest słownikiem zawierającym nazwane wartości zwrotne. Wiadomości odpowiedzi są wysyłane po pomyślnym zakończeniu zapytania.

Błędy

Błędy lub słowniki wiadomości KRPC o wartości „y” „e” zawierają jeden dodatkowy klucz „e”. Wartość „E” to lista. Pierwszym elementem jest liczba całkowita reprezentująca kod błędu. Drugi element to ciąg zawierający komunikat o błędzie. Błędy są wysyłane, gdy nie można wypełnić zapytania. W poniższej tabeli opisano możliwe kody błędów:

Kod Opis
201 Błąd ogólny
202 błąd serwera
203 Błąd protokołu, taki jak uszkodzony pakiet, nieprawidłowe argumenty lub zły token
204 Metoda nieznana

Przykładowe pakiety błędów:

Błąd ogólny = bencoded = d1: eli201e23: Błąd ogólny OCURREDE1: T2: AA1: Y1: EE

Zapytania DHT

Wszystkie zapytania mają klawisz „id” i wartość zawierającą identyfikator węzła węzła zapytania. Wszystkie odpowiedzi mają klucz „id” i wartość zawierającą identyfikator węzła węzła odpowiadającego.

świst

Najbardziej podstawowym zapytaniem jest ping. „Q” = „ping” zapytanie ping ma jeden argument, „id” Wartość to ciąg 20 bajtów zawierający identyfikator węzła nadawców w kolejności bajtów sieciowych. Odpowiednia odpowiedź na ping ma pojedynczy klucz „id” zawierający identyfikator węzła węzła odpowiadającego.

Argumenty: "> Odpowiedź:">

Ping Query => Bencoded = D1: AD2: ID20: ABCDEFGHIJ0123456789E1: Q4: PING1: T2: AA1: Y1: QE

Odpowiedź => Bencoded = D1: RD2: ID20: MNOPQRSTUVWXYZ123456E1: T2: AA1: Y1: RE

Find_node

Znajdź węzeł służy do znalezienia danych kontaktowych dla węzła, biorąc pod uwagę jego identyfikator. „q” == ”Find_node” Zapytanie Find_Node ma dwa argumenty, „id” zawierający węzeł węzła zapytającego i „cel” zawierający identyfikator węzła poszukiwanego przez Queryer. Gdy węzeł odbiera zapytanie Find_Node, powinien odpowiedzieć kluczowymi „węzłami” i wartością ciągu zawierającego kompaktowe informacje o węźle dla węzła docelowego lub k (8) najbliższe dobre węzły we własnej tabeli routingu.

Argumenty: ",„ Target ":" "> odpowiedź:", "węzły": "">

Find_node Query => bencoded = d1: ad2: id20: abcDefghij01234567896: Target20: mnopqrstuvwxyz123456e1: q9: find_node1: t2: aa1: y1: qe

Odpowiedź => Bencoded = D1: RD2: ID20: 0123456789ABCDEFGHIJ5: Węzły9: def456. E1: T2: AA1: Y1: Re

get_peers

Uzyskaj rówieśników powiązanych z informacjami z potoku. „q” = „get_peers” Zapytanie get_peers ma dwa argumenty, „id” zawierający identyfikator węzła węzła zapytania oraz „info_hash” zawierającego informahash torrentu. Jeśli zapytający węzeł ma rówieśników dla InfoHash, zostaną zwrócone w kluczowym „wartościach” jako lista ciągów. Każdy ciąg zawierający „kompaktowe” informacje o rówieśników dla jednego rówieśniczego. Jeśli zapytany węzeł nie ma rówieśników dla InfoHash, zwracane są kluczowe „węzły” zawierające węzły K w tabeli routingu zapytających najbliżej InfoHash dostarczonych w zapytaniu. W obu przypadkach klawisz „tokena” jest również zawarty w wartości zwracanej. Wartość tokena jest wymaganym argumentem dla przyszłego zapytania o ogłoszenie. Wartość tokena powinna być krótkim ciągiem binarnym.

Argumenty: ","

Get_peers Query => bencoded = D1: ad2: id20: abcDefghij01234567899: info_hash20: mnopqrstuvwxyz123456e1: q9: get_peers1: t2: aa1: y1: qe

Odpowiedź z rówieśnikami => bencoded = D1: RD2: ID20: ABCDEFGHIJ01234567895: TOKEN8: AOEUSNTH6: WartośćL6: Axje.U6: idhtnmee1: T2: AA1: Y1: Re

Odpowiedź z najbliższymi węzłami => bencoded = D1: RD2: ID20: ABCDEFGHIJ01234567895: Węzły9: def456. 5: token8: aoeusnthe1: t2: aa1: y1: re

Ogłoszenie_peer

Ogłasza, że ​​rówieśnik, kontrolując węzeł zapytania, pobiera torrent na porcie. Ogłoszenie_peeer ma cztery argumenty: „id” zawierający identyfikator węzła węzła zapytania, „info_hash” zawierający InfoHash torrentów, „port” zawierający port jako liczbę całkowitą, a „token” otrzymany w odpowiedzi na poprzednie zapytanie GET_PEERS. Węzeł zapytania musi sprawdzić, czy token został wcześniej wysłany na ten sam adres IP co węzeł zapytania. Następnie zapytany węzeł powinien przechowywać adres IP węzła zapytania i dostarczony numer portu w ramach InfoHash w magazynie danych kontaktowych rówieśników.

Istnieje opcjonalny argument, nazywany Impied_port Która wartość to 0 lub 1. Jeśli jest obecny i niezerowy, Port Argument powinien zostać zignorowany, a zamiast tego portu źródłowego pakietu UDP powinien być używany jako port równorzędny. Jest to przydatne dla rówieśników za NAT, który może nie znać swojego portu zewnętrznego, i obsługi UTP, akceptują połączenia przychodzące na tym samym porcie, co port DHT.

Argumenty: ",„ Implied_port ":,„ info_hash ”:„ ”,„ port ”:,„ token ”:„ ”> odpowiedź:">

Ogłoszenie_peers Query => bencoded = D1: ad2: id20: abcDefghij012345678912: Implied_porti1e9: info_hash20: mnopqrstuvwxyz1234564: Porti6881e5: token8: aoeusnthe1: q13: Annoce_peer1: T2: AA1

Odpowiedź => Bencoded = D1: RD2: ID20: MNOPQRSTUVWXYZ123456E1: T2: AA1: Y1: RE

Bibliografia

[1] Peter Maymounkov, David Mazieres, „Kademlia: system informacyjny peer-to-peer oparty na metryce XOR”, IPTPS 2002. http: // www.Cs.Ryż.edu/konferencje/IPTPS02/109.PDF
[2] Użyj SHA1 i mnóstwo entropii, aby zapewnić unikalny identyfikator.
[3] BEP_0020. Konwencje rówieśnicze. (http: // www.BitTorrent.Org/BEPS/BEP_0020.html)

Prawo autorskie

Ten dokument został umieszczony w domenie publicznej.

WebTorrent/BitTorrent-Dht

Ten zatwierdzenie nie należy do żadnego oddziału w tym repozytorium i może należeć do widelca poza repozytorium.

Przełącz gałęzie/tagi

Tagi gałęzi

Nie mogło załadować gałęzi

Nic do pokazania

Nie mogło załadować tagów

Nic do pokazania

Nazwa już używana

Tag już istnieje z podaną nazwą gałęzi. Wiele poleceń git akceptuje nazwy tagów i gałęzi, więc tworzenie tej gałęzi może powodować nieoczekiwane zachowanie. Czy na pewno chcesz utworzyć tę gałąź?

Anuluj Utwórz

  • Lokalny
  • Kodespaces

Https github cli

Użyj git lub kasy z SVN za pomocą adresu URL internetowego.

Pracuj szybko z naszym oficjalnym CLI. Dowiedz się więcej o CLI.

Rejestracja jest wymagana

Zaloguj się, aby korzystać z kodesprzeń.

Uruchamianie pulpitu Github

Jeśli nic się nie stanie, pobierz github komputer i spróbuj ponownie.

Uruchamianie pulpitu Github

Jeśli nic się nie stanie, pobierz github komputer i spróbuj ponownie.

Uruchamianie Xcode

Jeśli nic się nie stanie, pobierz Xcode i spróbuj ponownie.

Uruchamianie kodu Visual Studio

Twój kodespace otworzy się po gotowaniu.

Wystąpił problem z przygotowaniem kody.

Najnowsze zatwierdzenie

3B4ED64 8 maja 2023

… V1.0.9

GIT Stats

Akta

Nie udało się załadować najnowszych informacji o zatwierdzeniu.

Najnowsza wiadomość o zatwierdzeniu

Popełnić czas

Readme.MD

Prosta, solidna, bitTorrent DHT Implementation

Węzeł.Wdrożenie JS protokołu DHT BitTorrent. BitTorrent DHT to główna warstwa odkrycia rówieśniczego dla BitTorrent, która pozwala na torrenty bez śledzenia. DHT są niesamowite!

Ten moduł jest używany przez WebTorrent.

  • Pełna implementacja protokołu DHT w JavaScript
  • podąża za specyfikacją
  • obsługuje BEP44 do przechowywania dowolnych danych w DHT
  • solidny i dobrze przetestowany
    • Kompleksowy pakiet testowy w pełni Offline
    • Używane przez WebTorrent, Peerflix i odtwarzanie

    NPM Instaluj BitTorrent-DHT 

    NPM Instaluj magnes-URI 

    import DHT z „BitTorrent-DHT” import magnes z „Magnet-Uri” const URI = 'magnes:?XT = URN: BTIH: E3811B9539CACFF680E418124272177C474777157 ” const przeanalizowany = magnes(URI) konsola.dziennik(przeanalizowany.Infohash) // 'E3811B9539CACFF680E418124272177C47477157 ” const DHT = nowy DHT() DHT.Słuchać(20000, funkcjonować ()  konsola.dziennik('teraz słuchaj') >) DHT.NA('rówieśnik', funkcjonować (rówieśnik, Infohash, z)  konsola.dziennik(„Znalazłem potencjalnego rówieśnika” + rówieśnik.gospodarz + „:” + rówieśnik.Port + ' Poprzez ' + z.adres + „:” + z.Port) >) // Znajdź rówieśników dla danego skrótu informacyjnego potoku DHT.spojrzeć w górę(przeanalizowany.Infohash)

    dht = nowy DHT ([opts])

    Utwórz nową instancję DHT.

    Jeśli określono OPT, wówczas opcje domyślne (pokazane poniżej) zostaną zastąpione.

     Nodeid: '', // 160-bitowy identyfikator węzła DHT (bufor lub ciąg sześciokątny, domyślnie: losowo wygenerowane) Bootstrap: [[[], // serwery bootstrap (domyślnie: router.BitTorrent.com: 6881, router.Utorrent.com: 6881, DHT.transmissionbt.com: 6881) gospodarz: FAŁSZ, // gospodarz lokalnego rówieśnika, jeśli określono, wówczas ogłasza dodanie do tabeli lokalnej (domyślnie wyłączony) konkurencja: 16, // K-RPC Opcja do określenia maksymalnych jednoczesnych żądań UDP (Numer, 16 domyślnie) haszysz: Funkcjonować, // Niestandardowa funkcja skrótu do użycia (domyślnie funkcja, SHA1), KRPC: KRPC(), // Opcjonalna instancja K-RPC TimeBucketoutated: 900000, // Sprawdzaj wiadra co 15 minut Maxage: Nieskończoność // Opcjonalne ustawienie dla ogłoszonych rówieśników do czasu >

    Aby użyć DHT_store, ustaw OPTS.Sprawdź wdrożenie ED25519 SuperCop/Ref10. opts.Verify (podpis, wartość, publickey) powinien zwrócić logikę, czy bufory podpisu i wartości zostały wygenerowane przez klucz .

    Na przykład dla DHT_store możesz zrobić:

    import wyd z „ed25519-supercop” const DHT = nowy DHT( zweryfikować: wyd.zweryfikować >)

    Znajdź rówieśników dla danego skrótu informacji.

    To rekurencyjne wyszukiwanie w DHT. Potencjalne odkryte rówieśników są emitowane jako zdarzenia rówieśnicze. Więcej informacji można znaleźć w wydarzeniu peer, aby uzyskać więcej informacji.

    InfoHash może być ciągiem lub buforem. wywołanie wywoływania jest wywoływane, gdy wyszukiwanie rekurencyjne zakończyło się i jest wywoływane z dwoma paramaterami. Pierwszy to błąd lub null. Drugi to liczba znalezionych węzłów, które miały rówieśników. Zwykle nie musisz używać tych informacji i możesz po prostu słuchać zdarzeń rówieśniczych.

    Zwraca funkcję abort (), która pozwoliłaby nam przerwać zapytanie.

    DHT.Słuchaj ([port], [Adres], [onlistening])

    Spraw, aby DHT słuchał na danym porcie . Jeśli port jest niezdefiniowany, dostępny port jest automatycznie wybierany.

    Jeśli adres zostanie niezdefiniowany, DHT będzie próbował słuchać wszystkich adresów.

    Jeśli zdefiniowano onlisting, jest ono dołączone do imprezy słuchania.

    Zwraca obiekt zawierający informacje o adresie dla gniazda słuchania DHT. Ten obiekt zawiera adres, właściwości rodzinne i portu.

    DHT.Ogłosze (InfoHash, [Port], [Callback])

    Ogłasza, że ​​rówieśnik, kontrolując węzeł zapytania, pobiera torrent na porcie.

    Jeśli pominiesz port, zostanie ustawiona opcja poruszonego portu, a inni rówieśnicy używają publicznego portu DHT jako ogłoszonego portu.

    Jeśli DHT.ogłasza się i nie ma stolika routingu buforowanego, a następnie DHT.Wyszukiwanie zostanie najpierw wykonane w celu odkrycia odpowiednich węzłów i uzyskania ważnych „tokenów” z każdego z nich. To potrwa dłużej.

    „Token” to nieprzezroczysta wartość, którą należy przedstawić dla węzła, aby ogłosić, że jego kontrolujący rówieśnik pobiera torrent. Musi przedstawić token otrzymany z tego samego zapytającego węzła w ostatnim zapytaniu dla rówieśników. Ma to na celu zapobieganie rejestracji złośliwych gospodarzy innych gospodarzy do torrentów. Wszystkie zarządzanie tokenami jest obsługiwane wewnętrznie przez ten moduł.

    oddzwonienie zostanie wywołane po zakończeniu operacji ogłoszenia i jest wywoływane z jednym parametrem, który jest błędem lub null.

    Zwraca bieżący stan DHT, w tym węzły DHT i wartości BEP44.

    < &bdquo;Węzły&rdquo;: [], &bdquo;Wartości&rdquo;: <>>

    W szczególności węzły DHT są przydatne do utrzymywania DHT na dysku między ponownym uruchomieniem klienta BitTorrent (zgodnie z zaleceniami specyfikacji). Każdy węzeł w tablicy jest obiektem z właściwościami hosta (ciąg) i portu (numeru).

    Aby przywrócić węzły DHT podczas instancji nowego obiektu DHT, po prostu zapętla się nad węzłami w tablicy i dodaj je za pomocą metody Addnode.

    const DHT1 = nowy DHT() // minie trochę czasu . // Zniszcz DHT const węzły = DHT1.Tojson().węzły DHT1.zniszczyć() // minie trochę czasu . // Zainicjuj nowy DHT z tą samą tabelą routingu, co pierwszy const DHT2 = nowy DHT() węzły.dla każdego(funkcjonować (węzeł)  DHT2.addnode(węzeł) >)

    Ręcznie dodaj węzeł do tabeli routingu DHT. Jeśli w tabeli routingu jest miejsce (lub można eksmitować węzeł niereagujący. Jeśli nie, węzeł nie zostanie dodany. Jest to przydatne do wywołania, gdy drut równorzędny wysyła wiadomość portu, aby udostępnić swój port DHT.

    Węzeł powinien wyglądać tak:

     gospodarz: Nodehost, Port: Nodeport >

    Zniszcz DHT. Zamyka gniazdo i oczyszcza duże zasoby struktury danych.

    Napisz do DHT arbitralny ładunek. (BEP 44).

    W przypadku wszystkich żądań musisz określić:

    • opts.V - ładunek bufora do pisania, mniej niż 1000 bajtów

    Jeśli określisz tylko OPT.v, treść jest uważana za niezmienna, a skrót będzie po prostu skrótem treści.

    Oto prosty przykład tworzenia niezmiennych treści na DHT:

    import DHT z &bdquo;BitTorrent-DHT&rdquo; const DHT = nowy DHT() const wartość = Bufor.all(200).wypełnić('ABC') DHT.umieścić( v: wartość >, funkcjonować (błądzić, haszysz)  konsola.błąd('error =', błądzić) konsola.dziennik(&bdquo;Hash =&rdquo;, haszysz) >)

    W przypadku zmiennej treści, skrót będzie skrótem klucza publicznego, opts.k . Te opcje są dostępne:

    • opts.K - ED25519 Bufor klucza publicznego (32 bajty) (wymagane)
    • opts.Znak (BUF) - Funkcja do wygenerowania buforu podpisu ED25519 (64 bajtów) odpowiadającego Opts.K klucz publiczny (wymagany)
    • opts.SEQ - Opcjonalna sekwencja (liczba całkowita), musi monotonicznie wzrosnąć (wymagane)
    • opts.CAS-Opcjonalna poprzednia sekwencja do porównywania i pływania
    • opts.sól - opcjonalny bufor soli (

    Zauważ, że BitTorrent BEP44 używa ED25519. Możesz użyć pakietu ED25519-SuperCop, aby wygenerować odpowiednie podpisy, BitTorrent-DHT-Store-KeyPair, BitTorrent-DHT-Sodium lub do wygodniejszej wersji.

    Aby dokonać zmiennej aktualizacji, musisz utworzyć klucz eliptyczny i pakować wartości precyzyjnie zgodnie ze specyfikacją, tak jak:

    import wyd z &bdquo;BitTorrent-DHT-Sodium&rdquo; const klawiaturnik = wyd.generator kluczy() const wartość = Bufor.all(200).wypełnić('cokolwiek') // ładunek, który chcesz wysłać const opts =  k: klawiaturnik.Pk, SEQ: 0, v: wartość, podpisać: funkcjonować (BUF)  powrót wyd.podpisać(BUF, klawiaturnik.Sk) > > import DHT z &bdquo;BitTorrent-DHT&rdquo; const DHT = nowy DHT() DHT.umieścić(opts, funkcjonować (błądzić, haszysz)  konsola.błąd('error =', błądzić) konsola.dziennik(&bdquo;Hash =&rdquo;, haszysz) >)

    W formularzach zmiennych lub niezmiennych, wywołanie zwrotne (błąd, skrót, n) pali się z błędem, jeśli żadne węzły nie były w stanie przechowywać wartości . N jest ustawiona ilość rówieśników, którzy przyjęli put i skrót, lokalizację, w której można pobrać zmienną lub niezmienną zawartość (z DHT.Get (Hash)).

    Zauważ, że powinieneś zadzwonić .PUT () co godzinę dla treści, które chcesz zachować przy życiu, ponieważ węzły mogą odrzucić węzły danych starsze niż 2 godziny.

    Jeśli otrzymasz parę klucza/wartości i chcesz ponownie dodać do DHT, aby utrzymać go przy życiu, możesz po prostu umieścić to ponownie.

    import wyd z &bdquo;BitTorrent-DHT-Sodium&rdquo; const DHT = nowy DHT( zweryfikować: wyd.zweryfikować >) // MUSISZ określić param &bdquo;weryfikację&rdquo;, jeśli chcesz uzyskać zmienną zawartość, w przeciwnym razie NULL zostanie zwrócony DHT.Dostawać(klucz, funkcjonować (błądzić, res)  DHT.umieścić(res, funkcjonować ()  // ponownie dodał parę klucza/wartości >) >)

    DHT.Get (Hash, Opts, Callback)

    Przeczytaj rekord danych (utworzony za pomocą .put ()) z DHT. (BEP 44)

    Biorąc pod uwagę Hash, ciąg sześciokątny lub bufor, zawartość danych wyszukiwania z DHT, wysyłając wynik w wywołaniu zwrotnym (ERR, RES) .

    Te opcje są dostępne:

    • opts.Sprawdź - Zastąp domyślną funkcję weryfikacji ED25519 Dostarczoną podczas instancji DHT.
    • opts.Sól - opcjonalny bufor soli (jeśli istnieje), który został użyty do obliczenia skrótu. Należy określić, jeśli zawarte w skrócie.
    • opts.pamięć podręczna - Użyj lokalnie buforowanej wartości odpowiedzi, jeśli jest dostępna zamiast wykonywania wyszukiwania sieciowego (domyślnie do true).

    Obiekty RES są podobne do obiektów opcji zapisanych w DHT z .umieścić() :

    • res.v - Wartość wprowadzona
    • res.id - węzeł, który zwrócił treść
    • res.K - klucz publiczny (obecny tylko dla danych zmiennych)
    • res.SIG - podpis (obecny tylko dla danych zmiennych)
    • res.SEQ - sekwencja (opcjonalna, obecna tylko dla danych zmiennych)

    Emitowany, gdy DHT jest w pełni strefy (i.mi. Tabela routingu jest wystarczająco wypełniona za pomocą węzłów bootstrap). Zwróć uwagę, że można zrobić wyszukiwania przed wypalaniem &bdquo;gotowego&rdquo; wydarzenia.

    Uwaga: jeśli zainicjujesz DHT z < bootstrap: false >Opcja, wówczas zdarzenie &bdquo;gotowe&rdquo; wystrzeli na następny kleszcz, nawet jeśli nie ma węzłów w tabeli routingu. Zakłada się, że ręcznie wypełniasz tabelę routingu DHT.Dodaj, jeśli zdasz tę opcję.

    Emitowany, gdy DHT słucha.

    DHT.on (&bdquo;peer&rdquo;, funkcja (peer, infohash, od) < . >)

    Emitowany, gdy znaleziono potencjalnego rówieśnika. rówieśnik ma formę . Infohash to skrót informacji o roju, do którego należy rówieśnik. Emitowany w odpowiedzi na wywołanie wyszukiwania (InfoHash).

    DHT.on (&bdquo;błąd&rdquo;, funkcja (err) < . >)

    Emitowany, gdy DHT ma błąd śmiertelny.

    DHT.na (&bdquo;węzeł&rdquo;, funkcja (węzeł) < . >)

    Emitowany, gdy DHT znajdzie nowy węzeł.

    DHT.ON (&bdquo;Ogłosze&rdquo;, funkcja (peer, infohash) < . >)

    Emitowany, gdy rówieśnik ogłasza się, aby być przechowywanym w DHT.

    DHT.na (&bdquo;ostrzeżenie&rdquo;, funkcja (err) < . >)

    Emitowany, gdy DHT otrzyma nieoczekiwaną wiadomość z innego węzła DHT. To jest czysto informacyjne.

    • BitTorrent DHT Protocol
    • Kademlia: system informacyjny peer-to-peer oparty na metryce XOR

    MTE wyjaśnia: Jak działa Bittorrent DHT Peer Discovery

    Odkrycie rówieśniczego jest istotną częścią protokołu Bittorrent. To&rsquo;S Jak jego pobieranie zdarzają się tak szybko: łączysz się z wieloma osobami, a każdy z nich przesyła ci mały kawałek pliku. To zjawisko stworzyło bardzo popularny sposób pobierania i udostępniania informacji w Internecie, zarówno uzasadnionych, jak i nielegalnych. Niezależnie od skutków, jakie miał na własność intelektualną, ja&rsquo;M tutaj, aby opisać jedną rzecz: jak naprawdę działa cały proces odkrywania rówieśników BitTorrent DHT. Możesz wiedzieć trochę (lub dużo) o tym mechanizmie, ale na pewno wystarczy&rsquo;ciekawy, co oznacza termin DHT i jak wymienione pod nim rówieśnicy znaleźli cię w pierwszej kolejności.

    Co oznacza DHT?

    DHT jest skrót &ldquo;Tabela skrótów rozproszonych,&rdquo; i reprezentuje medium, za pomocą którego znajdziesz rówieśników, znane również jako &ldquo;Bootstrapping.&rdquo; I&rsquo;wyjaśnij to za chwilę. Pamiętaj tylko o tym, że możesz znaleźć rówieśników przez DHT.

    Lokalizacja BitTorrent DHT

    Podczas gdy wiele osób to mówi&rsquo;jest zdecentralizowany, to&rsquo;jest to bardzo trudne do tego, biorąc pod uwagę charakter Internetu pojedynczego. Kiedy łączysz się z Internetem, nie&rsquo;T Ogłaszaj swoją obecność miliardom już połączonych komputerów. To po prostu marnuje ogromną ilość przepustowości. Zamiast tego lokalny dostawca usług internetowych&rsquo;Router, a także docelowe, z którymi się łączysz, są jedynymi, którzy cię zdają&rsquo;Re nawet online. To&rsquo;co &ldquo;Uncast&rdquo; oznacza, w laigu&rsquo;s Warunki. Multicast jest tym, co dzieje się, gdy komputer dostanie się do sieci lokalnej. Jego obecność jest znana każdemu innym komputerowi w tej samej podsieci i oni&rsquo;teraz świadomy twojej obecności. Ponieważ to nie&rsquo;Tam zdarza się w zewnętrznym Internecie&rsquo;naprawdę nie ma sposobu na komponowanie całkowicie zdecentralizowanej struktury, biorąc pod uwagę ograniczenia samego protokołu BitTorrent.

    W rezultacie istnieje dwa główne DHT, z którymi się łączysz, kiedy zaczniesz pobierać plik torrentów: router.BitTorrent.com I router.Utorrent.com. W przypadku, gdy&rsquo;ciekawy, łączysz się z nimi na porcie 6881. To&rsquo;nie jest absolutnie konieczne do zapamiętania tych informacji. Czasami dane peer są osadzone w pliku torrentów, aby ułatwić proces znajdowania rówieśników.

    Bootstrapping

    Bitdht-Discovery

    Aby rozpocząć gromadzenie rówieśników, trzeba najpierw ładować się w sieci torrent. Bootstrapping to po prostu fantazyjny sposób opisania procesu łączenia się z DHT i znajdowaniem rówieśników. Po podłączeniu serwer DHT wyśle ​​garść równorzędnych adresów IP, które Ty&rsquo;LL również się z. Oni&rsquo;Daj ci adresy rówieśników z nimi itd. I tak dalej, dopóki twoja lista rówieśnicza nie pokaże wszystkich rówieśników do pobierania (lub wysiewania) pliku&rsquo;Próbuję zdobyć. To&rsquo;jak podążać za drzewem od korzeni do gałęzi.

    Teoretycznie, naprawdę potrzebujesz tylko jednego adresu rówieśniczego, aby zdobyć wszystkich innych rówieśników, ponieważ podzieli się z Tobą resztą adresów. Oszczędza to trackery i DHT tonę przepustowości, która w przeciwnym razie zostałaby zmarnowana na wysyłanie list rówieśników do każdego nowego połączenia rówieśników i powiadamianie każdej osoby, gdy jedna z nich się rozłącza. Kłopot jest zminimalizowany przez przekazanie sobie wzajemnych informacji.

    Po tobie&rsquo;Znalazłem wszystkich twoich rówieśników, zaczyna się twoje pobieranie!

    Jeśli DHT tam są, dlaczego większość ludzi nadal używa śledzących?

    DHT może być zabawne, ale większość ludzi nadal używa śledzących do pobierania swoich danych. Wynika to z nieodłącznej natury DHT. Pozwalać&rsquo;powiedzmy, że mam witrynę, w której przesyłam kilka moich dzieł open source jako torrenty. Aby w pełni kontrolować to, co dzieje się z tymi torrentami i chronić prywatność osób pobierających je, to&rsquo;jest bardziej lukratywny, że mogę gościć własny tracker. Witryny, które publikują nielegalne pobieranie, używają śledzer.

    To powiedziawszy, nie wszystkie pobierania torrentów są nielegalne. Tam&rsquo;s ogromne repozytorium projektów typu open source i dzieł publicznych przez osoby, które chcą po prostu dzielić się tym, co mają bez marnowania przepustowości swoich hostów.

    Zdezorientowany?

    Jeśli ty&rsquo;nadal zaskoczono udostępnionymi tutaj informacjami, zostaw komentarz poniżej i możemy omówić!

    Miguel Leiva-Gomez

    Miguel jest ekspertem od rozwoju i technologii od ponad dekady i pisał oprogramowanie jeszcze dłużej. Ze swojego małego zamku w Rumunii przedstawia zimne i analityczne perspektywy na rzeczy, które wpływają na świat technologii.

    Zapisz się do naszego newslettera!

    Nasze najnowsze samouczki dostarczone bezpośrednio do Twojej skrzynki odbiorczej