# بیت‌تورنت

بیت‌تورنت| نویسنده(های) اصلی | برام کوهن |
| توسعه‌دهنده(ها) | بیت‌تورنت (شرکت) |
| انتشار اولیه | ۲۰۰۱ (۲۰۰۱-**خطا: زمان نامعتبر**}}) |
| مخزن | github.com/bittorrent/bittorrent.org |
| استاندارد(ها) | مشخصات پروتکل بیت‌تورنت |
| نوع | اشتراک فایل همتا به همتا |
| وبگاه | www.bittorrent.org |

**بیت‌تورنت** (به انگلیسی: BitTorrent) یک پروتکل ارتباطی برای اشتراک‌گذاری فایل همتا به همتا (P2P) است که به کاربران امکان می‌دهد داده‌ها و فایل الکترونیکی را از طریق اینترنت به صورت غیرمتمرکز توزیع کنند.

بیت‌تورنت پروتکلی است که به منظور فرستادن پرونده‌ها و پخش حجم بزرگی از اطلاعات، بدون کاهش در مصرف منابع پر هزینه سرور و پهنای باند طراحی شده‌است. در واقع نوعی ارتباط همتا به همتا می‌باشد که کاربران مستقیماً به یکدیگر متصل می‌شوند و به ارسال و دریافت قسمتی از فایل می‌پردازند. اگر چه فعالیت‌های تمامی کاربران یک فایل توسط سرور مرکزی به نام ترکر هماهنگ می‌شود، اما این سرور از محتویات فایل‌هایی که منتقل می‌شود، بی‌اطلاع است. در نتیجه تعداد زیادی از کاربران با پهنای باند محدود ترکر مربوط قابل پشتیبانی هستند. فلسفه کلیدی بیت‌تورنت این است که کاربران باید همزمان با دانلود کردن اطلاعات (inbound)، آپلود (outbound) نمایند. در این صورت پهنای باند شبکه با حداکثر کارایی بکار گرفته می‌شود.

بیت‌تورنت به نحوی طراحی شده‌است که برخلاف سایر پروتکل‌های انتقال، با افزایش تعداد افراد مشتاق برای دریافت یک فایل مشخص، بازدهی آن بالا می‌رود؛ برای توصیف بهتر این روند می‌توان آن را به گروهی از افراد تشبیه کرد که دور یک میز نشسته‌اند و هر کدام سعی دارند که کپی کاملی از یک کتاب ده صفحه‌ای را دریافت کنند؛ نفر اول اعلام می‌کند که صفحات ۱ و ۵ را دارد و نفرات سوم، چهارم و پنجم هر کدام قسمت‌هایی از این صفحات را ندارند؛ بنابراین هر یک برای گرفتن صفحات، به نفر اول مراجعه می‌کنند. نفر دوم اعلام می‌کند که صفحات ۵ تا ۱۰ را دارد. نفر اول، چهارم و پنجم به نفر دوم می‌گویند که بعضی از صفحات او را می‌خواهند و او هم کپی آن صفحات را به آن‌ها می‌دهد.
این روند ادامه می‌یابد تا وقتی که همه افراد کپی تمام بخش‌های موجود کتاب را به دست بیاورند. همچنین دور این میز شخص دیگری وجود دارد که کپی کل کتاب را دارد؛ بنابراین احتیاج ندارد که برایش کپی صفحه‌ای فرستاده شود. او صفحاتی که هیچ‌کس ندارد را بین افراد پخش می‌کند. در ابتدا هنگامی که افراد دور میز می‌نشینند، باید از او بخواهند که اولین سری کپی صفحات خود را به آن‌ها بدهد. گرچه افراد سعی می‌کنند که صفحات مشابه را از او نگیرند، بعد از مدتی بیشتر افراد، کپی کتاب را دارند. بدین ترتیب این فرد می‌تواند کتابی را که دارد در اختیار افراد زیادی قرار دهد، بدون اینکه مجبور باشد کل کپی را به تمام افراد بدهد. او می‌تواند در عوض، قسمت‌های مختلف کتاب را به افراد متفاوت بدهد؛ و آن‌ها قادر خواهند بود که این قسمت‌ها را در بین خود پخش کنند.

بیت‌تورنت با شبکه‌ها و پروتکل‌های همتا به همتا دیگر مانند ای‌میول، ناتلا و … فرق دارد و مثل آن‌ها محدوده مشخصی ندارد.

## تاریخچه

نخستین برنامه کاربردی بیت‌تورنت به زبان پایتون نوشته شد و کد منبع آن با نسخه ۴٫۰ تحت لیسانس BitTorrent متن‌باز ارائه شد. تعداد زیادی از کارخواه‌ها با زبان‌های مختلفی برای اجرا بر روی بسترهای مختلف، نوشته شده‌اند.

## واژگان

مفاهیم مختلفی در ارتباط با BitTorrent وجود دارند که به معرفی آن‌ها می‌پردازیم.

* torrent یا سیل (جریان شدید): این اصطلاح معمولاً به فایل متادیتای کوچکی گفته می‌شود که از وب سرور با پسوند torrent. دریافت می‌کنیم.

متادیتا در اینجا به معنی داده‌ای ست که اطلاعاتی در مورد فایل که می‌خواهیم دانلود کنیم دارد و نه خود فایل.

* 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 هیچ چیز در مورد محتوای واقعی فایل‌ها نمی‌داند؛ بنابراین مهم است که بعد از آپلود کردن یک فایل 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" از یکی از کلاینت‌ها بررسی کرد.

## روش کارکرد

پروتوکل بیت‌تورنت فایل‌ها را به تکه‌های کوچک، معمولاً یک چهارم مگابایت (۲۵۶ KB) می‌شکند.
هر چه اندازهٔ فایل بزرگ‌تر باشد، تکه‌ها نیز بزرگ‌تر خواهند بود.
به‌طور پیش فرض اندازه تکه‌ها برای یک فایل ۴٫۳۷ گیگا بایتی، ۴ مگابایت می‌باشد.
Peerها تکه‌هایی را که ندارند از یکدیگر دانلود می‌کنند و تکه‌هایی را که Peerهای دیگر ندارند برایشان آپلود می‌کنند.
این پروتوکل به اندازهٔ کافی هوشمند است که Peerای را انتخاب کند که بهترین اتصال را داشته باشد.
برای بالا بردن کارایی کل swarm، کلاینت‌های بیت‌تورنت قسمت‌هایی را درخواست می‌کنند که کمیاب ترند.
به عبارت دیگر قسمت‌هایی که در Peerهای کمتری وجود دارند، می‌توانند برای Peerهای بیشتری مفید باشند.
تکه‌های فایل‌ها معمولاً به ترتیب دانلود نمی‌شوند و احتیاج به مرتب‌سازی در ماشین دریافت‌کننده دارند.
توجه داشته باشید که کلاینت‌ها قبل از اینکه کل فایل دان لود شود، تکه‌ها را برای Peerهای دیگر آپ لود می‌کنند؛ بنابراین اشتراک گذاری برای هر Peer با یک فایل کوچک با پسوند.torrent آغاز می‌شود که یک فایل اشاره گر (pointer) است که شامل اطلاعاتی از قبیل نام فایل و اندازه آن دارد.

دانلود کردن با بیت‌تورنت بسیار آسان است. با یک فایل با پسوند.torrent آغاز می‌شود. هر فرد که می‌خواهد فایل را دانلود کند، ابتدا باید این فایل کم حجم را دریافت نماید و آن را توسط نرم‌افزارهای کارخواه بیت‌تورنت باز کند. فایل تورنت، آدرس tracker ای را که لیستی از کاربرانی که مشغول دانلود فایل هستند و محل قرار گرفتن تکه‌های فایل را که می‌داند، به کارخواه می‌دهد. برای هر منبع قابل دسترس، کارخواه متوجه می‌شود که کدام تکه از فایل مورد نظر قابل دستیابی هستند.
به محض اینکه کارخواه دریافت یک تکه را کامل کرد، آن را هش (Hash) می‌کند تا مطمئن شود که این تکه با فایل تورنت متناسب است. سپس به دنبال کسی می‌گردد که این تکه را برایش آپلود کند.

اگرچه بیت‌تورنت پروتکل مناسبی برای کاربران پهن باند (BroadBand) می‌باشد، اما برای اتصالات Dial up که به‌طور مداوم قطع می‌شوند، کارای کمتری دارد. به بیان دیگر سرورهای HTTP زیادی اتصالات خود را برای ساعات طولانی قطع می‌کنند. در حالی که تورنت‌های زیادی وجود دارند که هنوز دانلود خود را تکمیل نکرده‌اند.

## روش‌های دانلود از تورنت

برای دانلود از تورنت علاوه بر دانلود مستقیم روش‌های دیگری نیز وجود دارد. به‌عنوان نمونه برخی از سایت‌ها با دریافت مگنت یا لینک دانلود فایل را به سرورهای خود منتقل کرده و اجازه می‌دهند تا شما آن را به‌صورت مستقیم از سرور سایت دانلود کنید. اغلب سایت‌های مستقیم کننده تورنت به‌صورت خصوصی بوده و برای کاربران رایگان فضای محدودی را بدین منظور ارائه می‌دهند.

## جستارهای وابسته

* گیگاپدیا
* سای-هاب
* دسترسی آزاد
* آرون سوارتز
* پایرت بی
* قانون توقف سرقت آنلاین
* لیبجن
* مگاآپلود

## منابع

* ویکی‌پدیای انگلیسی