بیت‌تورنت

بیت‌تورنت (به انگلیسی: BitTorrent) نام یک پروتکل اشتراک فایل است که توسط برنامه‌نویسی به نام برام کوهن ایجاد و در دوم جولای ۲۰۰۱ عرضه شد.
بیت‌تورنت پروتکلی است که به منظور ارسال پرونده‌ها و توزیع حجم بزرگی از اطلاعات بدون کاهش در مصرف منابع پر هزینه سرور و پهنای باند طراحی شده‌است. در واقع نوعی ارتباط همتا به همتا می‌باشد که کاربران مستقیما به یکدیگر متصل می‌شوند و به ارسال و دریافت قسمتی از فایل می‌پردازند. گر چه فعالیت‌های تمامی کاربران یک فایل توسط سرور مرکزی به نام Tracker هماهنگ می‌شود، اما این سرور از محتویات فایل‌هایی که منتقل می‌شود بی‌اطلاع است. در نتیجه تعداد زیادی از کاربران با پهنای باند محدود Tracker مربوطه قابل پشتیبانی هستند. فلسفه کلیدی بیت‌تورنت این است که کاربران باید هم‌زمان با دانلود کردن اطلاعات (inbound)، آپلود (outbound) نمایند. در این صورت پهنای باند شبکه با حداکثر کارایی بکار گرفته می‌شود.
بیت‌تورنت به نحوی طراحی شده‌است که بر خلاف پروتکل‌های انتقال دیگر با افزایش تعداد افراد مشتاق برای دریافت یک فایل مشخص، کارا‌تر می‌شود، برای توصیف بهتر این روند می‌توان آن را به گروهی از افراد تشبیه کرد که دور یک میز نشسته‌اند و هر کدام سعی دارند که کپی کاملی از یک کتاب ده صفحه‌ای را دریافت کنند، نفر اول اعلام می‌کند که صفحات ۱ و ۵ را دارد و نفرات سوم، چهارم و پنجم هر کدام قسمت‌هایی از این صفحات را ندارند؛ بنابراین هر یک برای گرفتن صفحات، به نفر اول مراجعه می‌کنند. نفر دوم اعلام می‌کند که
صفحات ۵ تا ۱۰ را دارد. نفر اول، چهارم و پنجم به نفر دوم می‌گویند که بعضی از صفحات او را می‌خواهند و او هم کپی آن صفحات را به آنها می‌دهد. این روند ادامه می‌یابد تا وقتی که همه افراد کپی تمام بخش‌های موجود کتاب را
به دست بیاورند. همچنین دور این میز شخص دیگری وجود دارد که کپی کل کتاب را دارد؛ بنابراین احتیاج ندارد که برایش کپی صفحه‌ای فرستاده شود. او صفحاتی را که هیچ‌کس ندارد را بین افراد پخش می‌کند. در ابتدا هنگامی که افراد دور میز می‌نشینند، باید از او بخواهند که اولین سری کپی صفحات خود را به آنها بدهد. گرچه افراد سعی می‌کنند که صفحات مشابه را از او نگیرند، بعد از
مدتی همگی اکثرا کپی کتاب را دارند. بدین ترتیب این فرد می‌تواند کتابی را که دارد در اختیار افراد زیادی قرار دهد بدون اینکه مجبور باشد کل کپی
را به تمام افراد بدهد. او می‌تواند در عوض، قسمت‌های مختلف کتاب را به افراد متفاوت بدهد؛ و آنها قادر خواهند بود که این قسمت‌ها را در بین خود پخش کنند..
بیت‌تورنت با شبکه‌ها و پروتکل‌های همتا به همتا دیگر مانند ای‌میول، ناتلا و… فرق دارد و مثل آنها محدوده مشخصی ندارد.
تاریخچه
اولین برنامه کاربردی بیت‌تورنت به زبان پایتون نوشته شد و کد منبع آن با نسخه ۴٫۰ تحت لیسانس open source ارائه شد. تعداد زیادی از کارخواه‌ها با زبان‌های مختلفی برای اجرا بر روی بسترهای مختلف، نوشته شده‌اند.
اصطلاحات
مفاهیم مختلفی در ارتباط با BitTorrent وجود دارند که به معرفی آنها می‌پردازیم.
torrent یا سیل (جریان شدید): این اصطلاح معمولا به فایل متادیتای کوچکی گفته می‌شود که از وب سرور(web server) با پسوند torrent. دریافت می‌کنیم.
متادیتا در اینجا به معنی داده‌ای ست که اطلاعاتی در موردپرونده(File) که می‌خواهیم دانلود کنیم دارد و نه خود پرونده(File).
Peer (همتا): Peer کامپیوتر دیگری ست که به آن متصل شده و داده را منتقل می‌کنیم.
معمولا یک Peer تمام فایل را ندارد. در غیر این صورت اگر فایل را کامل داشته باشد به آن Seed می‌گوییم، همچنین به بعضی از Peerها Leech یا زالو هم گفته می‌شود.
Leech (زالو): به Peerای گفته می‌شود که به خاطر نسبت اشتراک پایین خود بر روی swarm(گروه، دسته) تاثیر منفی می‌گذارد.
به بیان دیگر بیشتر از اینکه آپ لود کند، دان لود می‌کند.
اکثر Leechها، کاربرانی هستند که اتصالات نامتقارن دارند و کلاینت BitTorrent خود را بعد از اتمام دان لود برای عمل seeding باز نمی‌گذارند.
حتی بعضی از Leechها به عمد با محدود کردن سرعت ارسال، از آپ لود کردن جلوگیری می‌کنند.
با این وجود اصطلاح Leech می‌تواند به جای Peer نیز بکار گرفته شود.
Seed (دانه): کامپیوتری ست که کپی کامل یک torrent را دارد.
هنگامی که کامپیوتر ما به طور کامل فایل را دان‌لود کرد، تا زمانی که روی دکمه پایان کلیک نکنیم یا به هر طریق آن را نبندیم، باز باقی می‌ماند.
به این عمل Seed بودن یا Seeding می‌گویند.
همچنین می‌توانیم یک کلاینت BitTorrent را با فایل کاملی شروع کنیم. به محض اینکه BitTorrent فایل را امتحان کرد، متصل شده و فایل مربوطه را برای افراد دیگر Seed می‌کند.
در کل، بهتر است بعد از اینکه فایلی را به طور کامل دریافت کردیم، برای کمک به دیگران آن را Seed کنیم.
همچنین هنگامی که فایل torrent جدیدی به Tracker فرستاده می‌شود، باید حداقل یک Seed موجود باشد که آن را برای دیگران بفرستد.
به یاد داشته باشید که Tracker هیچ چیز در مورد محتوای واقعی فایل‌ها نمی‌داند؛ بنابراین مهم است که بعد از upload کردن یک فایل torrent در Tracker، آن را Seed کنیم.
Reseed (کاشت دوباره):
هنگامی که هیچ Seedای برای فایل تورنت مورد نظر موجود نباشد و Peerها با هم، کل فایل را نداشته باشند، تمامی Peerها فایل ناقصی دارند و هیچ‌یک، قسمت‌های تکمیل کننده را ندارد.
در این صورت کامپیوتری با فایل کامل (Seed)، باید به Swarm (گروه، دسته) متصل شود و قسمت‌های ناقص فایل را ارسال کند.
این عمل کاشت دوباره نام دارد.
معمولا یک درخواست برای عمل Reseed با تعهدی همراه است مبنی بر اینکه بعد از دان‌لود کامل فایل، فرد درخواست کننده باید برای مدت زمان مشخصی به منظور افزودن طول عمر به فایل تورنت به عنوان یک Seed عمل کند.
Swarm (گروه، دسته):
به گروهی گفته می‌شود که به طور مشترک و جمعی برای یک فایل خاص به یک‌دیگر متصل هستند.
برای مثال اگر یک کلاینت BitTorrent را راه‌اندازی کنیم و به ما بگوید که به ۱۰ Peer و ۳ Seed متصل هستیم، Swarm شامل کامپیوتر ما و ۱۳ نفر دیگر است.
Tracker (ردیاب):
سروری ست در اینترنت که فعالیت‌های کلاینت‌های BitTorrent را هماهنگ می‌کند.
هنگامی که تورنتی را باز می‌کنیم، ماشین ما با Tracker ارتباط برقرار می‌کند و لیستی از Peerها را برای تبادل اطلاعات دریافت می‌کند.
این کار به طور دوره‌ای و متناوب صورت می‌گیرد و Tracker میزان دان‌لود و آپ‌لود، میزان باقی‌مانده از فایل و وضعیتی که در حال حاضر داریم (شروع، پایان دان‌لود و توقف) را به ما نشان می‌دهد.
اگر Tracker از کار بیفتد و بخواهیم یک تورنت را باز کنیم، قادر نخواهیم بود.
اگر بعد از اتصال در حین ارتباط با Peerها و دان‌لود کردن فایل تورنت، Tracker از کار بیفتد، قادر به ادامه انتقال با آن Peerها خواهیم بود ولی هیچ Peer جدیدی قادر به برقرار کردن ارتباط با ما نخواهد بود.
معمولا خطاهای Trackerها موقتی هستند؛ بنابراین بهترین کار اینست که صبر کنیم و کلاینت را باز نگهداریم تا به سعی خود ادامه دهد.
Downloading (دریافت کردن):
به عمل دریافت داده از کامپیوتر دیگر دان‌لود کردن می‌گویند.
Uploading (ارسال):
به عمل فرستادن و ارسال داده به کامپیوتر دیگر گفته می‌شود.
Share rating (سرعت اشتراک):
اگر از یک کلاینت آزمایشی با stats-patch استفاده می‌کنیم، می‌توانیم سرعت اشتراک را در یک پنل GUI مشاهده کنیم؛ که نشان دهنده نسبت مقدار آپ‌لود شده به مقدار دان‌لود شده‌است.
مقدارهای به‌کار برده شده، تنها برای قسمت‌های در حال انتقال هستند نه برای کل فایل.
اگر نسبت اشتراک نشان داده شده برابر با ۱ باشد، بدین معنی ست که به همان میزانی که آپ‌لود نموده‌ایم، دان‌لود کرده‌ایم. هر چه این عدد بزرگ‌تر باشد نشان‌دهنده اینست که به میزان بیشتری ارسال کرده‌اید.
اگر این نسبت ۰ بود، به این معنی ست که شما کل فایل را دریافت نموده‌اید و به عنوان Seed فعالیت می‌کنید؛ بنابراین هر چه بیشتر به ارسال ادامه دهید میزان این نسبت به سمت بی‌نهایت می‌رود.
این نسبت تنها به منظور آگاهی کاربران محاسبه می‌شود.
Distributed Copies (کپی‌های توزیع شده):
در بعضی از کلاینت‌ها (نرم‌افزارها)، عبارت «متصل به n عدد seed و در حال مشاهده n.nnn کپی توزیع شده» را مشاهده می‌کنید.
یک Seed ماشینی با فایل کامل است. با این وجود، Swarm می‌تواند در مجموع، کل فایل را داشته باشد بدون اینکه Seedای داشته باشد؛ و این همان چیزی ست که این عبارت بیان می‌کند.
Choked (مسدود شده):
این اصطلاحی ست که در پروتوکل BitTorrent به‌کار رفته‌است و به حالتی از یک ارسال کننده فایل (uploader) اشاره دارد که یک اتصال مسدود شده به این معنی که ارسال کننده در حال حاضر نمی‌خواهد داده‌ای به آن لینک ارسال کند.
کلاینت BitTorrent، بنا به دلایلی، سیگنالی به کلاینت‌های دیگر می‌فرستد که مسدود شدن این لینک را اعلام کند. اما معمولا به‌طور پیش‌فرض یک کلاینت (کلاینتی که بیشترین آپ‌لود را داشته‌است) آپ‌لودهای فعال خود را باز می‌گذارد و بقیه کلاینت‌ها مسدود اعلام می‌شوند.
مقدار پیش فرض ۴ می‌باشد که مشابه تنظیمات کلاینت BUI آزمایشی ست که می‌توان تغییر داد.
یک اتصال می‌تواند به دلایل دیگری نیز مسدود شود. به طور مثال هنگامی که یک Peer مشغول دریافت فایلی از یک Seed است که نمی‌خواهد داده‌ای را ارسال کند، اتصالش مسدود شده اعلام می‌شود.
توجه داشته باشید که اگر هر اتصال دوطرفه و قرینه باشد، دو علامت نمایش انسداد برای هر اتصال (انتهای هر ارسال کننده) خواهیم داشت.
Interested (مشتاق):
اصطلاح دیگری ست که در پروتوکل BitTorrent به‌کار برده می‌شود که در نتیجه علامت انسداد ایجاد شده‌است و نشان دهنده حالتی ست که فرد دان‌لود کننده در انتظار اتصال و دریافت قسمتی از فایل است.
فرد دان‌لود کننده هنگامی مشتاق نامیده می‌شود که در کلاینت مقابل، قسمتی از فایل موجود باشد که این فرد احتیاج دارد.
Snubbed (منع شده):
اگر کلاینت هیج داده‌ای را بعد از مدت زمان مشخصی (بطور پیش‌فرض ۶۰ ثانیه) دریافت نکند، منع شده نامیده می‌شود. این حالت هنگامی رخ می‌دهد که از ارسال Peer مقابل، برای مدتی جلوگیری شده باشد.
بعضی از اوقات کلاینت در حالتی قرار می‌گیرد که با این‌که به تعداد زیادی از Peerها متصل است، ولی توسط تمام آنها مسدود شده‌است. این کلاینت از علامت منع شده استفاده می‌کند تا از این موقعیت خارج شود.
این علامت نشان می‌دهد که یک Peer که می‌خواهد تکه‌هایی از فایل را انتقال دهد، برای مدتی چیزی ارسال نکرده‌است.
Optimistic unchoking (اتصال مجدد خوشبینانه):
کلاینت‌ها به طور متناوب، لیستی از ارسال کننده‌ها را بازنگری می‌کنند و تلاش می‌کنند تا اتصالات جدیدی را که قبلا مسدود شده بودند، برقرار کنند و اتصالاتی را که برقرار کرده بودند را مسدود کنند.
این اعمال را می‌توان هر ۱۰ یا ۲۰ ثانیه با مشاهده "Advanced" از یکی از کلاینت‌ها بررسی کرد.
نحوه کارکرد
right
پروتوکل بیت‌تورنت فایل‌ها را به تکه‌های کوچک، معمولا یک چهارم مگابایت (۲۵۶ KB) می‌شکند.
هر چه اندازه فایل بزرگ‌تر باشد، تکه‌ها نیز بزرگ‌تر خواهند بود.
به طور پیش فرض اندازه تکه‌ها برای یک فایل ۴٫۳۷ گیگا بایتی، ۴ مگابایت می‌باشد.
Peerها تکه‌هایی را که ندارند از یکدیگر دانلود می‌کنند و تکه‌هایی را که Peerهای دیگر ندارند برایشان آپلود می‌کنند.
این پروتوکل به اندازه کافی هوشمند است که Peerای را انتخاب کند که بهترین اتصال را داشته باشد.
برای بالا بردن کارایی کل swarm، کلاینت‌های بیت‌تورنت قسمت‌هایی را درخواست می‌کنند که کمیاب ترند.
به عبارت دیگر قسمت‌هایی که در Peerهای کمتری وجود دارند، می‌توانند برای Peerهای بیشتری مفید باشند.
تکه‌های فایل‌ها معمولا به ترتیب دانلود نمی‌شوند و احتیاج به مرتب‌سازی در ماشین دریافت کننده دارند.
توجه داشته باشید که کلاینت‌ها قبل از اینکه کل فایل دان لود شود، تکه‌ها را برای Peerهای دیگر آپ لود می‌کنند؛ بنابراین اشتراک گذاری برای هر Peer با یک فایل کوچک با پسوند.torrent آغاز می‌شود که یک فایل اشاره گر (pointer) است که شامل اطلاعاتی از قبیل نام فایل و اندازه آن دارد.
دانلود کردن با بیت‌تورنت بسیار آسان است. با یک فایل با پسوند.torrent آغاز می‌شود. هر فرد که می‌خواهد فایل را دانلود کند، ابتدا باید این فایل کم حجم را دریافت نماید و آن را توسط نرم‌افزارهای کارخواه بیت‌تورنت باز کند. فایل تورنت، آدرس tracker ای را که لیستی از کاربرانی که مشغول دانلود فایل هستند و محل قرار گرفتن تکه‌های فایل را که می‌داند، به کارخواه می‌دهد. برای هر منبع قابل دسترس، کارخواه متوجه می‌شود که کدام تکه از فایل مورد نظر قابل دستیابی هستند.
به محض اینکه کارخواه دریافت یک تکه را کامل کرد، آن را هش (Hash) می‌کند تا مطمئن شود که این تکه با فایل تورنت متناسب است. سپس به دنبال کسی می‌گردد که این تکه را برایش آپلود کند.
اگرچه بیت‌تورنت پروتکل خوبی برای کاربران پهن باند (BroadBand) می‌باشد، برای اتصالات Dial up که بطور مداوم قطع می‌شوند، کمتر کارایی دارد.
به بیان دیگر سرورهای HTTP زیادی اتصالات خود را برای ساعات طولانی قطع می‌کنند. در حالیکه تورنت‌های زیادی وجود دارند که هنوز دان لود خود را تکمیل نکرده‌اند.