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

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

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

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

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

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

แล้วถ้าเกิดว่า 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 ตั้งแต่ต้นจนจบกัน

เริ่มต้น เราจะต้องมี 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 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 ผิดกฏหมายมั้ย ?

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

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

สรุป

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