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