Libtorrent
libtorrent بٹ ٹورنٹ پروٹوکول کا ایک اوپن سورس نفاذ ہے۔ یہ C + + میں لکھا گیا ہے اور اس کا مرکزی لائبریری انٹرفیس C + + میں ہے۔ اس کی سب سے قابل ذکر خصوصیات مین لائن ڈی ایچ ٹی، آئی پی وی 6، ایچ ٹی ٹی پی سیڈز اور ایم یو ٹورنٹ کے ہم مرتبہ تبادلے کے لیے سپورٹ ہیں۔ libtorrent اپنے پلیٹ فارم کی آزادی حاصل کرنے کے لیے بوسٹ، خاص طور پر Boost.Asio کا استعمال کرتا ہے۔ یہ ونڈوز اور زیادہ تر یونکس جیسے آپریٹنگ سسٹمز (او ایس ایکس، لینکس، اور بہت سے بی ایس ڈی) پر بنانے کے لیے جانا جاتا ہے۔ لبٹورنٹ کو بٹ ٹورنٹ ایکسٹینشنز کے ساتھ تازہ ترین رکھا جاتا ہے جسے ڈویلپرز سب سے زیادہ مفید سمجھتے ہیں، اور ماحول کے وسیع تر سیٹ میں کام کرنے کے لیے فعال طور پر بہتر بنایا جا رہا ہے۔ اس کی بہت سی خصوصیات کو مرتب کرنے کے وقت غیر فعال کیا جا سکتا ہے تاکہ کوڈ کو شامل نہ کیا جا سکے جو کسی خاص استعمال کے معاملے میں استعمال نہیں ہوگا۔ اس کا مقصد سرایت شدہ آلات کے ساتھ ساتھ ڈیسک ٹاپ اور سیڈ سرورز کے لیے سب سے موزوں لبٹورنٹ نفاذ ہونا ہے۔ اس کے نفاذ کی کچھ تفصیلات فیچرز سیکشن میں بیان کی گئی ہیں۔ لبٹورنٹ کے اصل مصنف اروند نوربرگ ہیں۔ یہ پہلا کلائنٹ ہے جس نے مائیکرو ٹورنٹ کے ساتھ مل کر توسیعی پروٹوکول کی حمایت کی ہے، جو اب ایک ایسی بنیاد ہے جس پر بہت سی دوسری توسیعات تعمیر ہوتی ہیں۔ خصوصیات نافذ شدہ بی ای پیز بی ای پیز بٹ ٹورنٹ افزودگی تجویز کے عمل کا ایک حصہ ہیں۔ بی ای پی ایک ڈیزائن دستاویز ہے جو بٹ ٹورنٹ کمیونٹی کو معلومات فراہم کرتی ہے، یا بٹ ٹورنٹ پروٹوکول کے لیے ایک نئی خصوصیت بیان کرتی ہے۔ بی ای پی کو خصوصیت کی ایک جامع تکنیکی وضاحت اور خصوصیت کے لیے ایک استدلال فراہم کرنا چاہیے۔ ان کا مقصد نئی خصوصیات کی تجویز کرنے، کسی مسئلے پر کمیونٹی ان پٹ جمع کرنے، اور بٹ ٹورنٹ میں جانے والے ڈیزائن کے فیصلوں کو دستاویز کرنے کے لیے بنیادی میکانزم بننا تھا۔ بی ای پی کا مصنف کمیونٹی کے اندر اتفاق رائے پیدا کرنے اور اختلاف رائے کو دستاویزی شکل دینے کا ذمہ دار ہے۔ چونکہ بی ای پیز کو ورژن شدہ ذخیرہ میں دوبارہ تشکیل شدہ ٹیکسٹ فائلوں کے طور پر برقرار رکھا جاتا ہے، اس لیے ان کی نظر ثانی شدہ تاریخ فیچر تجویز کا تاریخی ریکارڈ ہے۔ بی ای پی کی تین قسمیں ہیں: ایک اسٹینڈرڈز ٹریک بی ای پی بٹ ٹورنٹ پروٹوکول میں سے کسی ایک کی توسیع یا ان پروٹوکول میں اداکاروں میں سے کسی ایک کے رویے میں تبدیلی کو بیان کرتا ہے، جہاں اداکار فی الحال کلائنٹ، ٹریکر اور ویب سرور ہیں۔ ایک معلوماتی بی ای پی بٹ ٹورنٹ ڈیزائن کے مسئلے کو بیان کرتا ہے، یا بٹ ٹورنٹ کمیونٹی کو عمومی رہنما خطوط یا معلومات فراہم کرتا ہے، لیکن توسیع کی تجویز نہیں کرتا ہے۔ معلوماتی بی ای پیز لازمی طور پر بٹ ٹورنٹ کمیونٹی کے اتفاق رائے یا سفارش کی نمائندگی نہیں کرتے ہیں، لہذا صارفین اور عمل درآمد کرنے والے معلوماتی بی ای پیز کو نظر انداز کرنے یا ان کے مشورے پر عمل کرنے کے لیے آزاد ہیں۔ ایک عمل بی ای پی بٹ ٹورنٹ کے ارد گرد کے عمل کو بیان کرتا ہے یا کسی عمل میں (یا کسی واقعہ میں) تبدیلی کی تجویز کرتا ہے۔ پروسیس بی ای پیز اسٹینڈرڈز ٹریک بی ای پیز کی طرح ہوتے ہیں لیکن بٹ ٹورنٹ پروٹوکول کے علاوہ دیگر علاقوں پر لاگو ہوتے ہیں۔ وہ سفارشات سے زیادہ ہیں، اور صارفین عام طور پر انہیں نظر انداز کرنے کے لیے آزاد نہیں ہیں۔ مثالوں میں ریلیز کے نظام الاوقات، طریقہ کار، رہنما خطوط، فیصلہ سازی کے عمل میں تبدیلیاں، اور بٹ ٹورنٹ ڈویلپمنٹ میں استعمال ہونے والے ٹولز یا ماحول میں تبدیلیاں شامل ہیں۔ لبٹورنٹ میں ترمیم کیے بغیر کسٹم بٹ ٹورنٹ ایکسٹینشنز کو لاگو کرنے کے لیے متفرق خصوصیات کی فہرست پلگ ان انٹرفیس، مائکرو ٹورنٹ پیئر ایکسچینج پروٹوکول (پی ای ایکس) کی حمایت کرتا ہے۔ مقامی ہم مرتبہ دریافت کی حمایت کرتا ہے (ایک ہی مقامی نیٹ ورک پر ساتھیوں کے لیے ملٹی کاسٹ) ٹریکر سکریپس ایل ٹی ٹریکرز کی توسیع کی حمایت کرتا ہے، ساتھیوں کے درمیان ٹریکرز کا تبادلہ کرنے کے لیے نمبر _ پیئر _ آئی ڈی = 1 توسیع کی حمایت کرتا ہے جو ٹریکرز کے بوجھ کو آسان بنائے گا۔ کمپیکٹ = 1 ٹریکر پیرامیٹر کی حمایت کرتا ہے۔ مرکل ہیش ٹری ٹورنٹس کے لیے سپورٹ۔ اس سے ٹورینٹ فائلوں کا سائز مواد کے سائز کے ساتھ اچھی طرح سے پیمانے پر ہوتا ہے۔ ڈسک کو نیٹ ورک یا کلائنٹ کے تعامل پر کبھی بلاک نہ کرنے کے لیے ایک علیحدہ ڈسک I/O تھریڈ کا استعمال کرتا ہے۔ ان سسٹمز پر 2 گیگا بائٹس سے بڑی فائلوں کی حمایت کرتا ہے جو اس کی حمایت کرتے ہیں۔ فاسٹ ریزیومے سپورٹ، دوبارہ شروع ہونے والے ٹورینٹ کے آغاز میں مہنگے پیس چیک سے چھٹکارا پانے کا ایک طریقہ ہے۔ اسٹوریج اسٹیٹ، پیس _ پیکر اسٹیٹ کے ساتھ ساتھ تمام مقامی ساتھیوں کو ایک علیحدہ فاسٹ ریزیومے فائل میں محفوظ کرتا ہے۔ بہتر ڈسک تھرو پٹ کے لیے ایڈجسٹ ایبل ریڈ اینڈ رائٹ ڈسک کیش ہے۔ فائل چیک کے لیے قطاریں، ان سب کو متوازی طور پر چیک کرنے کے بجائے۔ اس کے دوبارہ شروع ہونے والے ٹورینٹ میں پیس آرڈر پر کوئی تقاضے نہیں ہیں۔ اس کا مطلب ہے کہ یہ کسی بھی کلائنٹ کے ذریعے ڈاؤن لوڈ کردہ ٹورینٹ کو دوبارہ شروع کر سکتا ہے۔ کم فائلوں اور کمپیکٹ فائل الاٹمنٹ (جہاں ٹکڑوں کو ڈسک پر مستحکم رکھا جاتا ہے) سیڈ موڈ دونوں کی حمایت کرتا ہے، جہاں ڈسک پر موجود فائلوں کو مکمل سمجھا جاتا ہے، اور ہر ٹکڑے کے ہیش کی تصدیق پہلی بار درخواست کی جاتی ہے۔ ڈاؤن لوڈ کی شرح کے مطابق درخواست کی قطار کی لمبائی کو ایڈجسٹ کرتا ہے۔ ایک ہی بندرگاہ پر متعدد ٹورینٹ کی خدمت کرتا ہے اور ایک ہی تھریڈ میں HTTP پراکسیز کی حمایت کرتا ہے اور بنیادی پراکسی تصدیق Gziped ٹریکر کی حمایت کرتا ہے-جوابات اپ لوڈ اور ڈاؤن لوڈ بینڈوتھ کے استعمال کو محدود کر سکتے ہیں اور کنکشن کی تعداد کو محدود کرنے کے لیے غیر متزلزل ساتھیوں کی زیادہ سے زیادہ تعداد کا امکان رکھتے ہیں۔ تاخیر میں پیغامات ہوتے ہیں اگر ہم مرتبہ کو کوئی اور باہر جانے والا ٹریفک نہیں ہے، اور ان ساتھیوں کو پیغامات نہیں بھیجتا ہے جن کے پاس پہلے سے ہی ٹکڑا ہے۔ یہ بینڈوتھ کو بچاتا ہے۔ منتخب ڈاؤن لوڈ کرنا۔ منتخب کرنے کی صلاحیت کہ آپ ٹورینٹ کے کون سے حصے ڈاؤن لوڈ کرنا چاہتے ہیں۔ آئی پی ایڈریس کی اجازت نہ دینے کے لیے آئی پی فلٹر اور آئی پی رینج منسلک ہونے اور منسلک ہونے سے لے کر این اے ٹی-پی ایم پی اور یو پی این پی سپورٹ (اس کی حمایت کرنے والے راؤٹرز پر خودکار پورٹ میپنگ) آئی 2 پی نام ظاہر نہ کرنے والے نیٹ ورک کے ذریعے ٹورنٹ ٹریفک کو پراکسی کر سکتے ہیں۔ ڈسک کیچنگ لبٹورنٹ میں موجود تمام ڈسک I/O کو ڈسک io تھریڈ کے ذریعے نیٹ ورک تھریڈ کے ساتھ غیر متزلزل طور پر کیا جاتا ہے۔ جب کوئی بلاک پڑھا جاتا ہے، تو ڈسک آئی او تھریڈ اس ٹکڑے کے بعد کے تمام بلاکس کو ریڈ کیش میں پڑھتا ہے، یہ فرض کرتے ہوئے کہ بلاک کی درخواست کرنے والا ہم مرتبہ بھی اسی ٹکڑے سے مزید بلاکس کی درخواست کرے گا۔ اس سے ڈیٹا پڑھنے کے لیے syscalls کی تعداد کم ہو جاتی ہے۔ یہ تلاش کرنے میں تاخیر کو بھی کم کرتا ہے۔ اسی طرح، لکھنے کی درخواستوں کے لیے، بلاکس کو کیش کیا جاتا ہے اور ایک بار ایک مکمل ٹکڑا مکمل ہونے کے بعد ڈسک پر فلش کیا جاتا ہے یا جب مزید کیش کی جگہ کی ضرورت ہوتی ہے تو ٹکڑا سب سے کم حال ہی میں اپ ڈیٹ کیا گیا ہوتا ہے۔ کیش متحرک طور پر لکھنے اور پڑھنے والے کیش کے درمیان جگہ مختص کرتا ہے۔ تحریری کیش کو ریڈ کیش پر سختی سے ترجیح دی جاتی ہے۔ کیش بلاکس جو استعمال میں ہیں، فزیکل میموری میں بند ہوتے ہیں تاکہ اسے ڈسک پر پیج آؤٹ ہونے سے بچایا جا سکے۔ ڈسک کیشے کو ڈسک پر پیج آؤٹ کرنے کی اجازت دینے کا مطلب ہے کہ اسے فلش کرنا انتہائی ناکارہ ہو جائے گا، کیونکہ اسے صرف فزیکل میموری میں دوبارہ پڑھنا پڑے گا تاکہ اسے دوبارہ ڈسک پر فلش کیا جا سکے۔ میموری اور سسٹم کالز کو بچانے کے لیے، آئی او وی ای سی فائل آپریشنز کو ایک ہی کال میں متعدد کیش بلاکس کو فلش کرنے کے لیے استعمال کیا جاتا ہے۔ کم میموری والے نظاموں پر، میموری کو بچانے کے لیے ڈسک کیش کو مکمل طور پر غیر فعال کیا جا سکتا ہے یا ایک چھوٹی حد پر سیٹ کیا جا سکتا ہے۔ نیٹ ورک بفر چھوٹے ایل 2 کیش والے سی پی یو پر، میموری کاپی کرنا مہنگے آپریشن ہو سکتے ہیں۔ ایسی مشینوں پر کم سے کم کاپی کرتے رہنا ضروری ہے۔ یہ زیادہ تر سرایت شدہ نظاموں پر لاگو ہوتا ہے۔ موصولہ ڈیٹا کی کاپی کی تعداد کو کم کرنے کے لیے، پے لوڈ ڈیٹا کے لیے وصول کنندہ بفر براہ راست پیج ایلائنڈ ڈسک بفر میں موصول ہوتا ہے۔ اگر کنکشن خفیہ شدہ ہے، تو بفر کو اپنی جگہ پر ڈکرپٹ کیا جاتا ہے۔ اس کے بعد بفر کو نقل کیے بغیر ڈسک کیش میں منتقل کر دیا جاتا ہے۔ ایک بار جب کسی ٹکڑے کے لیے تمام بلاکس موصول ہو جاتے ہیں، یا کیش کو فلش کرنے کی ضرورت ہوتی ہے، تو تمام بلاکس کو ایک ہی سسکل میں فلش کرنے کے لیے براہ راست رائٹیو () کو منتقل کر دیا جاتا ہے۔ اس کا مطلب ہے کہ یوزر اسپیس میموری میں ایک واحد کاپی اور ایک واحد کاپی واپس کرنل میموری میں۔ عام طور پر سیڈنگ اور اپ لوڈ کرتے وقت، سیدھے ہوئے بفرز میں کیشنگ بلاکس کے ذریعے غیر ضروری کاپی کرنے سے گریز کیا جاتا ہے، جو ایک بار ہم مرتبہ کے بھیجنے والے بفر میں کاپی کیے جاتے ہیں۔ ہم مرتبہ کے بھیجنے والے بفر کی صف بندی کی ضمانت نہیں ہے، حالانکہ یہ زیادہ تر وقت ہوتا ہے۔ اس کے بعد بھیجنے والے بفر کو ہم مرتبہ مخصوص کلید کے ساتھ خفیہ کیا جاتا ہے اور بھیجنے کے لیے آئی او وی ای سی پر جکڑے جاتے ہیں۔ اس کا مطلب ہے کہ غیر منسلک ہم مرتبہ کی درخواستوں اور ہم مرتبہ مخصوص خفیہ کاری کی اجازت دینے کے لیے ایک یوزر اسپیس کاپی موجود ہے۔ ٹکڑا چننے والا ٹکڑا چننے والا بٹ ٹورنٹ کے نفاذ میں ایک مرکزی جزو ہے۔ لبٹورنٹ میں پیس چننے والا نایاب ترین ٹکڑوں کو تیزی سے تلاش کرنے کے لیے بہتر بنایا گیا ہے۔ یہ نایاب کے لحاظ سے ترتیب دیے گئے تمام دستیاب ٹکڑوں کی فہرست رکھتا ہے، اور اسی نایاب کے ٹکڑوں کو تبدیل کرتا ہے۔ سب سے نایاب پہلا موڈ غالب ٹکڑا چننے والا موڈ ہے۔ دیگر طریقوں کو بھی سپورٹ کیا جاتا ہے اور مخصوص حالات میں ساتھیوں کے ذریعہ استعمال کیا جاتا ہے۔ ٹکڑا چننے والا کسی ٹکڑے کی دستیابی کو ترجیح کے ساتھ جوڑنے کی اجازت دیتا ہے۔ وہ مل کر ٹکڑوں کی فہرست کی ترتیب کا تعین کرتے ہیں۔ ترجیحی 0 والے ٹکڑے کبھی نہیں منتخب کیے جائیں گے، جو منتخب ڈاؤن لوڈ فیچر کے لیے استعمال ہوتے ہیں۔ ممکنہ حد تک کم سے کم جزوی طور پر تیار شدہ ٹکڑے رکھنے کے لیے، ساتھیوں کا اسی رفتار کے زمرے میں دوسرے ساتھیوں کی طرح اسی ٹکڑے سے بلاکس چننے کے لیے لگاؤ ہوتا ہے۔ رفتار کا زمرہ ان کے ڈاؤن لوڈ کی شرح کی بنیاد پر ساتھیوں کی ایک موٹی درجہ بندی ہے۔ یہ سست ساتھیوں کو ایک ہی ٹکڑے سے بلاکس چننے پر مجبور کرتا ہے، اور تیز ساتھیوں کو ایک ہی ٹکڑے سے چنتا ہے، اور اس وجہ سے سست ساتھیوں کے ٹکڑوں کی تکمیل کو روکنے کے امکان کو کم کرتا ہے۔ ٹکڑا چننے والے کو ترتیب وار ترتیب میں ٹکڑے ڈاؤن لوڈ کرنے کے لیے بھی سیٹ کیا جا سکتا ہے۔ مرکلی ہیش ٹری ٹورینٹ یہ بٹ ٹورینٹ پروٹوکول کا بی ای پی 30 ہے۔ مرکلی ہیش ٹری ٹورینٹ ایک توسیع ہے جو ایک ٹورینٹ فائل کو صرف ہیش ٹری کی جڑ ہیش پر مشتمل کرنے کی اجازت دیتی ہے جو پیس ہیش بناتی ہے۔ اس خصوصیت کا بنیادی فائدہ یہ ہے کہ اس بات سے قطع نظر کہ ٹورینٹ میں کتنے ٹکڑے ہیں،. ٹورنٹ فائل ہمیشہ ایک ہی سائز کی ہوگی۔ یہ صرف فائلوں کی تعداد کے ساتھ بڑھے گا (کیونکہ اس میں اب بھی فائل کے نام شامل ہونے چاہئیں)۔ باقاعدہ ٹورینٹ کے ساتھ، کلائنٹس کو ٹکڑوں کے لیے متعدد بلاکس کی درخواست کرنی پڑتی ہے، عام طور پر مختلف ساتھیوں سے، اس سے پہلے کہ ٹکڑے کی ہیش کے خلاف ڈیٹا کی تصدیق کی جا سکے۔ ٹکڑے جتنے بڑے ہوں گے، ایک مکمل ٹکڑا ڈاؤن لوڈ کرنے اور اس کی تصدیق کرنے میں اتنا ہی زیادہ وقت لگے گا۔ ٹکڑے کی تصدیق ہونے سے پہلے، اسے جھنڈ کے ساتھ شیئر نہیں کیا جا سکتا، جس کا مطلب ہے کہ ٹکڑے کے بڑے سائز، جب ساتھیوں کے ذریعہ ڈاؤن لوڈ کیا جاتا ہے تو سست ٹرن اراؤنڈ ڈیٹا ہوتا ہے۔ چونکہ اوسطا ڈیٹا کو تصدیق ہونے سے پہلے کلائنٹ بفر میں بیٹھ کر انتظار کرنا پڑتا ہے اور اسے دوبارہ اپ لوڈ کیا جا سکتا ہے۔ بڑے ٹکڑے کے سائز کے ساتھ ایک اور مسئلہ یہ ہے کہ جب کوئی ٹکڑا ناکام ہوجاتا ہے تو کلائنٹ کے لیے بدنیتی پر مبنی یا بگی پیر کی نشاندہی کرنا مشکل ہوتا ہے، اور اسے دوبارہ ڈاؤن لوڈ کرنے میں زیادہ وقت لگے گا اور ٹکڑے کی کامیابی سے پہلے مزید کوششیں لگیں گی۔ باقاعدہ ٹورینٹ میں ٹکڑے کا سائز. ٹورنٹ فائل کے سائز اور ٹکڑے کے سائز کے درمیان ایک ٹریڈ آف ہے۔ اکثر، 4 جی بی والی فائلوں کے لیے، ٹکڑے کا سائز 2 یا 4 ایم بی ہوتا ہے، صرف. ٹورنٹ فائل کو بہت بڑا بنانے سے بچنے کے لیے۔ مرکل ٹورینٹس. ٹورنٹ سائز اور ٹکڑے کے سائز کے درمیان ٹریڈ آف کو ہٹا کر ان مسائل کو حل کرتا ہے۔ مرکل ٹورینٹس کے ساتھ، ٹکڑے کا سائز کم از کم بلاک سائز (16 کے بی) ہو سکتا ہے، جو ساتھیوں کو ساتھیوں سے موصول ہونے والے ڈیٹا کے ہر بلاک کی فوری تصدیق کرنے دیتا ہے۔ یہ کم سے کم تبدیلی کا وقت دیتا ہے اور بدنیتی پر مبنی ساتھیوں کی شناخت کے مسئلے کو مکمل طور پر دور کرتا ہے۔ ایپلی کیشنز کچھ قابل ذکر ایپلی کیشنز جو لبٹورنٹ استعمال کرتی ہیں: ڈیلیج، کراس پلیٹ فارم بٹ ٹورنٹ کلائنٹ الیکٹرک شیپ اسکرین سیور، اسکرین سیور فری ڈاؤن لوڈ مینیجر کے لیے بٹ ٹورنٹ کلائنٹ، ونڈوز اوپن سورس ڈاؤن لوڈ مینیجر لائم وائر، ملٹی پلیٹ فارم فائل شیئرنگ کلائنٹ میرو، ایک کراس پلیٹ فارم انٹرنیٹ ٹیلی ویژن ایپلی کیشن qBittorrent، C + +/Qt بٹ ٹورنٹ کلائنٹ ٹرائبلر، وکندریقرت گمنام پیئر ٹو پیئر بٹ ٹورنٹ کلائنٹ رنز آف میجک، ایک ایم ایم او آر پی جی جس کا ایف او جی ڈاؤنلوڈر گیم کلائنٹ ورلڈ آف ٹینکس کو اپ ڈیٹ کرنے کے لیے لبٹررینٹ استعمال کرتا ہے، ایک ایم ایم او آر پی جی جس کا لانچر گیم کلائنٹ کو اپ ڈیٹ کرنے کے لیے لبٹورنٹ استعمال کرتا ہے موازنہ بھی دیکھیں۔