โฮมเพจ » ทำอย่างไร » ตอนแรกลูกค้า Bittorrent ค้นพบกับเพื่อน ๆ อย่างไร?

    ตอนแรกลูกค้า Bittorrent ค้นพบกับเพื่อน ๆ อย่างไร?

    เมื่อไคลเอนต์ฝนตกหนักของคุณเข้าร่วมกลุ่มเพื่อแชร์และรวบรวมชิ้นส่วนของไฟล์มันจะรู้ได้อย่างไรว่าคนรอบข้างอยู่ที่ไหน? อ่านต่อไปเมื่อเราแหย่เข้าไปในกลไกที่ผ่านโปรโตคอล BitTorrent.

    เซสชั่นคำถามและคำตอบในวันนี้มาถึงเราด้วยความอนุเคราะห์จาก SuperUser - แผนกย่อยของ Exchange Exchange ซึ่งเป็นกลุ่มที่ขับเคลื่อนด้วยชุมชนของเว็บไซต์ถาม - ตอบ.

    คำถาม

    ผู้อ่าน SuperUser Steve V. มีคำถามที่เฉพาะเจาะจงมากเกี่ยวกับระบบ Distributed Hash Table (DHT) ภายในโปรโตคอล BitTorrent:

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

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

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

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

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

    คำถามของเขาในทางกลับกันกระตุ้นให้มีการตอบกลับโดยละเอียดเกี่ยวกับฟังก์ชั่นต่างๆของระบบ BitTorrent ลองดูที่ตอนนี้.

    คำตอบ

    Allquixotic ผู้สนับสนุน SuperUser ให้คำอธิบายเชิงลึก:

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

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

    * * * * (ยกเว้นโหนดบนของคุณ เครือข่ายท้องถิ่น เกิดขึ้นแล้วเป็นโหนดใน 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 ที่ใช้ทั่วไปที่มีเสถียรภาพซึ่งใช้สำหรับการบูตสแตรป เมื่อพวกเขาจัดฉากการโจมตี ทั้งหมด โหนดทั้งหมดในครั้งเดียว. ตี; ทุกโหนด DHT การบู๊ตเดี่ยวจะลดลงในคราวเดียว ตอนนี้คืออะไร คุณติดอยู่กับการเชื่อมต่อ เครื่องมือติดตามส่วนกลาง เพื่อดาวน์โหลดรายการแบบดั้งเดิมของคนรอบข้างจากสิ่งเหล่านั้น ถ้าพวกเขาโจมตีผู้ติดตามด้วยเช่นกันคุณก็จริง, จริงๆ ขึ้นลำห้วย กล่าวอีกนัยหนึ่ง Kademlia และเครือข่าย BT ทั้งหมดถูก จำกัด ด้วยข้อ จำกัด ของอินเทอร์เน็ตเองซึ่งในนั้นมีคอมพิวเตอร์จำนวน จำกัด (และค่อนข้างเล็ก) ที่คุณจะต้องประสบความสำเร็จในการโจมตีหรือออฟไลน์เพื่อป้องกัน> 90% ของผู้ใช้จากการเชื่อมต่อกับเครือข่าย.

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

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

    เราไม่เพียง แต่เรียนรู้คำตอบสำหรับคำถามดั้งเดิม แต่เรายังได้เรียนรู้เกี่ยวกับธรรมชาติของระบบ BitTorrent และช่องโหว่.


    มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่ ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่.