تماس با ما
 
بدان
 
امروز پنجشنبه ، ۱۳۹۹/۱۲/۰۷
 
کلیه مقالات

مروری کوتاه بر کادملیا و کاربرد آن در سیستم عامل های مختلف غیرمتمرکز:

A Brief Overview of Kademlia, and its use in various decentralized platforms:

Kademlia یک جدول هش توزیع شده است که در تعدادی از پروتکل های غیرمتمرکز مدرن از جمله شبکه Storj V3 ، Ethereum ، BitTorrent ، Swarm و IPFS اجرا شده است.

Kademlia راهی را برای میلیون ها کامپیوتر فراهم می کند تا بتوانند خود را در یک شبکه سازماندهی کنند ، با رایانه های دیگر در شبکه ارتباط برقرار کنند و منابع (به عنوان مثال فایلها ، حباب ها ، اشیا) را بین رایانه ها به اشتراک بگذارند ، همه بدون یک رجیستری مرکزی یا جستجو توسط یک شخص. یا شرکت

کادملیا توسط پتار میمونکوف و دیوید مازیرس در سال 2002 تصور شده است و اغلب گفته می شود که شروع به کار بر روی نسل سوم پروتکل های محاسباتی سلسله مراتب مسطح را آغاز کرده است ، زیرا از هر دو روش متمرکز و مبتنی بر سیل برای گره بسیار قابل اطمینان تر و کارآمدتر است. کشف و مسیریابی.

ماهیت توزیع شده Kademlia به این معنی است که در آن نودیدوها به آدرس خود نقشه برداری می شوند ، واقعیت مطلقی وجود ندارد (یعنی جدول مسیریابی توزیع می شود) ، بنابراین هر گره باید این نقشه برداری را برای زیر مجموعه گره های شبکه در جدول مسیریابی خود نگه دارد. .

شبکه های مستقر در کادملیا در برابر حملات انکار سرویس و از بین رفتن گروهی از گره ها بسیار مقاوم هستند زیرا پروتکل به سادگی در اطراف گره های غیرقابل دسترسی قرار می گیرد.

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

دستیابی به موفقیت بزرگ Kademlia این بود که پیام رسانی بین المللی را از طریق استفاده از معیار XOR (به عنوان وسیله ای برای تعیین فاصله بین نقاط در فضای کلید) به حداقل برساند.

بنابراین ، اگر فاصله به صورت گره log2 (n) بیان شود ، این بدان معناست که برای شبکه ای با 10،000،000 گره Kademlia ، فقط حدود 20 هاپ برای برقراری ارتباط با هر زیر مجموعه گره لازم است.

مزیت دیگر Kademlia این است که پروتکل به طور طبیعی گره های طولانی مدت را نسبت به ورودی های جدید ترجیح می دهد.

شکل زیر (از مقاله Kademlia تهیه شده است) این واقعیت را نشان می دهد که هرچه گره ای بیشتر از قبل زنده مانده باشد ، احتمال ماندن در آینده به صورت آنلاین بیشتر است.

این اولویت نسبت به "سرزندگی" گره به طور طبیعی در سیستم ذخیره سازی توزیع شده ما ایفا می کند که در آن گره زنی منجر به سناریویی می شود که باید هزینه های تعمیر را به حداقل برسانید.

روند پیوستن به یک شبکه Kademlia نیاز به کشف تنها یک همتا دارد ، به این وسیله گره ظاهر خود را پخش می کند.

سپس آغازگر NodeID را از هر پاسخ جمع می کند و آن را به جدول نظیر خود اضافه می کند.

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

بعد ، من به سرعت اجزای اساسی شبکه Kademlia را مرور می کنم:

Kademlia NodeIDs:

کادملیا هر گره موجود در شبکه را مانند برگ روی درخت باینری در نظر می گیرد.

به طور کلی ، هر گره Kademlia دارای 160 بیت NodeID (SHA-1) است و موقعیت آن با کوتاه ترین پیشوند منحصر به فرد شناسه آن تعیین می شود.

برای اختصاص جفت مقدار-کلید به گره های خاص ، کادملیا به مفهوم فاصله بین دو شناسه متکی است.

با توجه به دو شناسه 160 بیتی x و y ، Kademlia فاصله بین آنها را XOR تعریف می کند.

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

پروتکل Kademlia اطمینان حاصل می کند که هر گره حداقل یک گره در هر یک از زیر درختان خود می داند.

با این تضمین ، یک گره می تواند هر گره دیگری را با شناسه خود پیدا کند.

جدول های مسیریابی و سطل های K:

جدول مسیریابی یک درخت باینری است که برگهای آن سطلهای k است.

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

این تقارن مفید است زیرا به این معنی است که هر یک از نزدیکترین مخاطبین به جای یک قسمت از راه دور ، دانش دقیق مربوط به قسمت مشابه فضای آدرس را حفظ خواهند کرد.

K-buckets لیستی از آدرس های مسیریابی سایر گره های شبکه است که توسط هر گره نگهداری می شود و حاوی آدرس IP ، پورت و NodeID برای شرکت کنندگان همتا در سیستم است.

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

اندازه جدول مسیریابی بصورت مجانبی با O (log₂ (n / k)) محدود می شود که n تعداد واقعی گره های شبکه و k اندازه سطل است ، بنابراین پیاده سازی سطل بزرگتر تعداد کل سطلهای جدول مسیریابی را کمی کاهش می دهد .

پیام رسانی بین همتا:

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

پروتکل Kademlia از چهار تماس رویه از راه دور (RPC) تشکیل شده است:

پینگ:

یک گره را بررسی می کند تا ببینید آیا فروشگاه آنلاین است یا نه:

برای ذخیره یک جفت مقدار کلیدی FIND_NODE به یک گره دستور می دهد:

اطلاعات مربوط به نزدیکترین گره های k به شناسه هدف FIND_VALUE را برمی گرداند:

مشابه FIND_NODE RPC ، اما اگر گیرنده STORE را برای کلید داده شده دریافت کرده باشد ، فقط مقدار ذخیره شده Kademlia را در Storj برمی گرداند (بخشهای سفید 3.3 و 4.6):

شبکه Storj V3 نسخه بعدی مورد انتظار پلت فرم ذخیره سازی اشیا distributed توزیع شده و غیرمتمرکز Storj است.

شبکه جدید از نسخه اصلاح شده Kademlia به عنوان منبع اصلی حقیقت برای قابلیت های مشابه DNS برای جستجوی گره استفاده می کند ، حتی اگر جنبه های ذخیره کلید / مقدار Kademlia برای شبکه لازم نیست.

هنگام ساخت شبکه قبلی Storj ، ما به شدت بر اجرای Kademlia متمرکز شدیم و حتی یک مفهوم سیستم فایل در اطراف پروتکل ایجاد کردیم.

ما به سرعت از چند محدودیت عملکرد استفاده از سطلهای k اصلاح شده در یک شبکه ذخیره سازی توزیع شده مطلع شدیم و در Storj V3 پیرامون این موارد کار کردیم.

استفاده از Kademlia صرفاً برای جستجوی گره ، نیازی به برخی دیگر از قابلیت های Kademlia را از بین می برد ، مانند بازنشر کلید مبتنی بر مالک ، بازنشر کلید مبتنی بر همسایه ، ذخیره و بازیابی مقادیر و غیره

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

به همین دلیل ، ما تعدادی از برنامه های افزودنی S / Kademlia را برای فعال کردن پروتکل مسیریابی مبتنی بر کلید امن در صورت لزوم پیاده سازی کرده ایم.

S / Kademlia همچنین یک لایه پایه برای محافظت در برابر برخی از حملات در برابر سیستم های توزیع شده ، به ویژه:

Sybil Attacks - جایی که کاربر تعداد زیادی هویت دلخواه (NodeID) برای ایجاد سیل در شبکه ایجاد می کند.

Eclipse Attacks - جایی که یک مهاجم سعی می کند با اطمینان از رسیدن تمام اتصالات خروجی به گره های مخرب ، یک گره یا مجموعه ای از گره ها را در نمودار شبکه جدا کند.

پسوندهای S / Kademlia با ایجاد حداقل آستانه کار برای تولید گره ، از حملات سیبیل به فضای آدرس جلوگیری می کنند.

به جای اثبات کار پیاده سازی شده در بیت کوین (و پروتکل های اجماع مشابه) ، ذخیره سازی NodeID تولید به بیت های 0 صفر نیاز دارد.

این به ما امکان می دهد تا همچنان از مسیریابی Kademlia XOR استفاده کنیم.

این روند افزودن گره های جدید را کند می کند و برای تولید NodeID به هزینه محاسبه نیاز دارد ، اما نتیجه کار در NodeID گنجانیده شده است.

این به ما امکان می دهد بدون افزودن مراحل اضافی برای تأیید اینکه NodeID کار را به پایان رسانده است ، از مسیریابی XOR استفاده کنیم.

در تعریف مشخصات شبکه V3 ، ما از نزدیک با نویسنده کادملیا ، پتار میمونکوف ، که همچنین به عنوان یکی از مشارکت کنندگان در مقاله سفید V3 ذکر شده است (به ویژه برای کار خود در مورد بخش 4.6.1 ،) مشورت کردیم. Storj با استفاده از کلید عمومی خود را در برابر حملات گرفتگی محافظت می کند هش ها به عنوان NodeIDs ، امضاها بر اساس کلیدهای عمومی ، فرآیند بررسی گره و جستجوی شبکه های چندگانه جداگانه همانطور که توسط مشارکت های S / Kademlia و Maymounkov تجویز شده است.

غلبه بر محدودیت های Kademlia در Storj V3:

مجموعه محدودی وجود دارد که ما باید برای طراحی یک لایه ذخیره سازی جسم توزیع شده با مقیاس جهانی ، بسیار کارآمد و توزیع شده ، طراحی کنیم.

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

حافظه پنهان موجود در Storj Satellite آخرین گره های آنلاین را ردیابی می کند.

اگر آنها در حافظه پنهان پوشه یافت نشد ، ما مشخص می کنیم که گره ها باید آفلاین باشند ، بنابراین اشتراک های پاک کردن از بین رفته و منجر به فرآیند ترمیم داده ها می شوند.

جالب است که گره های ذخیره سازی از لایه DHT caching جدا می شوند ، به این معنا که آنها می توانند بدون برقراری تماس با ماهواره ارتباط برقرار کرده و سازماندهی کنند.

با این حال ، برای آپلود / بارگیری مشتری ، آنها به عامل هماهنگ کننده (ماهواره) نیاز دارند تا وارد عمل شود و با آنها ارتباط برقرار کند.

با به اشتراک گذاشتن هر Kademlia FIND_NODE RPC در پوشش ، این پیام شامل فضای دیسک موجود در گره ذخیره سازی ، در دسترس بودن پهنای باند پهنای باند ماهواره و هر فراداده دیگری است که شبکه به آن احتیاج دارد.

حافظه پنهان گره ، اطلاعات به دست آمده توسط گره ها را جمع آوری کرده و سرعت جستجو را بهینه می کند.

گره ذخیره سازی شرکت کننده برای اطمینان از در دسترس بودن منابعی که تبلیغ کرده است ، فرآیند بررسی گسترده ای را با ماهواره انجام می دهد.

این فرآیند شهرت اولیه برای گره ذخیره سازی و عوامل موثر بر درآمد را تعیین می کند.

بنابراین ، گره ای که وارد جداول مسیریابی می شود توسط شبکه "بررسی شده" در نظر گرفته می شود و فقط از طریق گره های تأیید شده جستجو می شود.

این تضمین می کند که فقط گره هایی که فضای دیسک آنها تأیید شده است ، قادر به ورود و مشارکت در لایه مسیریابی هستند ، در عین حال به ظرفیت شبکه نیز افزوده شده و همچنین از حملات محافظت می کنند.

کاربرد Kademlia در پروتکل Ethereum:

پروتکل کشف گره در پشته شبکه بلاکچین Ethereum مبتنی بر اجرای کمی اصلاح شده Kademlia است.

Ethereum از متریک Xadem Kademlia و ساختار k-bucket ساختار استفاده می کند و مشابه Storj ، از جستجوی بیشتر برای کشف همتایان جدید استفاده می شود.

در Ethereum ، مشتری اطلاعات مربوط به گره های دیگر را در دو ساختار داده ذخیره می کند.

اولین پایگاه داده بلند مدت به نام db است که روی دیسک ذخیره می شود و در هنگام راه اندازی مجدد سرویس گیرنده ادامه می یابد.

دوم یک پایگاه داده کوتاه مدت است که به آن table گفته می شود و حاوی سطلهایی شبیه Kademlia است که هر زمان که مشتری دوباره راه اندازی می شود همیشه خالی است.

قابل ذکر است ، اجرای اولیه Kadelia Ethereum در برابر حمله گرفتگی آسیب پذیر بود ، در نتیجه یک مهاجم مجموعه ای از NodeID های Ethereum را تولید می کند ، و سپس از یک استراتژی هماهنگ برای شروع حملات گرفتگی از دو ماشین میزبان (هر کدام) فقط با یک آدرس IP استفاده می کند.

Storj به دلیل الحاقات فوق 4.6.1 و S / Kademlia می تواند از این امر جلوگیری کند ، جایی که روند تأیید ماهواره و تولید گواهینامه اثبات کار هزینه های NodeID نسل را برای مهاجمان بالقوه غیرعادی می کند.

کاربرد Kademlia در پروتکل سیستم پرونده بین پلانتاری:

سیستم پرونده بین سیاره ای (IPFS) همچنین از Kademlia با پسوندهای Coral DSHT و S / Kademlia استفاده می کند.

در اجرای IPFS ، NodeID حاوی یک نقشه مستقیم به پرونده های هش پرونده IPFS است.

همچنین هر گره اطلاعات مربوط به محل تهیه فایل یا منبع را ذخیره می کند.

تعدادی از پروژه ها به دنبال استفاده از شبکه Storj به عنوان یک فروشگاه شی برای IPFS هستند.

یکی از قابل توجه ترین موارد RTD است که در حال ساخت گره IPFS با پشتیبانی Storj برای اطمینان از در دسترس بودن و دوام پرونده های IPFS خود است.

کاربرد Kademlia در پروتکل Swarm:

هدف اصلی Swarm تهیه یک فروشگاه کاملاً غیرمتمرکز و زاید از سوابق عمومی Ethereum ، به ویژه ذخیره و توزیع کد و داده های dApp و همچنین داده های بلاکچین است.

شرکت کنندگان در شبکه Swarm توسط هش آدرس Ethereum از حساب پایه Swarm در Kademlia DHT شناسایی می شوند.

این به عنوان آدرس همپوشانی آنها عمل می کند ، سطل های نظم مجاورت بر اساس این آدرس ها محاسبه می شوند.

Swarm به جای ذخیره سازی جسم بزرگ ، برای بیت های داده کوچکتر مرتبط با قراردادهای هوشمند Ethereum مناسب است.

Swarm از حداکثر اندازه خرده ریز 4k استفاده می کند و یک سل تقریباً 1000000000kb است.

بنابراین ، برای بارگذاری یک جسم بزرگتر ، مثلاً 1 ترابایت ، در Swarm ، به 250،000،000 گره نیاز دارد (که فقط کمی کمتر از جمعیت ایالات متحده است).

در مقایسه ، Storj برای ذخیره سازی اشیا large بزرگ مناسب تر است ، زیرا ما فقط باید گره های کافی برای پوشش سهام پاک کردن پیدا کنیم.

Swarm همچنین مفهومی را اجرا می کند که به عنوان همسایگی مسئولیت شناخته می شود و کارکنان یک استراتژی جدید برای اضافه کاری برای اطمینان از در دسترس بودن گره ایجاد می کنند.

با توجه به تجربه ما در استفاده از شبکه قبلی Storj ، به این نتیجه رسیده ایم که تکثیر shard می تواند یک روش ناکارآمد برای اطمینان از دوام فایل باشد ، به ویژه در محیطی با محدودیت پهنای باند گره و بالادست.

نتیجه:

یکی از بهترین راه ها برای کسب اطلاعات بیشتر در مورد Kademlia دیدن عملی آن است.

می توانید برای به اشتراک گذاشتن فضای ذخیره سازی و پهنای باند استفاده نشده به شبکه Storj بپیوندید و یک گره را در شبکه ما به کار بگیرید.

امیدوارم که این پست به عنوان یک نمای خوب از Kademlia و کاربرد آن در سیستم عامل های توزیع شده مدرن عمل کند.

متغیر Kademlia و XOR ابزاری عالی و کارآمد است که در شبکه های مدرن Storj V3 ، Ethereum ، IPFS و Swarm برای جستجو ، مسیریابی و کشف گره مورد استفاده قرار می گیرد.