شبکه P2P ¶

ساخت وبلاگ

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

معرفی¶

گره های کامل قبل از انتقال آنها به گره های دیگر ، هر بلوک و معامله را بارگیری و تأیید کنید. گره های بایگانی گره های کامل هستند که کل blockchain را ذخیره می کنند و می توانند بلوک های تاریخی را به گره های دیگر ارائه دهند. گره های هرس گره های کامل هستند که کل blockchain را ذخیره نمی کنند. بسیاری از مشتری های SPV همچنین از پروتکل شبکه بیت کوین برای اتصال به گره های کامل استفاده می کنند.

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

برای ارائه نمونه های عملی از شبکه همتا به همتا بیت کوین ، در این بخش از Bitcoin Core به عنوان یک گره کامل و بیت کوین به عنوان یک مشتری نماینده SPV استفاده می کند. هر دو برنامه انعطاف پذیر هستند ، بنابراین فقط رفتار پیش فرض شرح داده شده است. همچنین ، برای حفظ حریم خصوصی ، آدرس های IP واقعی در خروجی مثال زیر با آدرس های IP RFC5737 جایگزین شده اند.

کشف همسالان

هنگامی که برای اولین بار شروع شد ، برنامه ها آدرس IP هر گره کامل فعال را نمی دانند. به منظور کشف برخی از آدرس های IP ، آنها یک یا چند نام DNS (به نام دانه های DNS) را که در Bitcoin Core و Bitcoinj سخت شده بودند ، پرس و جو می کنند. پاسخ به جستجوی باید شامل یک یا چند پرونده DNS با آدرس IP گره های کامل باشد که ممکن است اتصالات ورودی جدید را بپذیرد. به عنوان مثال ، با استفاده از دستور UNIX `` DIG` `__:

دانه های DNS توسط اعضای جامعه بیت کوین نگهداری می شوند: برخی از آنها سرورهای بذر DNS DNS را ارائه می دهند که به طور خودکار با اسکن شبکه آدرس های IP از گره های فعال را دریافت می کنند. برخی دیگر دانه های DNS استاتیک را ارائه می دهند که به صورت دستی به روز می شوند و به احتمال زیاد آدرس های IP را برای گره های غیرفعال ارائه می دهند. در هر صورت ، اگر در درگاه های بیت کوین پیش فرض 8333 برای Mainnet یا 18333 برای TestNet اجرا شوند ، گره ها به دانه DNS اضافه می شوند.

نتایج بذر DNS تأیید اعتبار نمی شود و یک اپراتور بذر مخرب یا شبکه میانه در وسط می تواند فقط آدرس های IP گره های کنترل شده توسط مهاجم را برگرداند و یک برنامه را در شبکه خود مهاجم منزوی کند و به مهاجم اجازه دهد تا معاملات جعلی را تغذیه کندو بلوکبه همین دلیل ، برنامه ها نباید به طور انحصاری به دانه های DNS اعتماد کنند.

هنگامی که یک برنامه به شبکه متصل شد ، همسالان آن می توانند پیام های ADDR (آدرس) را با آدرس های IP و شماره پورت سایر همسالان در شبکه ارسال کنند و یک روش کاملاً غیر متمرکز از کشف همسالان را ارائه می دهند. Bitcoin Core سابقه ای از همسالان شناخته شده را در یک پایگاه داده مداوم روی دیسک نگه می دارد که معمولاً به آن اجازه می دهد بدون نیاز به استفاده از دانه های DNS ، مستقیماً به آن همسالان متصل شود.

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

برای جلوگیری از این تاخیر ممکن ، بیت کوین همیشه از دانه های DNS پویا برای دریافت آدرس های IP برای گره هایی که گمان می رود در حال حاضر فعال هستند استفاده می کند. Bitcoin Core همچنین سعی می کند تعادل بین به حداقل رساندن تأخیرها و جلوگیری از استفاده غیر ضروری DNS Deed را برقرار کند: اگر Bitcoin Core در پایگاه داده همسالان خود ورودی هایی داشته باشد ، تا 11 ثانیه صرف تلاش برای اتصال حداقل یکی از آنها قبل از بازگشت به بذر می شود. اگر در آن زمان اتصال برقرار شود ، هیچ دانه ای را پرس و جو نمی کند.

هر دو Bitcoin Core و Bitcoinj همچنین شامل لیستی از آدرس های IP و شماره های پورت به ده ها گره هستند که در طول زمان انتشار نسخه خاص این نرم افزار فعال بودند. اگر هیچ یک از سرورهای بذر DNS در مدت 60 ثانیه به یک پرس و جو پاسخ ندادند و گزینه ای برای بازگشت خودکار به یک پرس و جو پاسخ ندادند ، تلاش برای اتصال به این گره ها را آغاز می کند.

به عنوان یک گزینه Fallback دستی ، Bitcoin Core همچنین چندین گزینه اتصال خط فرمان را ارائه می دهد ، از جمله امکان دریافت لیستی از همسالان از یک گره خاص توسط آدرس IP یا ایجاد یک اتصال مداوم به یک گره خاص توسط آدرس IP. برای جزئیات بیشتر به مت ن-help مراجعه کنید. Bitcoinj را می توان برنامه ریزی کرد تا همین کار را انجام دهد.

منابع: بیت کوین Seeder ، این برنامه توسط چندین دانه استفاده شده توسط Bitcoin Core و Bitcoinj اجرا می شود. سیاست بذر DNS Core Bitcoin Core. لیست هارد کد شده از آدرس های IP که توسط Bitcoin Core و BitcoinJ استفاده می شود با استفاده از اسکریپت Makeseeds تولید می شود.

اتصال به همسالان

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

پس از اتصال ، مشتری می تواند برای جمع آوری همسالان اضافی به پیام های گره از راه دور GetAddr و "ADDR" ارسال کند.

به منظور حفظ ارتباط با همسالان ، گره ها به طور پیش فرض قبل از 30 دقیقه عدم فعالیت ، برای همسالان پیام ارسال می کنند. اگر 90 دقیقه بدون پیامی که توسط یک همسالان دریافت می شود عبور کند ، مشتری فرض می کند که اتصال بسته شده است.

بارگیری بلوک اولیه

قبل از اینکه یک گره کامل بتواند معاملات تأیید نشده و بلوک های اخیراً را تأیید کند ، باید تمام بلوک ها را از بلوک 1 (بلوک بعد از بلوک پیدایش سخت) تا نوک فعلی بهترین زنجیره بلوک بارگیری و اعتبار دهد. این بارگیری بلوک اولیه (IBD) یا همگام سازی اولیه است.

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

Bitcoin Core هر زمان که آخرین بلوک در زنجیره بلوک بهترین محلی خود از روش IBD استفاده می کند ، بیش از 24 ساعت در گذشته دارد. Bitcoin Core 0. 10. 0 همچنین IBD را نیز انجام می دهد اگر بهترین زنجیره بلوک محلی آن بیش از 144 بلوک پایین تر از زنجیره بهترین هدر محلی خود باشد (یعنی زنجیره بلوک محلی در گذشته بیش از 24 ساعت است).

بلوک های اول

Bitcoin Core (تا نسخه 0. 9. 3) از یک روش ساده بارگیری بلوک اولیه (IBD) استفاده می کند که ما با بلوک های اول تماس خواهیم گرفت. هدف بارگیری بلوک ها از بهترین زنجیره بلوک به ترتیب است.

نمای کلی از روشهای اول-

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

اولین پیام GetBlocks ارسال شده در IBD

در قسمت هشدار هش از پیام "GetBlocks" ، این گره جدید هش هدر تنها بلوکی را که در آن قرار دارد ارسال می کند ، بلوک پیدایش (6Fe2… 0000 به ترتیب بایت داخلی). همچنین قسمت Hash Stop را به همه صفرها تنظیم می کند تا پاسخ حداکثر اندازه را درخواست کنند.

پس از دریافت پیام "GetBlocks" ، گره Sync اولین هدر (و تنها) هدر را می گیرد و بهترین زنجیره بلوک محلی خود را برای بلوک با آن هش هدر جستجو می کند. می یابد که بلوک 0 مطابقت دارد ، بنابراین با 500 موجودی بلوک (حداکثر پاسخ به پیام "GetBlocks") که از بلوک 1 شروع می شود ، پاسخ می دهد. این موجودی ها را در پیام "Inv" که در زیر نشان داده شده است ارسال می کند.

اولین پیام inv ارسال شده در IBD

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

موجودی های بلوک در پیام "Inv" به همان ترتیب که در زنجیره بلوک ظاهر می شوند ظاهر می شوند ، بنابراین این اولین پیام "Inv" حاوی موجودی برای بلوک های 1 تا 501 است. (به عنوان مثال ، هش بلوک 1 4860 است ... 0000 به عنواندر تصویر بالا دیده می شود.)

گره IBD از موجودی های دریافت شده برای درخواست 128 بلوک از گره همگام سازی در پیام "GetData" که در زیر نشان داده شده است استفاده می کند.

اولین پیام GetData که در طول IBD ارسال شده است

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

پس از دریافت پیام "GetData" ، گره Sync با هر یک از بلوک های درخواست شده پاسخ می دهد. هر بلوک در قالب بلوک سریالی قرار داده شده و در یک پیام "بلوک" جداگانه ارسال می شود. اولین پیام "بلوک" ارسال شده (برای بلوک 1) در زیر نشان داده شده است.

اولین پیام بلوک ارسال شده در IBD

گره IBD هر بلوک را بارگیری می کند ، آن را تأیید می کند ، و سپس از بلوک بعدی که هنوز درخواست نکرده است درخواست می کند و صف حداکثر 128 بلوک را برای بارگیری حفظ می کند. هنگامی که از هر بلوکی که موجودی آن را داشته باشد درخواست کرده است ، پیام "GetBlocks" دیگری را به گره همگام سازی ارسال می کند که درخواست موجودی های حداکثر 500 بلوک دیگر را می دهد. این پیام دوم "GetBlocks" حاوی چندین هدر هدر است که در زیر نشان داده شده است:

پیام دوم GetBlocks ارسال شده در IBD

پس از دریافت پیام دوم "GetBlocks" ، گره Sync بهترین زنجیره بلوک محلی خود را برای بلوکی که مطابق با یکی از هشدهای هدر در پیام است ، جستجو می کند و هر یک از هش را به ترتیب دریافت شده امتحان می کند. اگر یک هش تطبیق پیدا کند ، با 500 موجودی بلوک که از بلوک بعدی از آن نقطه شروع می شود ، پاسخ می دهد. اما اگر هیچ هش تطبیقی وجود نداشته باشد (علاوه بر هش توقف) ، فرض می کند تنها بلوکی که دو گره مشترک دارند ، بلوک 0 است و بنابراین یک دعوت نامه را با شروع بلوک 1 ارسال می کند (همان پیام "Inv" که چندین تصویر در بالا دیده می شود)بشر

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

هنگامی که گره IBD پیام دوم "Inv" را دریافت می کند ، آن بلوک ها را با استفاده از پیام های "getData" درخواست می کند. گره همگام سازی با پیام های "بلوک" پاسخ خواهد داد. سپس گره IBD با پیام "GetBlocks" دیگر موجودی های بیشتری را درخواست می کند - و چرخه تا زمانی که گره IBD در نوک زنجیره بلوک همگام سازی شود ، تکرار می شود. در آن مرحله ، گره بلوک های ارسال شده از طریق پخش بلوک معمولی را که در بخش بعدی شرح داده شده است ، می پذیرد.

اولین مزایا و مضرات

مزیت اصلی بلوک های اول IBD سادگی آن است. نقطه ضعف اصلی این است که گره IBD برای همه بارگیری های خود به یک گره همگام سازی تک متکی است. این پیامدهای مختلفی دارد:

محدودیت های سرعت: تمام درخواست ها به گره Sync انجام می شود ، بنابراین اگر گره Sync دارای پهنای باند بارگذاری محدود باشد ، گره IBD سرعت بارگیری آهسته خواهد داشت. توجه: اگر گره همگام سازی آفلاین شود ، Bitcoin Core بارگیری را از یک گره دیگر ادامه خواهد داد - اما هنوز هم فقط از یک گره همگام سازی در یک زمان بارگیری می شود.

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

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

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

همه این مشکلات به صورت جزئی یا به طور کامل با استفاده از روشهای IBD اول مورد استفاده در هسته بیت کوین 0. 10. 0 مورد بررسی قرار می گیرد.

منابع: جدول زیر پیام های ذکر شده در این بخش را خلاصه می کند. پیوندهای موجود در قسمت پیام شما را به صفحه مرجع برای آن پیام می برد.< Pan> حملات پر کردن دیسک: از نزدیک با راه اندازی مجدد بارگیری ، اگر گره همگام سازی یک زنجیره بلوک غیر بهترین (اما در غیر این صورت معتبر) ارسال کند ، این زنجیره روی دیسک ذخیره می شود ، فضا را هدر می دهد و احتمالاً درایو دیسک را با بی فایده پر می کندداده ها.

فارکس در ایران...
ما را در سایت فارکس در ایران دنبال می کنید

برچسب : نویسنده : محمدرضا گلزار بازدید : 227 تاريخ : چهارشنبه 9 فروردين 1402 ساعت: 13:14