Hur upptäcker en Bittorrent-klient ursprungligen sina medarbetare?
När din torrentklient sammanfogar svärmen för att dela och samla filstycken, hur exakt vet den var alla sina kamrater är? Läs vidare när vi pekar inuti de mekanismer som undergått BitTorrent-protokollet.
Dagens Question & Answer-session kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.
Frågan
SuperUser-läsaren Steve V. hade en mycket specifik fråga om Distributed Hash Table (DHT) -systemet inom BitTorrent-protokollet:
Jag har redan läst det här SuperUser-svaret och den här Wikipedia-artikeln men båda är för tekniska för att jag verkligen ska sätta mitt huvud runt.
Jag förstår tanken på en spårväg: Klienterna ansluter till en central server som upprätthåller en lista med kamrater i en svärm.
Jag förstår också idén om peer-utbyte: Klienter som redan är i svärm skickar komplett lista över sina kamrater till varandra. Om nya kamrater upptäcks läggs de till i listan.
Min fråga är hur fungerar DHT? Det är, hur kan en ny klient ansluta sig till en svärm utan någon spårare eller kunskap om minst en medlem av svärmen för att utbyta kamrater med?
(Obs! Enkela förklaringar är bäst.)
Hans fråga fick i sin tur ett riktigt detaljerat svar om BitTorrent-systemets olika funktioner. låt oss ta en titt på det nu.
Svaret
SuperUser-bidragsgivaren Allquixotic erbjuder en fördjupad förklaring:
Hur kan en ny klient vara med en svärm utan antingen en spårare eller kunskap om minst en medlem av svärmen för att utbyta kamrater med?
Du kan inte. Det är omöjligt.*
* (Om inte en nod på din lokalt nätverk råkar redan vara en nod i DHT. I det här fallet kan du använda en sändningsmekanism, som Avahi, för att "upptäcka" denna peer och bootstrap från dem. Men hur gjorde det? de bootstrap själva? Så småningom kommer du att träffa en situation där du behöver ansluta till det offentliga Internet. Och det offentliga Internetet är unicast-only, inte multicast, så du är fast vid att använda förutbestämda listor av kamrater.)
referenser
Bittorrent DHT implementeras via ett protokoll som kallas Kademlia, vilket är ett speciellt fall av teoretiskt koncept för ett distribuerat hashbord.
Utläggning
Med Kademlia-protokollet, när du går med i nätverket, går du igenom en bootstrapping-procedur, vilket absolut kräver att du vet, i förväg, IP-adressen och porten på minst en nod som redan deltar i DHT-nätverket. Spåraren som du ansluter till kan till exempel vara en DHT-nod. När du är ansluten till en DHT-nod fortsätter du sedan ladda ner information från DHT, som ger dig anslutningsinformation för flera noder, och du navigerar sedan på den "grafstrukturen" för att få anslutningar till fler och fler noder, som kan ge både anslutning till andra noder och nyttolastdata (bitar av nedladdningen).
Jag tror att din faktiska fråga i fetstil - det där med hur man går med i ett Kademlia DHT-nätverk utan att veta någraandra medlemmar - bygger på ett felaktigt antagande.
Det enkla svaret på din fråga med fetstil är, det gör du inte. Om du inte känner till någon information alls om ens en värd som kan innehålla DHT-metadata, är du fast - du kan inte ens komma igång. Jag menar säkert, du kan brute force försök att upptäcka en IP på det offentliga internet med en öppen port som händer att sända DHT information. Men mer troligt är din BT-klient hårdkodad till någon specifik statisk IP eller DNS som löser sig till en stabil DHT-nod, som bara ger DHT-metadata.
I grund och botten är DHT bara så decentraliserat som anslutningsmekanismen, och eftersom anslutningsmekanismen är ganska spröd (det finns inget sätt att "sända" över hela Internet! Så måste du unicasttill en individuell fördelad värd för att få DHT-data), är Kademlia DHT inte verkligen decentraliserat. Inte i ordets strängaste bemärkelse.
Tänk på detta scenario: Någon som vill att P2P ska sluta går ut och förbereder en attack på Allt vanligt använda stabila DHT noder som används för bootstrapping. När de har arrangerat sin attack, spring de på det Allt noder på en gång. Pang; varje enskild bootstrapping DHT-nod är nere i ett fall. Nu då? Du är fast i att ansluta till centraliserade trackers att ladda ner traditionella listor av kamrater från dem. Tja, om de också attackerar trackersna så är du verkligen, verkligen upp en bäck. Med andra ord begränsas Kademlia och hela BT-nätet av Internetets begränsningar, eftersom det finns ett begränsat antal (och relativt små) datorer som du skulle behöva attackera eller ta offline för att förhindra> 90% av användare från att ansluta till nätverket.
När de "pseudo-centraliserade" bootstrapping noderna är borta, är DHT: s inre noder, som inte bootstrappas eftersom ingen på utsidan av DHT vet om de inre nodarna, är värdelösa; de kan inte föra nya noder i DHT. Så eftersom varje inre nod kopplas från DHT över tiden, antingen på grund av att människor stänger av sina datorer, startar om uppdateringar etc. skulle nätverket kollapsa.
Naturligtvis för att komma runt detta kan någon distribuera en patched BitTorrent-klient med en ny lista över förutbestämda stabila DHT-noder eller DNS-adresser och annonsera högt till P2P-gruppen för att använda den här nya listan istället. Men det skulle bli en "whack-a-mole" -situation där aggressorn (noder-eatern) skulle ladda ner dessa listor progressivt och rikta sig mot de modiga nya uppstartningsnoden, ta dem offline också.
Inte bara lärde vi oss svaret på den ursprungliga frågan men vi lärde oss också ganska lite om BitTorrent-systemet och dess sårbarheter.
Har du något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.