Technology

BitTorrent สังคมแห่งการแบ่งปัน มันคืออะไร ? ผิดกฏหมายมั้ย ?

By Arnon Puitrakul - 11 December 2020 - 2 min read min(s)

BitTorrent สังคมแห่งการแบ่งปัน มันคืออะไร ? ผิดกฏหมายมั้ย ?

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

ปกติเราดาวน์โหลดไฟล์กันอย่างไร ?

Client-Server Model

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

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

การเชื่อมต่อแบบ Peer-To-Peer (P2P)

P2P Connection Type

แล้วถ้าเกิดว่า Server นั้นไม่อยู่แล้ว แต่ยังมีคนอื่นทีไฟล์ที่อาจจะเคยโหลดไว้แล้ว เราจะทำยังไงให้สามารถส่งต่อให้กับคนอื่นได้ วิธีคือ การใช้การเชื่อมต่อแบบ P2P เข้ามาช่วย หลักการง่าย ๆ คือเราทำการเชื่อมต่อโดยตรงกับเครื่องที่มีไฟล์ ซึ่งเหมาะกับเครือข่ายที่ไม่ได้มีขนาดใหญ่มาก ๆ อาจจะ 10-100 เครื่องต่อกัน และ ไม่ได้มีการรับส่งข้อมูลเป็นจำนวนมาก

ซึ่งถ้าเราแบ่งประเภทของ P2P ตามการทำงาน เราจะสามารถแบ่งได้เป็น 2 ประเภทใหญ่ ๆ คือ

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

BitTorrent คืออะไร ?

เอาหล่ะ จบการปู Introduction เรามาที่เนื้อหาจริง ๆ ของวันนี้แล้วคือ BitTorrent ไส้ของมันจริง ๆ แล้ว พื้นฐาน มันก็มาจากการเชื่อมต่อ รับ/ส่ง ข้อมูลแบบ Peer-to-Peer ที่เราเล่าให้อ่านไปเมื่อครู่นี่แหละ โดยที่ BitTorrent จะมีส่วนประกอบทั้งหมด 4 อย่างด้วยกันคือ Tracker, Metadata (ไฟล์ Torrent), Seeder และ Leecher เพื่อให้เห็นภาพ และ ความหมายของ 4 คำนี้ เราจะพาไปดูว่ามันเกิดอะไรขึ้นบ้าง เมื่อเราจะเริ่มทำการดาวน์โหลดไฟล์ผ่าน BitTorrent ตั้งแต่ต้นจนจบกัน

Inside the BitTorrent File

เริ่มต้น เราจะต้องมี Torrent File ที่เราต้องการจะโหลดก่อน ซึ่งเราสามารถหาได้จากเว็บต่าง ๆ ที่รองรับการโหลดแบบ Torrent ตัวอย่างในที่นี้คือ Torrent ของ Ubuntu เข้าไปโหลดได้ ที่นี่ อันนี้เข้าได้นะ ไม่ผิดกฏหมายเป็นไฟล์ Linux Installer แบบ Open Source ถามว่าไฟล์นี้ประกอบด้วยอะไรบ้าง เมื่อเราลองเข้าไปแคะดู เราจะเห็นว่า ด้านบน มันดูมีอะไรที่คนอ่านได้อยู่ พวกนี้ประกอบด้วย Metadata ต่าง ๆ เช่น ชื่อ File, วันที่สร้าง Torrent และที่สำคัญคือ Tracker พร้อมกับอีกนิดหน่อย เพื่อให้โปรแกรมที่อ่านเข้าใจว่าไฟล์นี้มันคืออะไร มันจะโหลดอะไรมาบ้าง

และส่วนที่เราอ่านไม่ออกด้านล่าง จริง ๆ คือ มันเป็น Binary เราต้องอ่านด้วยโปรแกรมอีกวิธีนึง ข้างในเป็น Hash ของชิ้นส่วนต่าง ๆ ของไฟล์ที่ต้องดาวน์โหลดเข้ามา เป็นเหมือนสารบัญของการดาวน์โหลดไฟล์เลย เพราะจริง ๆ แล้ว BitTorrent มันจะทำการย่อยไฟล์ต้นฉบับออกเป็นส่วน ๆ เล็ก ๆ แล้วแต่ตอนที่สร้าง Torrent จะกำหนด เช่น 256 KB, 512 KB และ 1 MB ขึ้นกับหลาย ๆ ปัจจัย ยิ่งไฟล์ที่ดาวน์โหลดใหญ่ จำนวนชิ้นก็จะมีเยอะเท่านั้นด้วยเช่นกัน เมื่อเราได้ Torrent File มาแล้ว เพื่อให้เราโหลดไฟล์เข้ามา เราต้องอาศัยโปรแกรมอีกตัวคือ BitTorrent Client เป็นโปรแกรมที่จะอ่านไฟล์ Torrent ที่เราพึ่งดูกันเมื่อกี้

เมื่อครู่เราบอกว่า BitTorrent ใช้พื้นฐานมาจาก P2P นั่นแปลว่า ถ้าเราอยากจะโหลดไฟล์เราจะต้องทำการเชื่อมต่อไปที่เครื่องที่มีไฟล์ที่เราต้องการ ถามว่าเครื่องไหนละ บนโลกมีเครื่องที่เชื่อมต่อกับอินเตอร์เน็ตเยอะมาก ๆ ถ้าเราต้องมาหาก็ไม่น่าไหว ทำให้ในต้องมีสิ่งนึงที่คอยเช็คข้อมูลต่าง ๆ ที่จำเป็นต่อการดาวน์โหลด เราเรียกมันว่า Tracker โดยที่ตัว BitTorrent Client จะได้ที่อยู่ของ Tracker จาก Metadata ของ Torrent File ตรง ๆ

ใน Tracker จะมีการเก็บข้อมูลหลายอย่างเลย แต่ที่สำคัญคือ สถานะของคนที่กำลังเชื่อมต่อทุก ๆ คน เช่น ใครที่มีชิ้นส่วนทั้งหมดแล้ว ก็จะทำหน้าที่อัพโหลดอย่างเดียว (Seeder) และ คนที่ยังดาวน์โหลดไฟล์ไม่เสร็จ ก็คือ ขาดบางชิ้นส่วนอยู่ ยังจำเป็นที่จะต้องเรียกชิ้นส่วนจากเครื่องอื่น ๆ (Leecher)

การดาวน์โหลดไฟล์

หลังจากที่เราเอา Torrent File เปิดผ่าน BitTorrent Client แล้ว มันจะทำการเชื่อมต่อกับ Tracker เพื่อขอ List ที่อยู่พร้อมทั้งข้อมูลต่าง ๆ จาก Tracker ถ้าเราเข้าไปดูใน BitTorrent Client เราจะเห็นว่า มันจะ Update ข้อมูลจาก Tracker เป็นเวลา อาจจะทุก 20 นาทีอะไรก็ว่ากันไป แล้วแต่การตั้งค่าในโปรแกรม

BitTorrent Download Schema

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

Algorithm ในการเลือกชิ้นส่วน

แต่การเลือกชิ้นส่วนที่จะให้ใครต่าง ๆ หรือรับชิ้นส่วนจากใคร มันไม่ได้มาด้วยการ Random ไม่งั้น มันจะมั่วไปหมด อาจจะเจอเคสที่ทุกคนรุมโหลดชิ้นส่วนเดียวจากเครื่อง ๆ เดียว ทำให้ถ้าเกิดว่า Seeder หายไปหมดเลย ชิ้นที่เหลือก็จะโหลดมาไม่ได้เลย ทำให้มันต้องมีวิธีในการที่จะเลือกชิ่นส่วน เพื่อทำให้ จำนวนชิ้นส่วนอยู่ในระบบให้ได้มากที่สุดนั่นเอง (Availability)

โดยที่วิธีที่เราใช้กัน จะมีอยู่ทั้งหมด 4 วิธีด้วยกัน เริ่มต้นจากวิธีที่ง่ายที่สุดก่อนคือ Random First Piece วิธีนี้จะใช้เมื่อมันพยายามที่จะโหลดชิ้นแรกเข้ามา โดยที่มันจะสุ่มโหลดชิ้นแรกขึ้นมาก่อน เพื่อให้ เครื่องนั้นมีสักชิ้นนึง ที่อาจจะพร้อมอัพโหลดให้เครื่องอื่นได้ ส่วนชิ้นอื่นก็จะทำการดาวน์โหลดต่อไป

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

อย่างที่เราเล่าว่า เวลามันโหลดไฟล์เข้ามา มันจะแบ่งไฟล์ออกเป็นชิ้น ๆ  (Piece) แต่ไส้จริง ๆ แล้ว มันยังแบ่งชิ้น เป็นชิ้นย่อย ๆ อีก (Sub-Piece) อีก ทำให้มันนำไปสู่วิธีที่ 3 คือ Strict Policy คือ เวลามันเลือกชิ้นมาได้แล้ว แทนที่จะหา Sub-Piece ที่มีน้อยที่สุดในระบบ มันจะดูทีละชิ้น (Piece) สมมุติว่า มันจะโหลดชิ้นที่ 20 ในนั้นมีอีก 5 ชิ้น ถ้าเกิดว่ามันเจอว่า ชิ้นที่ 20 ซับย่อยที่ 3 มีน้อยสุด แล้วจะโหลดละ ชิ้นต่อไปจะยังคงเป็นชิ้นที่ 20 ไปเรื่อย ๆ ให้ครบ 5 ชิ้น แล้วจึงไปเริ่มทำงานกับชิ้นอื่นต่อไป

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

Choking

นอกจากการเลือกชิ้นในการโหลดแล้ว มันยังมีอีก Process ที่เรียกว่า Choking คือ การที่เราไม่ให้เราอัพโหลดข้อมูลไปให้เครื่องอื่น โดนที่เรายังสามารถดาวน์โหลดชิ้นอื่น ๆ จากเครื่องอื่นได้

ถามว่า ทำไมมันต้องมี Process นี้ ลองคิดดูนะว่า ถ้าเราบอกว่า เราไม่อยากอัพโหลดข้อมูล เราอยากจะโหลดอย่างเดียว สุดท้ายในระบบ มันก็จะไม่มีใครโหลดอะไรได้เลย เพราะมันไม่มีคนอัพโหลดมาให้ ทำให้มันต้องมีอะไรที่เข้ามาจัดการสักหน่อย โดยที่เราจะ Choke เครื่องอื่นในสถานการณ์ต่าง ๆ เช่น อีกเครื่องเป็น Seeder แล้ว เขาไม่ต้องการไฟล์จากเราแล้ว, อีกเครื่อง Upload ถึงค่า max_upload ที่ตั้งไว้ และสุดท้ายคือโดย Backlist ออกจากระบบ

โดยที่ปกติแล้ว เราจะ Unchoked 4 Peer เพื่อที่จะปล่อยให้ทั้ง 4 เครื่อง ซึ่งจะเลือกจากความเร็วที่อีกเครื่องอัพโหลดให้เรามา ถ้าเอาลึก ๆ มันจะเอาความเร็วในการ Upload จากเครื่องนั้น 20 วินาที มาเฉลี่ยรวมกัน และจะคำนวณทุก 10 วินาที

นอกจากวิธีที่จะ Unchoke 4 เครื่องแล้ว มันยังมีอีกวิธีคือ Optimistic Unchoking ที่จะไม่ได้ขึ้นกับความเร็วในการ Upload ให้กับเราละ มันจะ Random ทุก ๆ 30 วินาที ที่ต้องทำแบบนี้ด้วยเพราะถ้าเป็นเครื่องที่เข้ามาใหม่เลย เราจะไม่มีสักชิ้นอยู่ในมือเลย แปลว่าเราจะไม่ได้แจกสักชิ้นให้ใครเลย ถ้าใช้วิธีเดิมก็จะไม่มีใคร Unchoke ให้เรา และเราก็จะไม่ได้โหลดอะไรเลย ทำให้ต้องใช้วิธีนี้ด้วยนั่นเอง

อีกเหตุการณ์ที่เกิดขึ้นได้คือ เราโดนทุกคน Choke ใส่เราหมด แปลว่าเราจะโหลดอะไรไม่ได้เลย ถ้าครบ 60 วินาที มันจะเปลี่ยนสถานะเป็น Snubbed ซึ่งจะแก้ปัญหาด้วยการทำ Anti-Snubbing โดยที่มันจะเพิ่มความเร็วในการทำ Optimistic Unchoking ทำให้มันหาชิ้นอื่นได้เร็วขึ้น

Distributed Hash Table (DHT)

เมื่อก่อนเราอาจจะเคยได้ยินเว็บที่ชื่อว่า Pirate Bay มาก่อนที่เป็นเว็บรวม Torrent ที่ผิดกฏหมายหลาย ๆ อัน ถามว่าทำไม Tracker Server เขาไม่มี แต่ทำไมมันยังโหลดได้อยู่ นั่นเป็นเพราะว่า เขาไม่ได้ใช้ Tracker ไงละ เขาใช้สิ่งที่เรียกว่า Distribited Hash Table (DHT)

ไส้ในจริง ๆ ของมันเป็นเหมือน Dictionary แต่ละ Node จะถึงกระจายไปตาม Network สั้น ๆ ก็คือ แต่ละเครื่องจะทำหน้าที่เป็นเหมือนกับ Mini-Tracker ทำให้เราไม่จำเป็นที่ต้องมี Tracker แต่เราก็ยังสามารถที่จะมีข้อมูลของเครื่องอื่น ๆ ในระบบ และเรียกชิ้นส่วนต่าง ๆ ได้เหมือนกับตอนมี Tracker เลย รายละเอียดเชิงลึกจริง ๆ พวกวิธีการทำ Hashing และ พวก Distance ต่าง ๆ เราขอไม่พูดถึงละกัน

BitTorrent ผิดกฏหมายมั้ย ?

The Pirate Bay
The Pirate Bay อ่าวโจรสลัดที่เคยมีข่าวโดนบุกจับ เพราะในเว็บมีการแจก Torrent ที่แจกจ่ายไฟล์ผิดกฏหมาย

หลาย ๆ คนอาจจะมีภาพติดว่า BitTorrent เป็นสิ่งที่ผิดกฏหมาย แต่จริง ๆ แล้ว ตัว BitTorrent ไม่ได้ผิดกฏหมาย แต่การเอามาใช้ต่างหากที่ผิดกฏหมาย เพราะส่วนใหญ่ที่เรามักจะได้ยินกัน มักจะเอา BitTorrent มาใช้แจกไฟล์ที่ละเมิดสิขสิทธิ์เช่น หนัง และ เพลง เป็นต้น

ดังนั้น การที่เห็นคนใช้งาน BitTorrent ก็ใจเย็น ๆ เขาไม่ได้โหลดไฟล์ที่ผิดกฏหมายเสมอไป มันเป็นเทคโนโลยีที่ทำให้เราสามารถแจกจ่ายไฟล์ได้อย่างรวดเร็ว และ ทนทานต่อการหายของ Server ได้ เพราะไฟล์อยู่ที่ทุกคน

สรุป

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