Bittorrent ทำงานอย่างไร


34

ฉันต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการแบ่งปันไฟล์ bittorrent ฉันเป็นผู้ใช้ทางเทคนิคขั้นสูง (โปรแกรมเมอร์) ดังนั้นวัสดุขั้นสูงทางเทคนิคจึงไม่มีปัญหา แต่ควรกระชับและตรงประเด็น ฉันต้องการหนังสือทรัพยากร / เว็บที่ดีซึ่งอธิบายสถาปัตยกรรมโดยรวมของ BitTorrent

ฉันไม่สนใจในรายละเอียดเพียงแค่สถาปัตยกรรมโดยรวมและคำศัพท์เช่นเมล็ดเพื่อนร่วมงาน ฯลฯ

ข้อเสนอแนะใด ๆ

คำตอบ:


29

ภาพรวมของวิธีการทำงานของ BitTorrent:

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

  • เพียร์จะได้รับไฟล์ .torrent ซึ่งจะมีสิ่งอื่น ๆ A) แฮช SHA-1 ของชุดไฟล์ B) URL ของตัวติดตามและ C) จำนวนชิ้นที่ไฟล์ถูกแตกรวมทั้ง แฮช SHA-1 ของทุกชิ้น ขนาดของชิ้นงานจะถูกกำหนดโดยตัว torrent เอง

  • เพียร์นั้นเชื่อมต่อกับตัวติดตามโดยใช้ URL ที่ระบุในฝนตกหนัก ตัวติดตามตอบกลับพร้อมกับรายการเพียร์ เครื่องมือติดตามพูดคุย HTTP ผ่านพอร์ต 80 หรือ 443

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

  • เมื่อเพียร์มีชิ้นส่วนมันจะตรวจสอบกับแฮช SHA-1 และเขียนลงในไฟล์ จากนั้นจะสามารถนำเสนอชิ้นส่วนนั้นเมื่อเลือกเพียร์อื่น เซสชันการแลกเปลี่ยนที่ตามมาเกี่ยวข้องกับชิ้นส่วน "การซื้อขาย" ฉันเชื่อว่าคนรอบข้างจะให้ชิ้นแรกกับคุณถ้าคุณไม่มีชิ้นอื่น

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

  • เมื่อเพื่อนมีชิ้นส่วนทั้งหมดไฟล์ทั้งหมดจะถูกตรวจสอบกับชุดไฟล์ SHA-1 แฮ จากนั้นจะกลายเป็นseederและตอนนี้ไม่ทำอะไรเลย แต่ช่วยให้ fileset พร้อมใช้งานได้มากกว่า เพื่อนที่ไม่ได้มีทุกชิ้นมีleechers

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

  • แฮช SHA-1 เป็นวิธีที่ตัวติดตามและผู้ใช้ "รู้" ว่าควรใช้ไฟล์ใด ชื่อไฟล์ใน torrent ไม่ถูกใช้เพื่อระบุข้อมูล ส่วนที่ไม่ได้ตรวจสอบกับ hases ในไฟล์ .torrent จะถูกโยนออกไป คนรอบข้างที่ส่งชิ้นส่วนที่ไม่ดีอย่างต่อเนื่องจะถูกปฏิเสธโดยเพื่อนคนอื่น ๆ และในที่สุดจะไม่สามารถเชื่อมต่อกับใครก็ได้ในฝูง

  • ขนาดชิ้นที่เล็กลงหมายถึงว่าฝนตกหนักมีประสิทธิภาพมากขึ้นเนื่องจากผู้ใช้สามารถแลกเปลี่ยนชิ้นส่วนได้เร็วขึ้น แต่ก็หมายความว่าจะต้องมีการแฮชของชิ้นส่วนในไฟล์ .torrent มากขึ้นดังนั้นไฟล์. ฝึกงานจึงมีขนาดใหญ่

  • หากคุณกำลังเผยแพร่บางอย่างผ่าน BitTorrent วิธีที่ดีที่สุดคือการหว่านไฟล์ตราบเท่าที่คุณต้องการให้มันพร้อมใช้งาน เพื่อนคนอื่น ๆ จะช่วยคุณเนื่องจากซอฟต์แวร์ BitTorrent ส่วนใหญ่ใช้อัลกอริทึมที่โปรดปรานพยายามกระจายสิ่งต่าง ๆ ในหมู่เพื่อนให้มากที่สุดเพื่อเพิ่มการเชื่อมต่อระหว่างกัน ด้วยวิธีนี้ BitTorrent สามารถช่วยคุณเผยแพร่สิ่งต่าง ๆ และประหยัดต้นทุนแบนด์วิดท์


1
คำตอบที่สวยงาม! One quip: ฉันเชื่อว่าเมล็ดต้องการเมล็ดพันธุ์ที่หายากที่สุดไม่ใช่ชิ้นแรกก่อน ไม่แน่ใจว่านี่เป็นสิ่งที่อัลกอริทึมหรือไม่ แต่นั่นคือสิ่งที่ฉันได้รับจากโปรแกรมฝนตกหนักในขณะที่ยุ่งกับการตั้งค่า
Gallifreyan


8

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

bittorrent ทำงานอย่างไรบน youtube


3
+1 วิดีโอที่มีประโยชน์ แสดงให้พ่อของฉันเห็น หลังจากนั้นเขาก็ไม่มีคำถาม น่าอัศจรรย์ :)
zero2cx

2

ภาพรวมในข้อความเพียร์โปรโตคอล

ไคลเอ็นต์สามารถใช้สองโปรโตคอลเพื่อแบ่งปันข้อมูลกับเพียร์, TCP หรือ uTP (มากกว่า UDP) ข้อมูลนี้ตามสเปคโปรโตคอล BitTorrentส่วนข้อความเพียร์

ดังนั้นโดยทางโปรแกรมการเชื่อมต่อจะต้องเริ่มระหว่างไคลเอนต์สองคน หลังจากที่การเชื่อมต่อการตั้งค่า (ผ่าน TCP หรือ UTP) จับมือ BitTorrent ริเริ่มโดยลูกค้าที่คว้าข้อมูลเพียระยะไกล (IP และ port) จากการติดตามหรือผ่านDHT การจับมือกันนี้มีinfo_hashที่ระบุว่าการเชื่อมต่อนี้จะมีฝนตกหนัก

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

เมื่อเริ่มต้นการเชื่อมต่อทั้งลูกค้า (ลูกค้าท้องถิ่นซึ่งฉันจะเรียกLCและลูกค้าระยะไกลRC ) จะสำลักและไม่สนใจ สำลักหมายถึง "ฉันจะไม่ตอบข้อความใด ๆ ของคุณยุ่งเกินไป แต่ฉันอาจนำมาพิจารณา" ไม่ได้ล็อคหมายความว่า "ฉันจะตอบข้อความของคุณ" วิธีการที่น่าสนใจแน่นอนว่าฉันต้องการบางชิ้นที่คุณมี ดังนั้นสถานะของการเชื่อมต่อระหว่างสองเพียร์สามารถกำหนดได้ด้วยสี่สถานะดังกล่าว: LC_chocked?, LC_interested ?, RC_chocked?, RC_cheated? เพื่อเตือนRCว่าฉันรู้สึกไม่ดีหรือไม่สนใจฉันต้องส่งเขา(ยกเลิก) ข้อความที่น่าสนใจและ(ยกเลิก)ข้อความที่ถูกบีบและอื่น ๆ

จะแจ้งให้แต่ละอื่น ๆ ที่ชิ้นที่พวกเขามีที่พวกเขาสามารถส่งbitfieldข้อความเพียงหลังจากการจับมือกัน ในขณะที่มันชื่อแนะนำก็เป็นสตริงบิตซึ่งแต่ละบิตมีการตั้งค่า1ในกรณีที่ลูกค้ามีที่แปลกประหลาดนี้ชิ้นส่วน , 0มิฉะนั้น

ดังนั้นถ้าLCถูกทำให้สับสนและให้ความสนใจและRCก็ไม่ได้ทำการปลดเขาจากนั้นเขาสามารถส่งข้อความร้องขอเพื่อขอบล็อกที่เป็นของชิ้นเดียวเขารู้ว่าLCได้ขอบคุณข้อความบิตฟิลด์

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

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

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