برنامه نویسی

اما چگونه تورنتانگ کار می کند؟

اگر ترجیح می دهید این مقاله را به عنوان یک فیلم مصرف کنید ، این را بررسی کنید!

https://www.youtube.com/watch؟v=dleyeihutqo

رجیت

همچنین ، یک نکته جانبی سریع: این مقاله قصد دارد کاملاً زبان آگنوستیک باشد ، به این معنی که ما در مورد آن بحث نمی کنیم چگونه برای انجام کاری مربوط به تورنت به یک زبان خاص.

سرانجام ، اگر شما اینجا هستید زیرا می خواهید خودتان یک مشتری BitTorrent را پیاده سازی کنید ، احتمالاً باید این نمودار را بررسی کنید (باید یک حساب کاربری بسازید ، ببخشید).

شما ممکن است قبلاً از Bittorrent یا Torrenting شنیده باشید ، اما احتمالاً هرگز نگاهی به زیر هود نگاهی نگرفته اید که چگونه همه این کار را انجام می دهد. تورنت یک روند شگفت آور پیچیده است و در این مقاله ، ما قصد داریم یک شیرجه عمیق را به پروتکل Bittorrent و نحوه عملکرد آن برسانیم.

اگر آشنا هستید ، احساس راحتی کنید که از پیش بروید

اولا ، بیایید در مورد نحوه کار و تورنت صحبت کنیم. بنابراین ، همانطور که ممکن است بدانید ، bittorrent غیر متمرکز است و بارگیری بین این گره های غیرمتمرکز به نام همسالان رخ می دهد. چرا؟ خوب ، در صورت بارگیری از چندین “سرور” یا در این مورد همسالان ، معمولاً می توانید سرعت بارگیری بسیار بهتری کسب کنید. به هر حال ، این همسالان گاهی اوقات به عنوان بذر نامیده می شوند ، زیرا پرونده ای را که می خواهید بارگیری کنید ، “دانه” می کنند.

نمودار همسالان

بیایید از طریق نسخه ی نمایشی قدم بزنیم: برای به دست آوردن لیستی از همسالان برای بارگیری ، با آنچه به عنوان ردیاب خوانده می شود تماس می گیرید. یک ردیاب لیستی از همه همسالان موجود را برای یک پرونده خاص نگهداری می کند (و بله ، این یک نوع متمرکز است ، اما می توانید این کار را به روشی غیر متمرکز انجام دهید که بعداً در مورد آن صحبت خواهیم کرد) و در صورت موجود بودن یک همسالان جدید ، آن لیست را به روز می کند. بنابراین ، ما این لیست را از یک ردیاب درخواست می کنیم و به مرحله بعدی حرکت می کنیم.

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

نمودار مینی بیتورنت

تفاوت بین تورنت و تورنت 👁

بیایید چیز مهمی را بیان کنیم: .Torrent به Filetype تورنت اشاره می کند که تمام داده های مورد نیاز برای تورنت را حفظ می کند ، و Bittorrent به پروتکل اشاره دارد – یعنی Bittorrent پروتکل است که اجازه می دهد تا روند تورنت رخ دهد ، و پرونده .torrent فقط پرونده ای است که شامل اطلاعات مربوط به تماس با PEERS است ، لیستی از Pears را دریافت می کند. بعداً در مورد آن

مقداری سردرگمی

اما حتی گیج کننده تر می شود. Bittorrent همچنین به مشتری BitTorrent اشاره دارد ، که در اصل فقط یک بسته بندی برای پروتکل Bittorrent است. این یک رابط کاربری گرافیکی دارد و به شما امکان می دهد پرونده های را به راحتی تورنت کنید. همچنین چند مورد دیگر Bittorrent (دوباره با اشاره به پروتکل در اینجا) مانند Utorrent وجود دارد که دوباره به عنوان یک بسته بندی برای پروتکل Bittorrent عمل می کنند.

و برای اینکه حتی گیج کننده تر شود ، BitTorrent می تواند بر روی چندین پروتکل مختلف مانند UDP و TCP فعالیت کند. و اگر این شما را گیج کند – خوب ، من شما را سرزنش نمی کنم. این ممکن است به شما کمک کند درک کنیم که ما در مورد چه چیزی صحبت می کنیم (مدل OSI). این مدل OSI است. شما نیازی به آگاهی از آن یا نحوه عملکرد آن ندارید – فقط بدانید که لایه فیزیکی به داده های انتقال کابل تحت اللفظی اشاره دارد ، لایه حمل و نقل به مواردی مانند TCP و UDP اشاره دارد و لایه برنامه به پروتکل هایی مانند HTTP اشاره دارد.

نمودار کوچک مدل OSI

بنابراین ، پروتکل BitTorrent با جعبه و ارسال توسط TCP یا UDP عمل می کند. همچنین این مورد به نام UTP وجود دارد که پروتکل حمل و نقل UTORRENT است ، اما نگران این موضوع نباشید.

خوب ، یک مورد نهایی که در درک Bittorrent کاملاً ضروری است: همه ، به جز سرورهای ردیاب فوق الذکر ، برابر هستند – به عبارت دیگر ، همه وزن خود را تحمل می کنند. این بدان معناست که اگر مشتری شما به چند همسالان متصل شود و چند پرونده را بارگیری کند ، از مشتری شما نیز انتظار می رود که این پرونده ها را به سایر همسالان بالقوه ارائه دهد. فقط در حالی که در سطوح پایین BitTorrent قدم می زنیم ، این را در خاطر داشته باشید. و با این کار ، ما همچنین در هر شبکه BitTorrent که به آن وصل شده ایم ، همکار هستیم.

ردیاب در عمق

اصول اولیه ما با یک فایل تورنت یا این مورد به نام Magnet URI شروع می کنیم. ما اطلاعات مربوطه را استخراج می کنیم و به ردیاب درخواست می کنیم تا لیستی از همسالان را برای شروع درخواست درخواست دریافت کنیم. بیایید یک شیرجه عمیق تر به این موضوع بپردازیم.

پرونده تورنت به نمودار JSON

همانطور که قبلاً نیز اشاره کردم ، این اولین بخش از فرآیند پروتکل BitTorrent برای بارگیری پرونده ها است: یعنی دریافت لیستی از همسالان برای بارگیری.

آنچه ما نیاز داریم

به طور طبیعی ، ما به آدرس IP یا URL ردیاب و همچنین چند مورد دیگر نیاز داریم. این داده ها می توانند به یکی از دو شکل ارائه شوند ، همانطور که اکنون ذکر شده است: یک پرونده .torrent یا یک URI آهنربا ، که تا حدودی شبیه یک پرونده .torrent به شکل URI است – دقیقاً نیست.

اکنون این “چیزهای دیگر” که برای ردیاب نیاز داریم ، چیست؟ خوب ، ما به این چیزی که به نام هش اطلاعات و شناسه همسالان خود نیاز داریم ، نیاز داریم. شناسه همکار فقط شناسه مشتری ما در یک شبکه Bittorrent (به طور تصادفی تولید شده) است ، و اطلاعات هش یک هش Sha-1 از بخشی از پرونده .torrent است. ما به اینها احتیاج داریم تا ردیاب بتواند چه لیستی از همسالان را برای بازگشت مشخص کند.

اگر این یک URI آهنربا است ، بسته به نحوه نگاه شما به آن ، چیزها کمی ساده تر هستند (یا پیچیده تر). URI آهنربا دارای زمینه های مشابه با یک پرونده .torrent است ، اما همه زمینه ها در آنجا قرار نمی گیرند. اگر ردیاب آدرس (AKA URL/IP به سرور ردیاب) در آنجا باشد ، ما فقط می توانیم یک درخواست ساده برای آن ایجاد کنیم و با زندگی خود حرکت کنیم. اگر اینطور نیست ، ما باید بررسی کنیم که آیا لیستی از همسالان برای شروع وجود دارد یا خیر.

نمودار استخراج اطلاعات از URI آهنربا

اینجاست که “روش غیر متمرکز تر برای گرفتن همسالان” که قبلاً به آن اشاره کردم ، و آن را DHT نامیده می شود. اگر به ما لیستی از همسالان داده شود ، ممکن است این همسالان لیست دیگری از همسالان را برای ما داشته باشند ، و آن همسالان نیز ممکن است و غیره. به عبارت دیگر ، اگر ردیاب نداریم ، می توانیم از همسالان دیگر همسالان بگیریم.

سرانجام ، اگر هیچ یک از این زمینه ها حضور ندارند ، می توانیم از “منبع قابل قبول” بارگیری کنیم. این فقط یک بارگیری استاندارد است ، اما تضمین می کند که کاربر اگر هیچ چیز دیگری کار نمی کند ، حداقل می تواند یک فایل را بارگیری کند.

همسالان (ها)؟ 🫥

اوه ، و شما ممکن است متوجه شده باشید که من می گویم “همسالان” ، جمع. این امر به این دلیل است که حداقل باید یک همسالان وجود داشته باشد ، اما ما می توانیم به 20 ، 50 یا حتی همسالان متصل شویم. توجه به این نکته بسیار مهم است زیرا در طول این مقاله ، من فقط به خاطر سادگی به یک همکار مراجعه می کنم. فقط بدانید که همین روند برای بسیاری از همسالان دیگر اتفاق می افتد.

در مرحله بعد ، بیایید نگاهی به دست اول ساخته شده با همسالان بیندازیم. تفسیر سطح بالا در این بخش از پروتکل چیزی شبیه به این خواهد بود:

ما می خواهیم با یک همسالان ارتباط برقرار کنیم (در این حالت به عنوان یک بذر نیز شناخته می شود ، زیرا آنها قطعاتی از پرونده را به ما ارائه می دهند) ، بنابراین ما به همسالان می گوییم “سلام ، من این پرونده را دارم که می خواهم بارگیری کنم. آیا می توانید اطلاعات خود را برای من ارسال کنید تا ببینم که پرونده شما دست نخورده است؟” سپس ، اگر اطلاعاتی که همسالان ارسال می کند صحیح است ، می توانیم با روند کار ادامه دهیم.

با این کار ، بیایید نگاهی بیندازیم که در واقع محاصره این دست به نظر می رسد.

به یاد بیاورید که من به این لیست از همسالان که از Tracker یا Magnet URI به عنوان یک همسالان مفرد به خاطر سادگی دریافت کردیم ، اشاره خواهم کرد. برای اتصال به یک همسالان ، باید با دست زدن به آنها شروع کنیم.

در اینجا این هدر به نظر می رسد. طول آن 68 بایت است. این کار با شخصیت 19 به عنوان یک بایت واحد شروع می شود ، و رشته “پروتکل BitTorrent” به عنوان 19 بایت. سپس 8 بایت بالشتک ، 20 بایت sha-1 اطلاعاتی که اکنون در مورد آنها بحث کرده ایم ، و شناسه 20 بایت ما وجود دارد.

دست دستی

ما این را به همتا ارسال می کنیم و منتظر پاسخ هستیم. همسالان آنچه را که فکر می کنند SHA-1 HASH آنهاست ، ارسال می کند ، و همچنین تضمین می کند که همه چیز در مورد دست زدن به دست معتبر است (طول مناسب و غیره است).

ما با بررسی اینکه آیا ویژگی های کلی در مورد دست زدن صحیح است ، این دست را تأیید می کنیم (دوباره ، طول مناسب است) ، و سپس اطمینان حاصل می کنیم که هش SHA-1 همسالان با ما مطابقت دارد. اگر این کار را نکند ، ممکن است قطعات همسالان پرونده خراب شوند ، یا به سادگی نادرست باشند. مسئله هرچه باشد ، اگر هش SHA-1 همسالان با ما مطابقت نداشته باشد ، ما ارتباط با آن همسالان را قطع می کنیم.

چه چیزی باعث ایجاد نمودار دستی معتبر می شود

اگر همه چیز درست به نظر برسد ، ما به مرحله بعدی حرکت می کنیم.

اکنون می توانیم ارسال پیام های واقعی را شروع کنیم. توجه داشته باشید که ما همچنین قرار است هر دو دقیقه یک بار پیام های نگهدارنده ارسال کنیم.

من مستقیماً به چه پیام هایی می فرستیم ، اما ابتدا باید در مورد قالب صحبت کنیم. در سطح اساسی ، 9 پیام مختلف وجود دارد که می توانیم برای یک همسالان ارسال کنیم. همه آنها توسط بایت اول: 0 تا 8 ، شامل می شوند. در واقع ، این یک دروغ است ، زیرا 4 بایت قبل از بایت “نوع” وجود دارد. این 4 بایت برای نشان دادن طول پیام محفوظ است.

نمودار پیام bittorrent

بعد از “طول” و “نوع بایت” ، ما می توانیم انجام دهیم … حداقل هر کاری که مشخصات پروتکل Bittorrent اجازه می دهد. به زودی نمونه هایی از بارهای بار را مشاهده خواهید کرد ، اما 4 نوع پیام اول که ما در مورد آنها صحبت خواهیم کرد ، هیچ بار دیگری را ندارد. آنها فقط نمایانگر وضعیت همسالان هستند. این انواع آنها خفه می شوند ، ناپدید می شوند ، علاقه مند می شوند ، اما به نظر می رسد که خیلی زود از این پیام ها استفاده می کنید. فقط می تواند به این پیام ها فکر کند که وضعیت نقل قول-یا ما را تغییر می دهد (یا ما).

پیام ها

اولین پیام با بار ، پیام “داشتن” است. بار این پیام یک بایت واحد است که نمایانگر شاخص قطعه ای است که بارگیری کننده به تازگی تکمیل کرده و هش را بررسی کرده است. به یاد بیاورید که قطعات به سادگی قسمتهای جداگانه ای از یک پرونده معین هستند که همسالان در اختیار دارد.

نمودار پیام داشته باشید

پیام بعدی با بار بار “Bitfield” است. این پیام فقط به عنوان اولین پیام ارسال شده است ، و بایت های Bitfield با شاخص های قطعات پرونده (0-7 ، 8-15 و غیره) مطابقت دارد. به طور طبیعی ، بار بار بیتفیلد (بله ، یک زمینه تحت اللفظی بیت) با هر شاخصی از قطعه ای است که بارگیری کننده روی آن 1 و بقیه روی 0 تنظیم شده است. به عنوان مثال ، این Bitfield به ما می گوید که همسالان دارای قطعات 3 ، 5 و 6 است.

نمودار پیام Bitfield

پیام بعدی “درخواست” است. این پیام به این صورت عمل می کند … شما آن را حدس زده اید ، درخواست یک قطعه. این شامل یک شاخص ، شروع و طول است. طول به طول بلوکی که درخواست می کنیم اشاره دارد و معمولاً قدرت 2 است ، این شاخص به شاخص تحت اللفظی قطعه تحت اللفظی اشاره دارد (در مورد Bitfield در اینجا فکر کنید) ، و شروع به افست در آن قطعه است. این زمان خوبی برای ذکر چیزهای عجیب است: ما در واقع قطعات را به عنوان یک قطعه کامل درخواست نمی کنیم – هر قطعه را در بلوک درخواست می کنیم. به بیان مناسب تر ، ما پرونده ای را داریم که به قطعات شکسته می شود ، که سپس در بلوک ها درخواست می شود. به همین دلیل است که ما به یک افست نیاز داریم – برای گفتن به همسالان یا بذر ، از کجا می توان یک بلوک را شروع کرد.

نمودار پیام را درخواست کنید

پیام بعدی “قطعه” است. این پیام پاسخی به پیام درخواست است. به عنوان مثال ، تصور کنید که ما با پیام “درخواست” یک قطعه را از یک همکار درخواست می کنیم. این همسالان با یک پیام “قطعه” پاسخ می دهند. یک پیام قطعه شامل یک فهرست ، یک افست و یک بلوک است: بخشی از قطعه واقعی که درخواست کردیم. این شاخص دوباره شاخص تحت اللفظی قطعه است و افست از پیام درخواست کپی می شود.

نمودار پیام قطعه

پیام نهایی “لغو” است. مورد استفاده از این پیام کمی عجیب است ، اما بعداً به آن خواهیم رسید – به هر حال به آن “حالت endgame” گفته می شود. به طور طبیعی ، این یک درخواست برجسته را لغو می کند ، و حاوی یک شاخص ، جبران و طول است. ما قبلاً شاخص و افست را پوشش داده ایم و طول آن به سادگی به قسمت طول درخواست اشاره دارد.

نمودار پیام را لغو کنید

بیایید چند پیام ارسال کنیم! 🐱

سرانجام ، سرانجام ، سرانجام ، ما قادر به ارسال پیام هستیم!

اولین پیامی که ما ارسال می کنیم ، اگر ما وجود داشته باشد ، بیتفیلد از قطعاتی است که داریم. به یاد داشته باشید که در BitTorrent ، همه به عنوان یک برابر رفتار می شوند ، به این معنی که انتظار می رود پس از داشتن تکه های پرونده ، به عنوان یک بذر عمل کنیم. اولین پیامی که دریافت می کنیم یک پیام “Bitfield” است که به ما می گوید که همسالان چه قطعاتی دارند. اگر همسالان هیچ قطعه ای نداشته باشند ، می توانیم اتصال را قطع کنیم ، یا اجازه دهیم که پرونده های همسالان از ما بارگیری کنند.

این زمان بسیار خوبی برای صحبت در مورد خفگی است – چیست و چرا در پروتکل BitTorrent اجرا می شود؟

مفهوم خفگی در واقع الگوریتمی است که به مسدود کردن همسالان که زالو می کنند کمک می کند – شما می پرسید؟ خوب ، این معکوس بذر است. تصور کنید که آیا این همسالان ما فقط در مورد آن صحبت کرده ایم که عمداً یک بیتفیلد خالی را ارسال کرده است.

این بدان معنی است که آنها به هیچ وجه قصد کمک به شبکه را ندارند و در عوض می خواستند فقط یک فایل را بارگیری کنند. به طور طبیعی ، زالو به طور مستقیم بر خلاف اصل برابری در یک شبکه BitTorrent پیش می رود ، و ما برای مقابله با این کار به یک روش کارآمد نیاز داریم. خفگی دقیقاً این کار را انجام می دهد ، و همچنین به عملکرد عمومی و سرعت بارگیری کمک می کند.

تمام آنچه گفته شد ، الگوریتم خفگی برای این مقاله کمی پیچیده است. به سادگی درک کنید که این یک ابزار بسیار مفید برای پروتکل BitTorrent است ، و هر زمان که می بینید “خفه” ، “Unchoke” ، “علاقه مند” یا “علاقه مند” مانند شما قبلاً انجام دادید ، ما فقط از الگوریتم خفه کننده استفاده می کنیم.

اگر می خواهید یک شیرجه عمیق به خفگی بپردازید ، واقعاً باید این ویدیو را بررسی کنید

https://www.youtube.com/watch؟v=iognyjrzce8

به هر حال ، هنگامی که ما پیام های “Bitfield” را که به آن نیاز داریم ارسال و دریافت کردیم ، می توانیم یک پیام “علاقه مند” ارسال کنیم و منتظر بمانیم و یک پیام “Unchoke” دریافت کنیم. اگر پرونده ای برای تهیه داشته باشیم ، معکوس را انجام خواهیم داد.

اگر این درخواست ها موفقیت آمیز باشد ، می توانیم با همسالان کار کنیم – هم در بارگذاری و هم در بارگیری پرونده ها.

اگر همسالان یک قسمت از قطعات را بفرستید ، می توانیم درخواست آن قطعات را با یک پیام همسالان “درخواست” بپردازیم و در پاسخ به هر یک از این درخواست ها منتظر پیام “قطعه” باشیم. اگر همسالان از هر قطعه ای بخواهد ، می توانیم همین کار را انجام دهیم. تا زمانی که پرونده ای برای بارگیری یا بارگذاری داشته باشیم و هیچ اتصالی به طور ناخواسته قطع نشده باشد ، می توانیم با همسالان (یا دوباره ، همسالان چندگانه) در ارتباط باشیم و همچنان به بارگذاری یا بارگیری پرونده ها ادامه دهیم.

الگوریتم بارگیری BitTorrent

اکنون زمان بسیار خوبی برای ذکر حالت endgame است. من فکر می کنم اسناد BitTorrent این موضوع را به خوبی جمع می کند ، بنابراین من آنها را در اینجا نقل می کنم: “وقتی یک بارگیری تقریباً کامل است ، تمایل به چند قطعه آخر وجود دارد که همه از یک خط مودم هیده شده مجرد بارگیری شوند ، مدت زمان بسیار طولانی ارسال می شود. هر بار که یک قطعه وارد می شود ، به همه افراد دیگر لغو می شود. “

به عبارت دیگر ، می توان از پیام “لغو” برای سرعت بخشیدن به بارگیری ها در پایان فرآیند بارگیری استفاده کرد.

و سرانجام ، هنگامی که همه ما تمام شدیم ، می توانیم اتصال به همسالان را قطع کنیم (یا دوباره ، همه و همه همسالان که به آنها وصل شده ایم). تا آنجا که من آگاه هستم ، پاکسازی دستی زیادی وجود ندارد که ما باید با پروتکل BitTorrent انجام دهیم. این فقط یک نوع است “خوب ، من تمام شده ام ، خداحافظ”.

هنگامی که همه قطعات را داریم ، آنها را با هم ترکیب می کنیم و پرونده نهایی را در دیسک ذخیره می کنیم.

بنابراین با این کار ، امیدوارم که این مقاله بتواند درک بهتری از پروتکل BitTorrent به شما ارائه دهد.

اگر چیزی وجود دارد که اشتباه کردم ، لطفاً نظر دهید و به من اطلاع دهید. من بسیار خوشحال می شوم که هر چیزی را که صحیح نیست تغییر دهم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا