ในแง่ง่ายๆลูกค้า BitTorrent จะค้นพบเพื่อน ๆ ด้วย DHT ได้อย่างไร


45

ฉันได้อ่านคำตอบ SuperUser นี้แล้วและบทความ Wikipedia นี้แต่ทั้งคู่ต่างก็มีเทคนิคเกินไปสำหรับฉันที่จะคาดหัว

ฉันเข้าใจแนวคิดของตัวติดตาม: ไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์กลางซึ่งเก็บรายชื่อเพื่อนในกลุ่ม

ฉันยังเข้าใจแนวคิดของการแลกเปลี่ยนเพียร์: ลูกค้าที่อยู่ในกลุ่มแล้วส่งรายการที่สมบูรณ์ของเพื่อนของพวกเขาให้กัน หากเพื่อนใหม่ถูกค้นพบพวกเขาจะถูกเพิ่มลงในรายการ

คำถามของฉันคือ DHT ทำงานอย่างไร นั่นคือลูกค้าใหม่สามารถเข้าร่วมฝูงโดยไม่ต้องติดตามหรือความรู้ของสมาชิกอย่างน้อยหนึ่งคนในฝูงเพื่อแลกเปลี่ยนเพื่อนร่วมกับ?

(หมายเหตุ: คำอธิบายที่ง่ายที่สุดดีที่สุด)

คำตอบ:


48

สรุป

ลูกค้าใหม่สามารถเข้าร่วมฝูงโดยไม่ต้องติดตามหรือความรู้ของสมาชิกอย่างน้อยหนึ่งคนในฝูงเพื่อแลกเปลี่ยนเพื่อนร่วมงานด้วยได้อย่างไร

คุณทำไม่ได้ มันเป็นไปไม่ได้.*

* (ยกเว้นว่าโหนดบนเครือข่ายท้องถิ่นของคุณเป็นโหนดใน DHT แล้วในกรณีนี้คุณสามารถใช้กลไกการแพร่ภาพเช่น Avahi เพื่อ "ค้นพบ" เพียร์นี้และ bootstrap จากพวกเขา แต่ทำไมพวกเขาบูตตัวเองหรือไม่ในที่สุดคุณจะเจอสถานการณ์ที่คุณต้องเชื่อมต่อกับอินเทอร์เน็ตสาธารณะและอินเทอร์เน็ตสาธารณะนั้นเป็น unicast-only ไม่ใช่ multicast ดังนั้นคุณจึงติดอยู่กับการใช้รายการเพื่อนที่กำหนดไว้ล่วงหน้า)


อ้างอิง

Bittorrent DHTจะดำเนินการผ่านทางโปรโตคอลที่รู้จักกันเป็นKademliaซึ่งเป็นกรณีพิเศษของแนวคิดทฤษฎีของตารางแฮชกระจาย


นิทรรศการ

ด้วยโปรโตคอล Kademlia เมื่อคุณเข้าร่วมเครือข่ายคุณจะต้องผ่านขั้นตอนการบูตสตริปซึ่งต้องให้คุณทราบล่วงหน้าที่อยู่ IP และพอร์ตอย่างน้อยหนึ่งโหนดที่เข้าร่วมในเครือข่าย DHT แล้ว ตัวติดตามที่คุณเชื่อมต่ออาจเป็นโหนด DHT เมื่อคุณเชื่อมต่อกับโหนด DHT หนึ่งโหนดคุณจะดำเนินการดาวน์โหลดข้อมูลจาก DHT ซึ่งให้ข้อมูลการเชื่อมต่อสำหรับโหนดเพิ่มเติมและจากนั้นนำทางโครงสร้าง "กราฟ" เพื่อรับการเชื่อมต่อไปยังโหนดมากขึ้นซึ่งสามารถให้ทั้งสองอย่าง การเชื่อมต่อกับโหนดอื่น ๆ และข้อมูล payload (กลุ่มดาวน์โหลด)

ฉันคิดว่าคำถามที่แท้จริงของคุณเป็นตัวหนา - วิธีเข้าร่วมเครือข่าย Kademlia DHT โดยไม่ทราบว่ามีสมาชิกคนอื่น ๆ - ตั้งอยู่บนสมมติฐานที่ผิด

คำตอบง่ายๆกับคำถามของคุณเป็นตัวหนามีที่คุณทำไม่ได้ หากคุณไม่ทราบข้อมูลใด ๆ เลยแม้แต่โฮสต์เดียวซึ่งอาจมีข้อมูลเมตา DHT แสดงว่าคุณติดอยู่ - คุณไม่สามารถเริ่มต้นได้ ฉันหมายความว่าคุณสามารถพยายามค้นหา IP บนอินเทอร์เน็ตสาธารณะด้วยพอร์ตเปิดที่เกิดขึ้นเพื่อถ่ายทอดข้อมูล DHT แต่มีโอกาสมากขึ้นที่ไคลเอนต์ BT ของคุณจะถูกกำหนดค่าตายตัวไปยัง IP หรือ DNS แบบคงที่เฉพาะซึ่งแก้ไขให้กับโหนด DHT ที่มีเสถียรภาพซึ่งเพิ่งให้ข้อมูลเมตา DHT

โดยทั่วไป DHT นั้นมีการกระจายอำนาจตามกลไกการเข้าร่วมและเนื่องจากกลไกการเข้าร่วมนั้นค่อนข้างเปราะ (ไม่มีวิธี "ออกอากาศ" ผ่านอินเทอร์เน็ตทั้งหมด! ดังนั้นคุณต้องunicastไปยังโฮสต์ที่ได้รับมอบหมายล่วงหน้าแต่ละรายเพื่อรับ DHT ข้อมูล) Kademlia DHT ไม่ได้จริงๆการกระจายอำนาจ ไม่ได้อยู่ในความหมายที่เข้มงวดที่สุดของคำ

จินตนาการสถานการณ์นี้: คนที่ต้องการ P2P เพื่อหยุดออกไปและเตรียมการโจมตีในทุกโหนด DHT มั่นคงที่ใช้กันทั่วไปที่ใช้สำหรับการร่วมมือ เมื่อพวกเขาได้จัดฉากการโจมตีของพวกเขาในฤดูใบไม้ผลิบนทุกโหนดทั้งหมดในครั้งเดียว Wham ; ทุกโหนด DHT การบู๊ตเดี่ยวจะลดลงในคราวเดียว ตอนนี้คืออะไร คุณกำลังติดกับการเชื่อมต่อกับเครื่องมือติดตามส่วนกลางเพื่อดาวน์โหลดรายการเพื่อนดั้งเดิมจากสิ่งเหล่านั้น ดีถ้าพวกเขาโจมตีติดตามมากเกินไปแล้วคุณจริงๆจริงๆขึ้นลำห้วย กล่าวอีกนัยหนึ่งว่า Kademlia และเครือข่าย BT ทั้งหมดถูก จำกัด ด้วยข้อ จำกัด ของอินเทอร์เน็ตในกรณีนั้นมีคอมพิวเตอร์จำนวน จำกัด (และค่อนข้างเล็ก) ที่คุณจะต้องประสบความสำเร็จในการโจมตีหรือออฟไลน์เพื่อป้องกัน> 90% ของผู้ใช้จากการเชื่อมต่อกับเครือข่าย

เมื่อโหนด "bootstrapping" แบบหลอกส่วนกลางหายไปโหนดภายในของ DHT ซึ่งไม่ได้เป็น bootstrapping เพราะไม่มีใครอยู่ด้านนอกของ DHT ที่รู้เกี่ยวกับโหนดภายในนั้นจะไร้ประโยชน์ พวกเขาไม่สามารถนำโหนดใหม่เข้าสู่ DHT ดังนั้นเนื่องจากแต่ละโหนดภายในถูกตัดการเชื่อมต่อจาก DHT เมื่อเวลาผ่านไปเนื่องจากคนปิดเครื่องคอมพิวเตอร์รีบูตเครื่องเพื่ออัพเดท ฯลฯ เครือข่ายก็จะล่มสลาย

แน่นอนว่าในการหลีกเลี่ยงปัญหานี้บางคนสามารถปรับใช้ไคลเอนต์ BitTorrent ที่ได้รับการติดตั้งแพตช์ด้วยรายการใหม่ของโหนด DHT หรือ DNS แอดเดรสที่กำหนดไว้ล่วงหน้าที่กำหนดไว้ล่วงหน้าและส่งเสียงดังไปยังชุมชน P2P แต่สิ่งนี้จะกลายเป็นสถานการณ์ "whack-a-mole" ที่ผู้รุกราน (โหนด - ผู้กิน) จะดาวน์โหลดรายการเหล่านี้อย่างต่อเนื่องและกำหนดเป้าหมายโหนด bootstrapping ใหม่ที่กล้าหาญจากนั้นนำพวกเขาออฟไลน์เช่นกัน


วิธีที่คุณอธิบาย DHT ให้เสียงเหมือนกับการแลกเปลี่ยนกับเพื่อน
Celeritas

สิ่งที่แจกจ่ายเกี่ยวกับ DHT คือส่วนของข้อมูลที่แท้จริง - หมายถึงรายการของ IP และพอร์ตที่สามารถดาวน์โหลดไฟล์ได้ - ถูกแจกจ่าย ในการแลกเปลี่ยนแบบเพียร์รายการทั้งหมดจะถูกเก็บไว้ในคอมพิวเตอร์หนึ่งเครื่องโดยปกติแล้วตัวติดตามและดาวน์โหลดจะไม่แตกต่างจากการดาวน์โหลดไฟล์ ฉันสามารถพูดได้ว่าในคำตอบของฉัน แต่คำถามทั้งหมดนี้ (และคำตอบ) เป็นเพียงการค้นพบครั้งแรกหรือการเข้าร่วมเครือข่าย DHT ไม่ใช่สิ่งที่เกิดขึ้นหลังจากที่คุณเข้าร่วม
allquixotic

1
การกดปุ่ม bootstrap ทั้งหมดจะเป็นการหยุดผู้ใช้รายใหม่จากการบูตสแตรป แต่ไม่จำเป็นว่าจะต้องเป็นผู้ใช้ปัจจุบันที่ออฟไลน์แล้วกลับมาใหม่ ฉันมีความประทับใจที่ลูกค้าหลายรายจำการตั้งค่าโหนดที่ใช้งานของพวกเขาและใช้พวกเขาเพื่อเชื่อมต่อใหม่แทนที่จะบู๊ตทุกครั้ง
clacke

ด้วยโครงการเช่น masscan ( github.com/robertdavidgraham/masscan ) การค้นหาโหนด DHT ที่ไม่มีไดเรกทอรีส่วนกลางควรจะเป็นไปได้
newlog

19

คำตอบสั้น ๆ :มันได้มาจากไฟล์ .torrent

เมื่อไคลเอนต์ BitTorrent สร้างไฟล์ .torrent แบบไม่ใช้ trackerless (นั่นคือเมื่อมีคนเตรียมพร้อมที่จะแบ่งปันสิ่งใหม่ผ่าน BitTorrent) จะเพิ่มคีย์ "nodes" (คีย์ใน "คู่คีย์ / ค่า" เช่นส่วนหัวของส่วน ไม่ใช่คีย์ crypto) ไปยังไฟล์ .torrent ที่มีโหนด DHT ที่ใกล้เคียงที่สุด K ซึ่งไคลเอ็นต์รู้จัก

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

พจนานุกรม torrent trackerless ไม่มีคีย์ "ประกาศ" ทอร์เรนต์แบบ trackerless มีคีย์ "nodes" แทน คีย์นี้ควรตั้งค่าเป็นโหนด K ที่ใกล้เคียงที่สุดในตารางการจัดเส้นทางของไคลเอ็นต์สร้าง torrent หรืออาจตั้งค่าคีย์เป็นโหนดที่รู้จักดีเช่นการดำเนินการโดยบุคคลที่สร้างฝนตกหนัก โปรดอย่าเพิ่ม "router.bittorrent.com" ลงในไฟล์ torrent โดยอัตโนมัติหรือเพิ่มโหนดนี้ให้กับตารางการกำหนดเส้นทางไคลเอ็นต์

ดังนั้นเมื่อคุณฟีดลูกค้า BitTorrent เป็นไฟล์ .torrent ของ torrentless trackerless ที่คุณต้องการดาวน์โหลดมันจะใช้ค่าของ "nodes" ที่สำคัญจากไฟล์ .torrent เพื่อค้นหาโหนด DHT สองสามตัวแรก


3
นี่เป็นข้อมูลที่ดีคำอธิบาย ฉันคิดว่าคำตอบของคุณอธิบายว่าลูกค้า BitTorrent ปัจจุบันทำอะไรเพื่อจัดการข้อ จำกัดทางทฤษฎีและปัญหาที่ระบุในคำตอบของฉัน หวังว่าคำตอบของเราทั้งคู่จะถูกยกระดับขึ้นเนื่องจากพวกเขาอธิบายแง่มุมต่าง ๆ ของคำตอบ
allquixotic

3
นั่นเป็นสาเหตุที่ "การรวมไฟล์ torrent ใหม่กับการดาวน์โหลด torrent" ในไคลเอนต์จำนวนมากทำให้ฝนตกหนักที่ตายแล้วกลับมามีชีวิตชีวาอีกครั้งหรือไม่
Jesvin Jose

2
@aitchnyu ใช่ แต่ไฟล์ torrent อาจมีตัวติดตามเพิ่มเติม / ต่างกันเช่นกัน
longneck

2
ปรากฏว่าไม่มีไคลเอ็นต์ BitTorrent รวมข้อมูลโหนด ได้ทดสอบการส่ง, Vuze, Deluge, Mainline และอื่น ๆ
Aeyoun

1

คุณทำไม่ได้! คุณต้องรู้อย่างน้อยหนึ่ง IP ของหนึ่งในฝูงนี่คือจุดอ่อนของเครือข่าย p2p คุณสามารถออกอากาศแบบสุ่มเพื่อค้นหา IP แรก แต่ในเครือข่ายขนาดใหญ่ถ้าทุกคนทำเช่นนั้นเราจะมีปัญหาความแออัด คุณสามารถใช้แคชได้ แต่เป็นไปได้สำหรับฝูงใหญ่เท่านั้น (แคชที่อยู่ของเพื่อนที่ใหญ่กว่า) คุณต้องเชื่อมต่อตัวติดตามเพื่อถามเพียง IP แรก

กระจายใน DHT หมายความว่าลูกค้าไม่จำเป็นต้องเก็บรายการทั้งหมดที่มีผลรวม md5 ของชื่อไฟล์ที่แชร์พร้อมกับเพียร์ที่เกี่ยวข้อง รายการของแฮชคือรูปร่างเป็นส่วนเท่ากับและกระจายด้วยความซ้ำซ้อนผ่านฝูง หากเพื่อนตัดการเชื่อมต่อจะมีที่อื่นที่มีส่วนเดียวกันของแฮชลิสต์ เพื่อนร่วมกันแบ่งปันที่อยู่ที่ดีของส่วน hashlist

torrent-freak เขียนโพสต์ในหัวข้อนี้


0

ลูกค้าใหม่สามารถเข้าร่วมฝูงโดยไม่ต้องติดตามหรือความรู้ของสมาชิกอย่างน้อยหนึ่งคนในฝูงเพื่อแลกเปลี่ยนเพื่อนร่วมงานด้วยได้อย่างไร

มันถามหามัน

ไคลเอนต์ Bittorrent ที่สนับสนุนDHTใช้แอพพลิเคชั่นแบบ peer-to-peer แยกกันสองแอปพลิเคชัน

คนแรกทำการแชร์ไฟล์: กลุ่มใน bittorrent lingo คือกลุ่มเพื่อนที่แชร์ออบเจ็กต์ bittorrent (เช่นโครงสร้างของไฟล์หรือไดเรกทอรี) แต่ละวัตถุ bittorent มีข้อมูลเมตาบางส่วนที่ถูกบันทึกในไฟล์ .torrent (ซึ่งมีขนาดวัตถุชื่อโฟลเดอร์ข้อมูลติดตามหรือโหนดที่อาจเป็นไปได้ ฯลฯ ) แฮชของข้อมูลเมตาที่จำเป็นในการดาวน์โหลดวัตถุ bittorrent นี้เรียกว่า infohash

DHT นั้นเป็นแอปพลิเคชั่น P2P ตัวที่สองที่มีวัตถุประสงค์เพื่อแทนที่ตัวติดตาม: มันเก็บคู่ของ (อินโฟชิช, รุม) และอัปเดตฝูงถ้ามันได้รับข้อความประกาศ ไคลเอนต์ใหม่ต้องมีความรู้เกี่ยวกับ "โหนด" (bittorrent lingo สำหรับเพียร์ของ DHT) บางอย่างเพื่อบูตข้อมูลของ DHT นี่คืออาร์กิวเมนต์ที่กำหนดโดย @allquixotic นำไปใช้ ในขณะที่ MDHT นั้นประกอบไปด้วยเพื่อนร่วมงานมากกว่า 7 ล้านคนจึงไม่น่าจะปฏิเสธการโจมตีอย่างต่อเนื่อง

จากนั้นสามารถสืบค้น DHT ด้วยความเคารพต่ออินโฟชอตและไม่จำเป็นต้องใช้ตัวติดตามหรือรู้จักเพื่อนที่เป็นส่วนหนึ่งของฝูงก่อน หากหนึ่งในเพียร์ที่เขาติดต่อสนับสนุนการแบ่งปันข้อมูลเมตา มันต้องการเพียง infohash สามารถดึงไฟล์ .torrent- จากฝูง


0

ไคลเอนต์เครือข่าย p2p ส่วนใหญ่ถูก bootstrapped จากรายชื่อเมล็ดเพื่อนที่พวกเขาเชื่อมต่อกับ ... เมื่อพวกเขาเชื่อมต่อกับเพื่อน bootstrapped หนึ่งมันดาวน์โหลดส่วนที่เหลือในลักษณะกระจาย มันเชื่อมต่อกับ bootstrap peer และดาวน์โหลดรายการ DHT ของเพียร์จากนั้นไปที่แต่ละรายการและทำเช่นเดียวกัน ฯลฯ เป็นต้น

ตัวอย่างเช่น:

นี่คือรายการของ bootstrap nodes:

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

นี่คือที่ลูกค้าเชื่อมต่อกับพวกเขาเพื่อชุ่มชื้นรายชื่อเพื่อน:

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

สิ่งนี้คล้ายกับวิธีการทำงานของตัวติดตามยกเว้นใครก็ตามที่สามารถเป็นโหนดบูทสแตรปได้แทบจะเป็นไปไม่ได้เลยที่จะปิดมัน

กระเป๋าเงินหลักของ Bitcoin ทำงานในลักษณะเดียวกัน มันช่วยให้คุณสามารถเปลี่ยน bootstrap seed peer ถ้าด้วยเหตุผลบางอย่างค่า default จะถูกปิด


ลิงก์นั้นตายแล้ว
zella
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.