Libtorrent
libtorrent হল বিটটরেন্ট প্রোটোকলের একটি ওপেন সোর্স বাস্তবায়ন। এটি সি + +-এ লেখা এবং এর প্রধান লাইব্রেরি ইন্টারফেস সি + +-এ রয়েছে। এর সবচেয়ে উল্লেখযোগ্য বৈশিষ্ট্যগুলি হল মেইনলাইন ডিএইচটি, আইপিভি6, এইচটিটিপি বীজ এবং মাইক্রোটরেন্টের পিয়ার এক্সচেঞ্জের জন্য সমর্থন। libtorrent তার প্ল্যাটফর্ম স্বাধীনতা অর্জনের জন্য বিশেষভাবে Boost.Asio বুস্ট ব্যবহার করে। এটি উইন্ডোজ এবং বেশিরভাগ ইউনিক্স-সদৃশ অপারেটিং সিস্টেমে (ওএস এক্স, লিনাক্স এবং অনেক বিএসডি) তৈরি করার জন্য পরিচিত। libtorrent বিটটরেন্ট এক্সটেনশনগুলির সাথে আপ টু ডেট রাখা হয় যা ডেভেলপাররা সবচেয়ে দরকারী বলে মনে করে এবং সক্রিয়ভাবে বিস্তৃত পরিবেশে কাজ করার জন্য অনুকূলিত করা হচ্ছে। এর অনেকগুলি বৈশিষ্ট্য সংকলন-সময়ে নিষ্ক্রিয় করা যেতে পারে যাতে কোনও নির্দিষ্ট ব্যবহারের ক্ষেত্রে ব্যবহার করা হবে না এমন কোড অন্তর্ভুক্ত না করা যায়। এর লক্ষ্য হল এমবেডেড ডিভাইসের পাশাপাশি ডেস্কটপ এবং বীজ-সার্ভারের জন্য সবচেয়ে উপযুক্ত লিবটোরেন্ট বাস্তবায়ন। এর বাস্তবায়নের কিছু বিবরণ বৈশিষ্ট্য বিভাগে বর্ণনা করা হয়েছে। লিবটোরেন্টের মূল লেখক হলেন আরভিড নরবার্গ। এটি প্রথম ক্লায়েন্ট যেটি এক্সটেনশন প্রোটোকলকে সমর্থন করে মাইক্রোটরেন্টের সাথে, যা এখন একটি ভিত্তি যা অন্যান্য অনেক এক্সটেনশন তৈরি করে। বাস্তবায়িত বিইপি বিইপিগুলি বিটটরেন্ট বর্ধন প্রস্তাব প্রক্রিয়ার একটি অংশ। একটি বিইপি হল একটি নকশা নথি যা বিটটরেন্ট সম্প্রদায়কে তথ্য প্রদান করে, বা বিটটরেন্ট প্রোটোকলের জন্য একটি নতুন বৈশিষ্ট্য বর্ণনা করে। বিইপি-কে বৈশিষ্ট্যটির একটি সংক্ষিপ্ত প্রযুক্তিগত নির্দিষ্টকরণ এবং বৈশিষ্ট্যটির জন্য একটি যৌক্তিকতা প্রদান করতে হবে। নতুন বৈশিষ্ট্যগুলি প্রস্তাব করার জন্য, কোনও বিষয়ে সম্প্রদায়ের ইনপুট সংগ্রহের জন্য এবং বিটটোরেন্টে যাওয়া নকশার সিদ্ধান্তগুলি নথিভুক্ত করার জন্য এগুলি প্রাথমিক প্রক্রিয়া হওয়ার উদ্দেশ্যে করা হয়েছিল। বিইপি লেখক সম্প্রদায়ের মধ্যে ঐকমত্য গড়ে তোলা এবং ভিন্নমতের মতামত নথিভুক্ত করার জন্য দায়বদ্ধ। যেহেতু বিইপিগুলি একটি সংস্করণকৃত সংগ্রহস্থলে পুনর্গঠিত পাঠ্য ফাইল হিসাবে রক্ষণাবেক্ষণ করা হয়, তাদের সংশোধন ইতিহাস বৈশিষ্ট্য প্রস্তাবের ঐতিহাসিক রেকর্ড তিন ধরনের বিইপি রয়েছেঃ একটি স্ট্যান্ডার্ড ট্র্যাক বিইপি বিটটরেন্ট প্রোটোকলগুলির মধ্যে একটির সম্প্রসারণ বা এই প্রোটোকলের অভিনেতাদের মধ্যে একজনের আচরণের পরিবর্তন বর্ণনা করে, যেখানে অভিনেতারা বর্তমানে ক্লায়েন্ট, ট্র্যাকার এবং ওয়েব সার্ভার। একটি তথ্যমূলক বিইপি একটি বিটটরেন্ট ডিজাইনের সমস্যা বর্ণনা করে, বা বিটটরেন্ট সম্প্রদায়কে সাধারণ নির্দেশিকা বা তথ্য সরবরাহ করে, তবে একটি সম্প্রসারণের প্রস্তাব দেয় না। তথ্যমূলক বিইপিগুলি অগত্যা বিটটরেন্ট সম্প্রদায়ের ঐক্যমত্য বা সুপারিশের প্রতিনিধিত্ব করে না, তাই ব্যবহারকারী এবং প্রয়োগকারীরা তথ্যমূলক বিইপিগুলিকে উপেক্ষা করতে বা তাদের পরামর্শ অনুসরণ করতে স্বাধীন। একটি প্রসেস বিইপি বিটটরেন্টকে ঘিরে একটি প্রক্রিয়া বর্ণনা করে বা একটি প্রক্রিয়ায় (বা একটি ইভেন্ট) পরিবর্তনের প্রস্তাব দেয়। প্রসেস বিইপিগুলি স্ট্যান্ডার্ড ট্র্যাক বিইপি-র মতো তবে বিটটরেন্ট প্রোটোকল ব্যতীত অন্যান্য ক্ষেত্রে প্রযোজ্য। এগুলি সুপারিশের চেয়ে বেশি, এবং ব্যবহারকারীরা সাধারণত এগুলি উপেক্ষা করতে স্বাধীন নন। উদাহরণগুলির মধ্যে রয়েছে মুক্তির সময়সূচী, পদ্ধতি, নির্দেশিকা, সিদ্ধান্ত গ্রহণের প্রক্রিয়ার পরিবর্তন এবং বিটটরেন্ট বিকাশে ব্যবহৃত সরঞ্জাম বা পরিবেশে পরিবর্তন। বিভিন্ন বৈশিষ্ট্যের তালিকা প্লাগইন ইন্টারফেসটি কাস্টম বিটটরেন্ট এক্সটেনশনগুলি প্রয়োগ করার জন্য লিবটরেন্ট সংশোধন না করে সমর্থন করে যা মাইক্রোটরেন্ট পিয়ার এক্সচেঞ্জ প্রোটোকল (পিইএক্স) সমর্থন করে। স্থানীয় পিয়ার আবিষ্কারকে সমর্থন করে (একই স্থানীয় নেটওয়ার্কে সমবয়সীদের জন্য মাল্টিকাস্ট) ট্র্যাকার স্ক্র্যাপগুলি এলটি _ ট্র্যাকার এক্সটেনশনকে সমর্থন করে, সমবয়সীদের মধ্যে ট্র্যাকার বিনিময় করতে নো _ পিয়ার _ আইডি = 1 এক্সটেনশনকে সমর্থন করে যা ট্র্যাকারগুলির লোডকে সহজ করবে। কম্প্যাক্ট = 1 ট্র্যাকার প্যারামিটার সমর্থন করে। মার্কেল হ্যাশ ট্রি টরেন্টের জন্য সমর্থন। এটি টরেন্ট ফাইলের আকারকে বিষয়বস্তুর আকারের সাথে ভালভাবে মাপতে সাহায্য করে। একটি পৃথক ডিস্ক আই/ও থ্রেড ব্যবহার করে যাতে ডিস্কটি কখনও নেটওয়ার্ক বা ক্লায়েন্টের মিথস্ক্রিয়ায় ব্লক না করে। এটি সমর্থন করে এমন সিস্টেমে 2 গিগাবাইটের চেয়ে বড় ফাইলগুলিকে সমর্থন করে। দ্রুত রেজ্যুমে সাপোর্ট, পুনরায় চালু হওয়া টরেন্টের শুরুতে ব্যয়বহুল পিস চেক থেকে মুক্তি পাওয়ার একটি উপায়। স্টোরেজ স্টেট, পিস _ পিকার স্টেটের পাশাপাশি সমস্ত স্থানীয় সহকর্মীদের একটি পৃথক ফাস্ট-রিজ্যুম ফাইলে সংরক্ষণ করে। উন্নত ডিস্ক থ্রুপুটের জন্য একটি সামঞ্জস্যযোগ্য রিড অ্যান্ড রাইট ডিস্ক ক্যাশে রয়েছে। ফাইল চেকের জন্য সমান্তরালভাবে সমস্ত চেক করার পরিবর্তে টরেন্টের সারি। যে টরেন্টটি পুনরায় শুরু হয় সেখানে পিস অর্ডারে কোনও প্রয়োজনীয়তা নেই। এর অর্থ এটি যে কোনও ক্লায়েন্ট দ্বারা ডাউনলোড করা টরেন্ট পুনরায় চালু করতে পারে। বিরল ফাইল এবং কম্প্যাক্ট ফাইল বরাদ্দ (যেখানে টুকরোগুলি ডিস্কে একত্রিত করা হয়) উভয়কেই সমর্থন করে, যেখানে ডিস্কের ফাইলগুলি সম্পূর্ণ বলে ধরে নেওয়া হয় এবং প্রতিটি টুকরোর হ্যাশ প্রথমবার অনুরোধ করা হলে যাচাই করা হয়। ডাউনলোড হারের উপর নির্ভর করে অনুরোধ সারির দৈর্ঘ্য সামঞ্জস্য করে। একটি বন্দরে একাধিক টরেন্ট পরিষেবা প্রদান করে এবং একটি থ্রেডে এইচ. টি. টি. পি প্রক্সি সমর্থন করে এবং মৌলিক প্রক্সি প্রমাণীকরণ সমর্থন করে জিজিপ ট্র্যাকার-প্রতিক্রিয়া আপলোড এবং ডাউনলোড ব্যান্ডউইথের ব্যবহারকে সীমাবদ্ধ করতে পারে এবং সংযোগের সংখ্যা সীমিত করার জন্য সর্বাধিক সংখ্যক অনাবৃত সমবয়সীদের সম্ভাবনা সীমাবদ্ধ করতে পারে। সহকর্মীদের কাছে অন্য কোনও বহির্গামী ট্র্যাফিক না থাকলে বিলম্বের বার্তা থাকে এবং যে সহকর্মীদের কাছে ইতিমধ্যে এই বার্তাটি রয়েছে তাদের কাছে বার্তা পাঠায় না। এটি ব্যান্ডউইথ সাশ্রয় করে। নির্বাচিত ডাউনলোড করা। আপনি একটি টরেন্টের কোন অংশ ডাউনলোড করতে চান তা নির্বাচন করার ক্ষমতা। আইপি ফিল্টার আইপি ঠিকানাগুলিকে অনুমোদন না করার জন্য এবং আইপি সংযোগ এবং সংযুক্ত হওয়া থেকে শুরু করে এনএটি-পিএমপি এবং ইউপিএনপি সমর্থন (এটি সমর্থনকারী রাউটারগুলিতে স্বয়ংক্রিয় পোর্ট ম্যাপিং) আই2পি নামহীনতা নেটওয়ার্কের মাধ্যমে প্রক্সি টরেন্ট ট্র্যাফিক করতে পারে। ডিস্ক ক্যাশিং লিবটরেন্টের সমস্ত ডিস্ক আই/ও ডিস্ক আইও থ্রেড দ্বারা নেটওয়ার্ক থ্রেডের সাথে অ্যাসিঙ্ক্রোনাসভাবে করা হয়। যখন একটি ব্লক পড়া হয়, তখন ডিস্ক আইও থ্রেড সেই টুকরো থেকে পরবর্তী সমস্ত ব্লকগুলি রিড ক্যাশে পড়ে, ধরে নেওয়া হয় যে ব্লকের অনুরোধকারী পিয়ার একই টুকরো থেকে আরও ব্লকের অনুরোধ করবে। এটি ডেটা পড়ার জন্য সিসকালের সংখ্যা হ্রাস করে। এটি খোঁজার ক্ষেত্রে বিলম্বকেও হ্রাস করে। একইভাবে, লেখার অনুরোধের জন্য, ব্লকগুলি ক্যাশে করা হয় এবং একবার একটি সম্পূর্ণ টুকরো সম্পূর্ণ হয়ে গেলে ডিস্কে ফ্লাশ করা হয় বা আরও ক্যাশে জায়গার প্রয়োজন হলে টুকরোটি সবচেয়ে সম্প্রতি আপডেট করা হয়। ক্যাশে গতিশীলভাবে রাইট এবং রিড ক্যাশের মধ্যে স্থান বরাদ্দ করে। রিড ক্যাশের চেয়ে রাইট ক্যাশেকে কঠোরভাবে অগ্রাধিকার দেওয়া হয়। যে ক্যাশে ব্লকগুলি ব্যবহার করা হয়, সেগুলি ডিস্কে পেজ আউট হওয়া এড়াতে ফিজিক্যাল মেমরিতে লক করা থাকে। ডিস্ক ক্যাশেকে ডিস্কে পেজ আউট করার অনুমতি দেওয়ার অর্থ হল এটি ফ্লাশ করা অত্যন্ত অকার্যকর হয়ে উঠবে, কারণ এটিকে আবার ডিস্কে ফ্লাশ করার জন্য কেবল শারীরিক স্মৃতিতে পড়তে হবে। মেমোরি এবং সিস্টেম কল সংরক্ষণের জন্য, আইওভিইসি ফাইল অপারেশনগুলি একক কলে একাধিক ক্যাশ ব্লক ফ্লাশ করতে ব্যবহৃত হয়। লো-মেমোরি সিস্টেমে, মেমোরি সংরক্ষণের জন্য ডিস্ক ক্যাশে সম্পূর্ণরূপে নিষ্ক্রিয় করা যেতে পারে বা একটি ছোট সীমাতে সেট করা যেতে পারে। নেটওয়ার্ক বাফার ছোট এল2 ক্যাশে সহ সিপিইউতে, মেমরি অনুলিপি করা ব্যয়বহুল অপারেশন হতে পারে। এই ধরনের মেশিনে ন্যূনতম অনুলিপি করা গুরুত্বপূর্ণ। এটি বেশিরভাগ ক্ষেত্রে এমবেডেড সিস্টেমের ক্ষেত্রে প্রযোজ্য। প্রাপ্ত ডেটা অনুলিপি করার সংখ্যা হ্রাস করার জন্য, পেলোড ডেটার জন্য রিসিভ বাফারটি সরাসরি একটি পৃষ্ঠা-সারিবদ্ধ ডিস্ক বাফারের মধ্যে গ্রহণ করা হয়। যদি সংযোগটি এনক্রিপ্ট করা থাকে, তবে বাফারটি জায়গায় ডিক্রিপ্ট করা হয়। বাফারটি তারপর অনুলিপি না করেই ডিস্ক ক্যাশে স্থানান্তরিত হয়। একবার কোনও টুকরোর জন্য সমস্ত ব্লক পাওয়া গেলে, বা ক্যাশে ফ্লাশ করার প্রয়োজন হলে, সমস্ত ব্লকগুলি একটি একক সিসকলে ফ্লাশ করার জন্য সরাসরি রিটেভ ()-এর কাছে পাঠানো হয়। এর অর্থ হল ইউজারস্পেস মেমরিতে একটি একক অনুলিপি এবং কার্নেল মেমরিতে একটি একক অনুলিপি। সাধারণভাবে সিডিং এবং আপলোড করার সময়, সারিবদ্ধ বাফারগুলিতে ক্যাশিং ব্লক দ্বারা অপ্রয়োজনীয় অনুলিপি এড়ানো হয়, যা একবার পিয়ারের প্রেরণ বাফারের মধ্যে অনুলিপি করা হয়। পিয়ারের প্রেরণ বাফারটি সারিবদ্ধ হওয়ার নিশ্চয়তা দেয় না, যদিও এটি বেশিরভাগ সময় হয়। পাঠানোর বাফারটি তারপর পিয়ার নির্দিষ্ট কী দিয়ে এনক্রিপ্ট করা হয় এবং পাঠানোর জন্য আইওভিইসি-তে চেইন করা হয়। এর অর্থ হল অসংলগ্ন পিয়ার অনুরোধ এবং পিয়ার-নির্দিষ্ট এনক্রিপশনের অনুমতি দেওয়ার জন্য একটি ইউজারস্পেস অনুলিপি রয়েছে। পিস পিকার বিটটরেন্ট বাস্তবায়নের একটি কেন্দ্রীয় উপাদান। লিবটোরেন্টে পিস পিকারটি বিরলতম টুকরোগুলি দ্রুত খুঁজে বের করার জন্য অনুকূলিত করা হয়েছে। এটি বিরলতা অনুসারে সাজানো সমস্ত উপলব্ধ টুকরোগুলির একটি তালিকা রাখে এবং একই বিরলতা সহ টুকরোগুলির অদলবদল করে। বিরলতম প্রথম মোড হল প্রভাবশালী পিস পিকার মোড। অন্যান্য মোডগুলিও সমর্থিত এবং নির্দিষ্ট পরিস্থিতিতে সমবয়সীদের দ্বারা ব্যবহৃত হয়। পিস পিকার একটি অগ্রাধিকারের সাথে একটি পিসের প্রাপ্যতা একত্রিত করার অনুমতি দেয়। তারা একসঙ্গে টুকরো তালিকার সাজানো ক্রম নির্ধারণ করে। অগ্রাধিকার 0 সহ টুকরোগুলি কখনই বাছাই করা হবে না, যা নির্বাচিত ডাউনলোড বৈশিষ্ট্যের জন্য ব্যবহৃত হয়। যতটা সম্ভব আংশিকভাবে সমাপ্ত টুকরোগুলি রাখার জন্য, সমবয়সীদের একই গতি বিভাগের অন্যান্য সমবয়সীদের মতো একই টুকরোগুলি থেকে ব্লক বাছাই করার প্রতি অনুরাগ রয়েছে। গতি বিভাগ হল ডাউনলোড হারের উপর ভিত্তি করে সমবয়সীদের একটি মোটা শ্রেণীবিভাগ। এর ফলে ধীরগতির সহকর্মীরা একই অংশ থেকে ব্লক বেছে নেয় এবং দ্রুতগতির সহকর্মীরা একই অংশ থেকে ব্লক বেছে নেয়, এবং তাই ধীরগতির সহকর্মীদের টুকরোগুলির সমাপ্তি রোধ করার সম্ভাবনা হ্রাস পায়। পিস পিকারকে ক্রমানুসারে পিস ডাউনলোড করার জন্যও সেট করা যেতে পারে। মার্কেল হ্যাশ ট্রি টরেন্ট এটি বিটটরেন্ট প্রোটোকলের বিইপি30। মার্কেল হ্যাশ ট্রি টরেন্ট হল একটি এক্সটেনশন যা একটি টরেন্ট ফাইলকে শুধুমাত্র হ্যাশ ট্রি-র মূল হ্যাশ ধারণ করতে দেয় যা পিস হ্যাশ গঠন করে। এই বৈশিষ্ট্যটির প্রধান সুবিধা হল যে কোনও টরেন্টে যত টুকরোই থাকুক না কেন. টরেন্ট ফাইলটি সর্বদা একই আকারের হবে। এটি শুধুমাত্র ফাইলের সংখ্যার সঙ্গে বৃদ্ধি পাবে (যেহেতু এতে এখনও ফাইলের নাম থাকতে হবে)। নিয়মিত টরেন্টের ক্ষেত্রে, ক্লায়েন্টদের পিসের জন্য একাধিক ব্লকের অনুরোধ করতে হয়, সাধারণত বিভিন্ন সমবয়সীদের কাছ থেকে, পিস হ্যাশের বিরুদ্ধে ডেটা যাচাই করার আগে। টুকরোগুলি যত বড় হবে, একটি সম্পূর্ণ টুকরো ডাউনলোড করতে এবং এটি যাচাই করতে তত বেশি সময় লাগবে। টুকরোটি যাচাই করার আগে, এটি ঝাঁকুনিতে ভাগ করা যায় না, যার অর্থ বড় টুকরো আকার, সহকর্মীদের দ্বারা ডাউনলোড করার সময় ধীর গতির টার্নআরন্ড ডেটা থাকে। যেহেতু গড়ে তথ্য যাচাই করার আগে ক্লায়েন্ট বাফারগুলিতে বসে অপেক্ষা করতে হয় এবং আবার আপলোড করা যেতে পারে। বড় আকারের টুকরোগুলির আরেকটি সমস্যা হল যে কোনও ক্লায়েন্টের পক্ষে কোনও টুকরো ব্যর্থ হলে দূষিত বা বগি পিয়ারকে চিহ্নিত করা কঠিন, এবং এটি পুনরায় ডাউনলোড করতে বেশি সময় লাগবে এবং টুকরোটি যত বড় হবে তত সফল হওয়ার আগে আরও চেষ্টা করতে হবে। নিয়মিত টরেন্টগুলিতে পিস সাইজ হল. টরেন্ট ফাইলের আকার এবং পিস সাইজ-এর মধ্যে একটি বিনিময়। প্রায়শই, 4 জিবি ফাইলের জন্য, টুকরোটির আকার 2 বা 4 এমবি হয়, কেবল. টরেন্ট ফাইলটিকে খুব বড় করা এড়াতে। মার্কেল টরেন্টস. টরেন্ট সাইজ এবং পিস সাইজ-এর মধ্যে ট্রেডঅফ সরিয়ে এই সমস্যাগুলি সমাধান করে। মার্কেল টরেন্টের ক্ষেত্রে, পিস সাইজ ন্যূনতম ব্লক সাইজ (16 কেবি) হতে পারে, যা সমবয়সীদের কাছ থেকে প্রাপ্ত তথ্যের প্রতিটি ব্লক অবিলম্বে যাচাই করতে দেয়। এটি একটি ন্যূনতম টার্নআরন্ড সময় দেয় এবং দূষিত সমবয়সীদের সনাক্ত করার সমস্যাটি সম্পূর্ণরূপে সরিয়ে দেয়। অ্যাপ্লিকেশন কিছু উল্লেখযোগ্য অ্যাপ্লিকেশন যা লিবটরেন্ট ব্যবহার করেঃ ডিলিজ, ক্রস-প্ল্যাটফর্ম বিটটরেন্ট ক্লায়েন্ট ইলেকট্রিক শিপ স্ক্রিন সেভার, স্ক্রিনসেভারের জন্য বিটটরেন্ট ক্লায়েন্ট ফ্রি ডাউনলোড ম্যানেজার, উইন্ডোজ ওপেন সোর্স ডাউনলোড ম্যানেজার লাইমওয়্যার, মাল্টি-প্ল্যাটফর্ম ফাইল শেয়ারিং ক্লায়েন্ট মিরো, একটি ক্রস-প্ল্যাটফর্ম ইন্টারনেট টেলিভিশন অ্যাপ্লিকেশন কিউবিটোরেন্ট, সি + +/কিউটি বিটটরেন্ট ক্লায়েন্ট ট্রাইবলার, বিকেন্দ্রীভূত বেনামী পিয়ার-টু-পিয়ার বিটটরেন্ট ক্লায়েন্ট ম্যাজিকের রানস, একটি এমএমওআরপিজি যার এফওজি ডাউনলোডার গেম ক্লায়েন্ট ওয়ার্ল্ড অফ ট্যাঙ্কস আপডেট করার জন্য লিবটরেন্ট ব্যবহার করে, একটি এমএমওআরপিজি যার লঞ্চার গেম ক্লায়েন্ট আপডেট করার জন্য লিবটরেন্ট ব্যবহার করে তুলনা দেখুন।