Hoe ontdekt een Bittorrent-cliënt in eerste instantie zijn collega's?
Wanneer je torrent-client zich bij de zwerm voegt om bestandsstukken te delen en verzamelen, hoe weet hij dan precies waar al zijn leeftijdsgenoten zijn? Lees verder terwijl we rondneuzen in de mechanismen die het BitTorrent-protocol ondersteunen.
De Question & Answer-sessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een gemeenschapsgedreven groep van Q & A-websites.
De vraag
SuperUser-lezer Steve V. had een zeer specifieke vraag over het Distributed Hash Table (DHT) -systeem binnen het BitTorrent-protocol:
Ik heb dit SuperUser-antwoord en dit Wikipedia-artikel al gelezen, maar beide zijn te technisch voor mij om echt mijn hoofd eromheen te wikkelen.
Ik begrijp het idee van een tracker: clients maken verbinding met een centrale server die een lijst met peers in een zwerm bijhoudt.
Ik begrijp ook het idee van peer-uitwisseling: klanten die al in een zwerm zitten, sturen de volledige lijst van hun leeftijdsgenoten naar elkaar. Als nieuwe peers worden ontdekt, worden ze aan de lijst toegevoegd.
Mijn vraag is, hoe werkt DHT? Dat is, hoe kan een nieuwe klant lid worden van een zwerm zonder een tracker of de kennis van minstens één lid van de zwerm om leeftijdsgenoten uit te wisselen met?
(Opmerking: eenvoudige uitleg is het beste.)
Zijn vraag op zijn beurt leidde tot een heel gedetailleerd antwoord over de verschillende functies van het BitTorrent-systeem; laten we er nu eens naar kijken.
Het antwoord
SuperUser-bijdrager Allquixotic biedt een diepgaande uitleg:
Hoe kan een nieuwe klant lid worden van een zwerm zonder een tracker of de kennis van minstens één lid van de zwerm om leeftijdsgenoten uit te wisselen met?
Dat kan je niet. Het is onmogelijk.*
* (Tenzij een knoop op uw lokaal netwerk toevallig al een knooppunt in de DHT. In dit geval zou je een uitzendmechanisme, zoals Avahi, kunnen gebruiken om deze peer te "ontdekken", en er een bootstrap van te maken. Maar hoe deed dat ze bootstrap zelf? Uiteindelijk kom je in een situatie waarin je verbinding moet maken met het openbare internet. En het openbare internet is unicast-only, niet multicast, dus je zit vast aan het gebruik van vooraf bepaalde lijsten met peers.)
Referenties
Bittorrent DHT wordt geïmplementeerd via een protocol dat bekend staat als Kademlia, wat een speciaal geval is van een theoretisch concept van een verdeelde hashtabel.
Expositie
Met het Kademlia-protocol, als je lid wordt van het netwerk, doorloop je een bootstrapping-procedure, wat absoluut vereist dat je het weet, Alvast, het IP-adres en de poort van ten minste één knooppunt dat al deelneemt aan het DHT-netwerk. De tracker waarmee u verbinding maakt, kan bijvoorbeeld zelf een DHT-knooppunt zijn. Nadat u bent verbonden met één DHT-knooppunt, gaat u verder met het downloaden van informatie van de DHT, die u aansluitingsinformatie voor meer knooppunten biedt, en vervolgens navigeert u naar die "grafiek" -structuur om verbindingen te verkrijgen met meer en meer knooppunten, die zowel connectiviteit met andere knooppunten en payload-gegevens (brokken van de download).
Ik denk dat je eigenlijke vraag vetgedrukt staat: die van hoe je je bij een Kademlia DHT-netwerk kunt voegen zonder het te weten iederandere leden - is gebaseerd op een valse veronderstelling.
Het eenvoudige en vetgedrukte antwoord op uw vraag is, jij niet. Als je helemaal geen informatie hebt over zelfs maar één host die DHT-metadata kan bevatten, zit je vast - je kunt zelfs niet aan de slag. Ik bedoel, zeker, je zou brute force kunnen proberen om een IP op het openbare internet te ontdekken met een open poort die toevallig DHT-informatie uitzendt. Maar waarschijnlijker is dat uw BT-client een harde codering heeft naar een specifiek statisch IP of DNS dat wordt omgezet naar een stabiel DHT-knooppunt, dat alleen de DHT-metadata levert.
Kortom, de DHT is alleen zo gedecentraliseerd als het verbindingsmechanisme en omdat het verbindingsmechanisme redelijk broos is (er is geen manier om over het hele internet te "broadcasten"! Dus je moet unicastnaar een individuele vooraf toegewezen host om de DHT-gegevens te krijgen), Kademlia DHT niet werkelijk gedecentraliseerd. Niet in de strikte zin van het woord.
Stel je dit scenario eens voor: Iemand die wil dat P2P stopt, gaat uit en bereidt een aanval voor allemaal veelgebruikte stabiele DHT-knooppunten die worden gebruikt voor bootstrapping. Zodra ze hun aanval hebben geënsceneerd, springen ze erop allemaal knooppunten tegelijk. Wham; elke bootstrapping DHT-knooppunt is alles in een klap. Wat nu? Je zit vast aan het verbinden met gecentraliseerde trackers om traditionele lijsten van peers daaruit te downloaden. Nou, als ze ook de trackers aanvallen, dan ben je echt, werkelijk een kreek op. Met andere woorden, Kademlia en het hele BT-netwerk worden beperkt door de beperkingen van het internet zelf, in die zin dat er een eindig (en relatief klein) aantal computers is dat je zou moeten aanvallen of offline zou moeten nemen om> 90% te voorkomen van gebruikers om verbinding te maken met het netwerk.
Zodra de "pseudo-gecentraliseerde" bootstrapping nodes allemaal weg zijn, zijn de binnenknopen van de DHT, die niet bootstrappen omdat niemand aan de buitenkant van de DHT weet van de binnenknopen, zijn nutteloos; ze kunnen geen nieuwe knooppunten in de DHT brengen. Dus, omdat elk binnenknooppunt zich in de loop van de tijd loskoppelt van de DHT, hetzij doordat mensen hun computers afsluiten, rebooten voor updates, enz., Zou het netwerk instorten.
Natuurlijk, om dit te omzeilen, zou iemand een gepatchte BitTorrent-client kunnen implementeren met een nieuwe lijst van vooraf bepaalde stabiele DHT-knooppunten of DNS-adressen, en luid adverteren met de P2P-gemeenschap om deze nieuwe lijst te gebruiken. Maar dit zou een "whack-a-mole" -situatie worden waarbij de agressor (de knoop-eter) deze lijsten progressief zou downloaden en zich zou richten op de dappere nieuwe bootstrackingsknooppunten en ze vervolgens offline zou nemen.
We leerden niet alleen het antwoord op de oorspronkelijke vraag, maar we leerden ook aardig wat over de aard van het BitTorrent-systeem en zijn kwetsbaarheden.
Heb je iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread.