BT9G LABS / เจาะลึก DHT #10

อธิบาย BEP 9 ut_metadata: การดึง Torrent Metadata จาก Peer

เข้าใจ lifecycle ของ BEP 9, metadata_size, request/data/reject, การแบ่ง piece, hash verification และการ schedule หลาย Peer

BT9G Labs / DHT Deep Dive #10. BEP 9 ทำให้ client ดึง info dictionary จาก Peer ได้โดยไม่ต้องมีไฟล์ .torrent อยู่ก่อน

อธิบาย BEP 9 ut_metadata: การดึง Torrent Metadata จาก Peer

สรุปแบบรวดเร็ว

  • หัวข้อ: อธิบาย BEP 9 ut_metadata: การดึง Torrent Metadata จาก Peer
  • คีย์เวิร์ดหลัก: BEP 9, ut_metadata, torrent metadata, metadata_size, BitTorrent extension
  • เหมาะสำหรับ: วิศวกร backend, นักวิจัยโปรโตคอล, search engineer และผู้พัฒนา BitTorrent
  • เป้าหมาย: อธิบายโปรโตคอลและสถาปัตยกรรมระบบอย่างแม่นยำพอที่จะนำไปใช้กับ discovery, metadata, indexing และ search pipeline ในระบบจริงได้

มุมมองระบบ

BEP 9 ส่งข้อมูลอะไร

ut_metadata ส่ง bencoded info dictionary ที่ใช้สร้าง Torrent metadata ไม่ได้ส่ง payload ของไฟล์ content ขนาด metadata ถูกแจ้งผ่าน extended handshake แล้วแบ่งเป็น piece ตามกติกาโปรโตคอล

สำหรับ indexer นี่หมายความว่าสามารถเปลี่ยน InfoHash จาก magnet หรือ DHT ให้เป็นชื่อ/file/size ได้โดยไม่ต้องดาวน์โหลด content ทั้งหมด

Lifecycle ของ message

Client request หมายเลข piece Peer อาจตอบ data หรือ reject เมื่อรับ piece แล้ว client ทำเครื่องหมายว่าเสร็จและขอชิ้นถัดไปจน metadata ครบ Timeout และ disconnect ต้องจัดการทั้งระดับ piece และระดับ Peer

ควรจำกัดจำนวน request inflight และ metadata_size สูงสุดเพื่อป้องกัน memory abuse

Verification เป็นสิ่งที่ข้ามไม่ได้

Metadata ที่ได้ครบยังไม่ได้แปลว่าถูกต้อง สำหรับ v1 raw bencoded info dictionary ต้องให้ SHA-1 ตรงกับ target InfoHash สำหรับ version อื่นต้องใช้กฎ hash ที่ถูกต้อง

ถ้า verify ไม่ผ่าน ห้ามเก็บเป็น metadata ที่ valid และควรบันทึก Peer source กับ failure reason

Scheduling ข้ามหลาย Peer

Swarm หนึ่งอาจมี Peer หลายตัวที่รองรับ ut_metadata Scheduler สามารถลอง candidate แบบขนานอย่างจำกัด เปลี่ยนไปยัง Peer อื่นเมื่อ piece ช้า หรือเลือก Peer ที่มีประวัติเร็วและเสถียร

ไม่ควรใช้ parallelism ไร้ขีดจำกัด เพราะ bottleneck มักอยู่ที่ socket, file descriptor, NAT หรือ bandwidth

ตัวอย่างการนำไปใช้

{"msg_type": 0, "piece": 0}          // request
{"msg_type": 1, "piece": 0,
 "total_size": 48321}                // data header, followed by bytes
{"msg_type": 2, "piece": 0}          // reject

บันทึกเชิงวิศวกรรมจาก BT9G Labs

สำหรับระบบทำดัชนีอย่าง BT9G ไม่ควรวัดความสำเร็จจากจำนวน packet หรือจำนวน InfoHash ที่มองเห็นเพียงอย่างเดียว ควรแยก content identity, network observation, acquisition state, verified metadata และ search document ออกจากกันเป็นชั้นข้อมูลที่ชัดเจน ข้อมูลจาก DHT หรือ Peer ควรเก็บ source และ timestamp เสมอ เพื่อให้วิเคราะห์ bottleneck ได้ตั้งแต่ discovery, connection, handshake, extension negotiation, metadata transfer, verification, storage ไปจนถึง indexing

ข้อผิดพลาดที่พบบ่อย

  • คิดว่า BEP 9 ดาวน์โหลดไฟล์ content
  • ไม่จำกัด metadata_size
  • ยอมรับ metadata โดยไม่ verify hash
  • เปิด connection จำนวนมากโดยไม่มี backpressure

บทความ BT9G Labs ที่เกี่ยวข้อง

เอกสารอ้างอิง


บทความถัดไป: BEP 10 Extension Protocol: BitTorrent Negotiate ฟีเจอร์ใหม่โดยไม่ทำลาย Compatibility →

บทความนี้อธิบายโปรโตคอล BitTorrent แบบสาธารณะและแนวทางเชิงวิศวกรรม การสังเกตเห็น Swarm ใดไม่ได้หมายความว่าเนื้อหานั้นยังใช้งานได้ ถูกต้อง หรือได้รับอนุญาตให้เผยแพร่