איך טורנטים עובדים?

פרוטקול ה-BitTorrent הוא אחד הפרוטוקולים הכי מוצלחים ונפוצים בכל מה שקשור לשיתוף קבצים. הוא מאפשר הורדות מהירות באופן מבוזר (decenteralized) וגם נוטל חלק בלא מעט סקנדלים סביב זכויות יוצרים. אבל איך הוא עובד?

החלק הכי משמעותי ב-BitTorrent הוא שמדובר ברשת מחשבים מבוזרת, כלומר בלי שרת מרכזי. בהורדה “רגילה” מהאינטרנט אנחנו ניגשים לשרת מרכזי כשלהו ששומר את הקובץ אליו והוא שולח לנו אותו בשלמותו. לנו, ולכל אדם אחר שרוצה להוריד אותו. מעבר לצורך בתחזוקת שרת, דבר לא זול, עומס פתאומי יכול להוביל לקריסה והרבה יותר קשה להתמודד איתו. טורנטים לעומת זאת מבוססים על P2P- Peer-to-Peer. רשת של מחשבים שמתקשרים ישירות אחד עם השני בלי שרת מרכזי. כל מחשב ברשת נקרא עמית (peer).

תחילה מישהו יוצר את הטורנט, לדוגמה עבור קובץ וידיאו. כל הפרטים הנחוצים נכנסים לקובץ torrent, קובץ קטן, לרוב באיזור כמה עשרות קילובייטים. הקובץ אותו הוא משתף (הוידיאו) מתחלק למספר חלקים שווים שנעים בין 32KB ל-16MB. לכל חלק ניתן hash שנוצר עם אלגוריתם SHA-1, מעיין קוד אימות, שנועד לוודא שהקובץ תקין ואין מידע פגום. המידע הזה נשמר במקור בקובץ ה-torrent. לכן ככל שהחלקים גדולים יותר כך גודל קובץ הטורנט קטן יותר, מאחר ויהיו פחות hash. כאשר מישהו מוריד חלק, ה-hash שלן מושווה ל-hash שנמצא בקובץ הטורנט לוודא שהוא אכן תקין. כאשר מישהו סיים את ההורדה במלואה ועכשיו רק משתף, הוא נקרא סידר – Seeder.

כל מחשב שמעוניין להוריד את הקובץ מתקשר עם כל שאר המחשבים שרוצים להוריד את הקובץ וכולם מורידים אחד מהשני את הקובץ. בהתחלה, כאשר יש רק בן אדם אחד עם הקובץ שמעלה אותו, כולם יאלצו להתחבר אליו. כשהם הורידו את הקובץ במלואו, הם יהפכו לסידרים ויתחילו לשתף (לרוב עמיתים ברשת משתפים חלקים שהם כבר הורידו ברגע שהם הורידו אותם ולא מחכים לסיום ההורדה). ככל שיותר אנשים יורידו את הקובץ, יהיו יותר אנשים שמעלים את הקובץ והרשת תגדל. למעשה, ככל שיותר אנשים מורידים את הקובץ ככה הוא יותר עמיד בפני עומסים כבדים. כל אחד מוריד חלקים שונים מסידרים שונים וכך מאפשר לשפר את מהירות ההורדה.

כשכל החלקים סיימו לרדת הקליינט (התוכנה שאנו משתמשים בה) מחבר אותם לקובץ אחד וסיימנו את ההורדה.

למעשה כאשר הטורנט “תופס תאוצה” ויש מספיק משתמשים נוצרת רשת סבוכה עם המון קשרים שנקראת swarm (נחיל). כל עמית מוריד מהמון עמיתים אחרים, במקביל. עמית אחד יכול להוריד מאות חלקים שונים של אותו הקובץ ממאות עמיתים, שכל אחד מהם גם מוריד מאות חלקים שונים ממאות עמיתים שונים.

בתחילת הפרוטוקול לא היה מנוס מלהשתמש בקובץ ה-torrent. הקובץ כלל, מעבר ל-hash של החתיכות, רשימת טראקרים. טראקר היה שרת שכלל בתוכו טבלה של כל החברים ברשת ה-P2P, כלומר כל מי שמוריד/מעלה את הטורנט. את הרשימה הזו העביר לקליינט שלנו וכך הקליינט ידע למי אפשר להתחבר בכדי להוריד את הטורנט. הבעיה היא שעדיין מדובר ברשת שהיא תלויה בשרת מרכזי כלשהו ולא מבוזרת לחלוטין, גם אם מדובר רק בהורדה של רשימת טקסט.

לכן פותח פרוטוקול ה-DHT (או Distributed Hash Table) שמאפשר לנו להוריד טורנטים בלי טראקרים והופך את הרשת למבוזרת כמעט לחלוטין. DHT הופך למעשה כל קליינט לטראקר בפני עצמו. באמצעות הפרוטוקול אפשר לפתוח לינקים מיוחדים, שנקראים magnet וכך אנחנו הופכים לצומת DHT (או DHT node)*. אנחנו מחפשים את הצמתים הקרובות ומהן משיגים מידע נוסף- צמתים נוספות. ככה אנחנו עוברים על רשת ענקית של צמתים שמספקות לנו כתובות hash נחוצות לפרוטקול, בנוסף לרשימת כתובות להורדה בלי צורך בטראקר, דהיינו שרת מרכזי. *אם המונח צומת לא מובן לכם, אז אפשר להסתכל על ה-magnet כקישור שנותן לנו מספר כתובות שמהן אפשר להוריד עוד כתובות וכן הלאה, כשכל כתובת היא שותף שאפשר להוריד ממנו את הקובץ.

את הטורנטים מוצאים לרוב באתרים שנקראים אינדקסים שכוללים רשימה של טורנטים ואת הקובץ או ה-magnet המתאים.

בגלל המבנה של הטורנטים יש להם יתרונות יחודיים ועוצמתיים. קודם כל, מאחר וכל קובץ נשמר בכמות עצומה של עותקים, יש לנו redundancy עצום. בשפה פשוטה יש המון גיבויים והסיכוי של הקובץ להיאבד עקב תקלה בשרת (לדוגמה דיסק קשיח תקול) נמחק. מעבר לזה, מאחר וההורדה כוללת המון חלקים קטנים שלא תלויים באחרים, אפשר לעצור בכל שלב את ההורדה ולהמשיך אחר כך, בלי לאבד מידע, משהו שלא כל כך אפשרי בהורדה רגילה.

לטורנטים יש גם חסרונות. הראשון הוא הפרטיות/אנונימיות. למרות שמדובר בכלי מאוד שימושי ופופולרי בהורדות פיראטיות (בין היתר בגלל כמות העותקים העצומה של הטורנטים שמפוזרת על פני יבשות), כל כתובות ה-IP חשופות לכולם. בכל קליינט אפשר לראות את רשימת השותפים שלנו עם כתובות IP מדויקות. זה גם מאפשר לגופי זכויות יוצרים לאסוף רשימה של כתובות IP ולשלוח אותן לספקיות בדרישה להורדת התוכן. במקומות מסוימים הם גם יכולים לתבוע את המשתמשים (אל תדאגו, זה בעיקר בארה"ב, לא בישראל). הפתרונות יכולים להיות קליינטים דוגמת Tribler שמספק רשת דמוית Tor ואנונימיות או פרטוקול I2P. גם VPN (שדיברנו עליו בפוסט הזה: https://neocode.blog/posts/vpn/) מאפשר לספק אנונימיות בהורדת טורנטים. פתרון נוסף יהיה טראקרים פרטיים, אבל בהם ניגע עוד רגע.

החסרון השני של טורנטים הוא מה שנקרא leechers, או עלוקות. משתמשים שמורידים את הקובץ וברגע שהם סיימו להוריד הם מכבים את הטורנט במקום להיות סידרים ולמעשה לא תורמים בחזרה לרשת, מה שפוגע במהירות ההורדה של כולם וגם מעלה את הסיכוי שהטורנט ימות כי אין מספיק אנשים שמעלים אותו.

את הבעיה הזו וגם את הבעיה של האנונימיות פותרים טראקרים פרטיים. טראקר פרטי הוא טראקר וגם אינדקס שדורש הזמנה ו/או הרשמה. הם לא פתוחים לציבור ושולטים ברשימת המשתמשים שלהם ובכך נוצרת קהילה מבוקרת יותר ונשלטת. היתרון של רשימה כזו הוא מן הסתם היכולת להרחיק רשויות חוק, אבל מעבר לכך הוא מאפשר לעשות בקרת איכות למשתמשים. בטראקרים פרטיים משתמשים מחויבים לשמור על ratio, יחס העלאה הורדה מסוים כדי לוודא שאין leechers ושכולם תורמים ומחזירים. משתמשים רבים גם רוכשים seedbox, שרת יעודי עם רוחב פס גבוה (לרוב 1 גיגהביט העלאה) ושטח אחסון גבוה שיוכל לעשות סידינג לטורנטים 24/7 במהירויות גבוהות ולאפשר להם לבנות ratio טוב שיאפשר להם להוריד קבצים נוספים בלי להיחסם, ובכך הם מאפשרים להוריד כל טורנט מהטראקרים הפרטיים במהירות שיא, גם שנים אחרי שהועלה.

לקבל הזמנה לטראקר פרטי זה לא הכי קל וצריכים למצוא מישהו שיכול לתת (רוב המשתמשים מקבלים מספר מסוימת של הזמנות, בעיקר כצ’ופר על סידינג ורטיו טוב) או להירשם בחלונות שבהם ההרשמה נפתחת לציבור הרחב.

לטעון תגובות?