Историята на мрежите на Harmony

В Harmony ние не просто разглеждаме какво е необходимо, за да свършим работата днес - искаме да изградим нещо, което ще свърши работата дори след години. Това важи за всички слоеве от нашия технологичен стек, не само за по-високите слоеве, които са по-близо до нашите ключови резултати - като интелигентни договори и консенсус - но и за „светските“ области от по-ниско ниво като системи и мрежи, които другите са склонни да приемат за даденост ,

Правим това, защото имаме твърдо убеждение, че ключовите атрибути на нашия протокол и внедряване се управляват не само от ключови компоненти, но и от целия вертикален стек от технологии, които се интегрират заедно, за да се даде възможност за доставка на ключ на различни нива. Ако някой технологичен слой остави много да се желае, общият резултат страда от това. Освен това, колкото по-ниско ниво пребивава неоптимален компонент, толкова по-широк е радиусът му на взрив, толкова по-голям става неговият неуспех и по-трудно е да се заобиколи или замаскира повредата.

В тази публикация ще говорим за един такъв нисък, но критичен компонент: Мрежата. Ние ще се опитаме да запазим нещата прости и по-достъпни, така че ако вече сте опитен експерт по работа в мрежа, моля, имайте предвид нашите обяснения в стил „мрежи-101“.

Моля, обърнете внимание: Това са нашите най-добри подходи, но както при всеки най-нов технологичен фронт, това, което в крайна сметка освобождаваме или използваме в производството, може значително да се различава от това, което предстои да обсъдим тук.

Предпочитана комуникация от край до край

Хармонията е изградена на принципа от край до край, който препоръчва възможно най-голяма част от ключовата логика на приложения протокол да бъде изтласкана към крайните възли, които разговарят един с друг. Възлите са самостоятелни и не използват средни кутии, за да предават съобщения на други възли, освен в няколко случая. По-конкретно, възел не изпраща едноадресно съобщение до друг възел през мулти-хоп път в наслагване на мрежа от други възли.

Защо? Тъй като ние приемаме, че възлите могат да се повредят със сравнително голяма вероятност: В blockchain пространството, ние рутинно говорим за едва 67% или дори 50% от възлите да бъдат честни! Да наречем тази вероятност p. Тогава, ако съобщението бъде изпратено до друг възел h отскача, общата вероятност едноадресното съобщение достига до честен получател p ^ h. При еднократно, директно предаване от край до край, вероятността възел да стигне до честния възел е 67% или 50%; за два хмела, 44% или 25%; за три хмела; 30% или 12,5%. Вероятността намалява експоненциално!

Unicast съобщения през мулти-хоп P2P наслагване с противници

Изключенията от този принцип включват:

  • При откриване на други възли;
  • При мултикастинг на съобщение; и
  • Когато ограничението в топологията на мрежата забранява директната комуникация между изпращача и получателя, напр. поради преводачи на мрежови адреси (NAT) или мрежови защитни стени.

HIPv2: Id / Loc, Откриване, Мобилност, Multi-Homing, NAT Traversal

При модела от край до край трябва да се реши един основен проблем: Ако възел A трябва да говори директно с друг възел B, без да има възел за преминаване по подразбиране, как A може да открие B и да установи къде живее B? Нека да разгледаме този проблем по-задълбочено и да видим как го решаваме.

Всяко мрежово образувание, като хост или възел, има два вида информация, свързани с него:

  • Идентификаторът е уникална информация, която отличава асоциираното образувание от другите субекти в мрежата;
  • Локаторът е информация, която мрежата може да използва за насочване на трафика към асоциираното образувание.

Ранният Интернет се състоеше от сравнително стабилни, дълго работещи хостове, всеки от които притежава един статично присвоен IP адрес, който служи и като идентификатор, и като локатор на хоста, и много протоколи за приложения бяха изградени при това предположение за еднопосочно картографиране между хостове и IP адреси. Обаче мобилните и многодомните мрежи, както и изчерпването на IPv4 адресното пространство и произтичащата от това необходимост от разпределяне на IP адрес динамично нарушиха това едно към едно предположение в глобалния Интернет и донесоха необходимостта от отделяне на идентификатори от локатори и за протокол, който управлява картографирането между двете.

Принципът от край до край изисква разделяне на това кой е изпращачът / получателят спрямо мястото, където могат да бъдат достигнати.

В Работната група за интернет инженеринг (IETF) бяха предложени протоколи като HIPv2, ILNP и LISP - не, не функционалният език за програмиране - за разделяне на пространството на идентификатор и локатор, всяко предложение с различни характеристики и случаи на използване. От тях HIPv2, или Host Identity Protocol Версия 2, се доближава най-близо до случая на използване на крайните възли, идентифицирани от двойки криптографски публично-частни ключове, което директно пасва на модела на възлите на огромното мнозинство блокчейн технологии, включително Harmony.

Като протокол за разделяне на идентификатор / локатор, HIPv2 също осигурява поддръжка за мобилност и мулти-насочване. Поддръжката за мобилност дава възможност да се поддържа съществуваща връзка на комуникационен канал между два възела, въпреки промените в IP адреса от едната или от двете страни, което се случва често за мобилни възли, които могат да скачат често между WiFi и клетъчни данни. Поддръжката на много хомове дава възможност на възел да бъде достъпен и да използва повече от един IP адрес, което може да помогне на IPv4 / IPv6 с двойно подреждане.

HIPv2 предлага също разширение за основно NAT траверсиране, базирано на друга технология за проследяване на стандарти, наречена Interactive Connectivity Establishment, за да даде възможност на повечето възли, скрити зад NAT, да установят канали за комуникация помежду си, като допълнително подкрепят принципа ни от край до край.

Harmony използва HIPv2 за id / loc, откриване, мобилност, мултихоминг и NAT преминаване.

HIPv2 действа като протокол слой-3.5 и представя транспортния слой с псевдо IP адреси, наречени Host Identity Tags (HITs). Приложенията използват HIT, за да комуникират помежду си, след това HIPv2 обработва превода между HIT и техните основни IP адреси, използвайки DNS и механизми за среща. Ние също така разработваме DHT-базиран механизъм за откриване на върха на HIPv2, който ще се използва предимно за локализиране на възли, които не са публикувани и не се доверяват на никакви механизми за среща.

Тагове за идентичност на хоста (HITs) спрямо IP адреси в HIPv2

Използването на HIPv2 запазва протокола Harmony постно, като премахва необходимостта от разрешаване на идентификатор на възел (публичен ключ) в IP адреси.

RaptorQ: Надежден, ефективен Multicast / Unicast

Сега, когато решихме кои и къде проблемите на комуникацията, прехвърляме дискусията си към какъв проблем - самите съобщения. По-специално, нека разгледаме тези два реални проблема:

  • Как да се борим с падането на пакети и повредите, така че да доставим съобщение надеждно?
  • Как можем надеждно да доставим мулти-получател съобщение до неговите N получатели, без неговият подател да поеме разходите за изпращане на съобщения N пъти?

Първият проблем обикновено се решава чрез включване в протокола на NAKs (отрицателни потвърждения или „не съм го получил, казвам го отново?“). Този модел има два въпроса: 1) Такива NAK и произтичащите от тях повторни излъчвания въвеждат допълнителни закъснения по реда на времената за обратно пътуване (RTT) между изпращача и получателя, и 2) не е лесно мащабируемо в случай на еднократна връзка много съобщения.

Вторият проблем обикновено се решава чрез клюки: изпращане на цялото съобщение, а част от него на всеки получател и изискване от получателя да препредаде парчето на всички останали получатели. По този начин общите разходи за „споделяне“ на такова съобщение се разпределят равномерно между подателя и всички получатели.

Тъй като моделът на клюките се отклонява от принципа „от край до край“, възниква нов проблем: Ами ако някои от получателите могат да бъдат повредени? Какво става, ако те не работят в сътрудничество и вместо това държат получената част за себе си? RapidChain предлага алгоритъм за разпространение на информация (IDA), вдъхновен от по-ранни изследвания. Той използва комбинация от Reed-Solomon корекция на грешки и Merkle дървета, за да реализира сигурно, надеждно мултикастиране на голямо съобщение сред поне всички партньорски колеги, ако не и всички връстници.

Кодовете за коригиране на грешки са полезни не само за втория проблем с множествено предаване, но и за първия проблем с грешен път, като например борба с откази в мрежовия слой като загуби на пакети.

Кодовете за коригиране на грешки могат да се борят както с проблемите на загубата на пакети, така и с балансираното натоварване мултикаст.

Въпреки това, кодът на Рийд-Соломон има фиксирана скорост на кода, което го прави по-трудно да се използва за случайни капки на пакети. Това означава, че ако фрагментът на съобщението се загуби, подателят няма начин да разбере кой е загубен, освен ако получателят не каже на подателя. Отново такива NAK-ове за получател и изпращач и повторно изпращане исканията забавят протокола, особено по отношение на високо-латентна връзка с ниска честотна лента (като например в клетъчна мрежа), където падат пакетите по-често се наблюдават.

Индустрията за излъчване на IP разпознава този проблем от рано. В действителност, в някои случаи обратният канал за предаване на NAK може дори да не е налице или ако е, може да е много по-бавен в случаи като сателитно излъчване. Така те насочиха вниманието си към стратегия, комбинираща напред корекция на грешки с безценни кодове за изтриване. За разлика от кода с фиксирана скорост, при който може да има само ограничен брой блокове за възстановяване на грешки, безкамерният код за изтриване прави възможно подателят да генерира безкраен брой блокове за възстановяване на грешки. (Това безкрайно генериране на блокове за възстановяване също дава безконечен код за изтриване друго име: „Код на фонтана.“) Поради това, когато изпращачът на съобщението няма потвърждение, че всички необходими получатели - като кворум на консенсус - са получили и обработили съобщение, не е нужно да се притеснявате кой от пакетите, които е изпратил, е бил изгубен: Той може просто да генерира повече блокове за възстановяване от фонтана и да го изпрати, докато получи необходимото потвърждение (или докато не се удари в изчакване на протокола, в случай на синхронен протокол).

Код на фонтана: Безкрайно много гълъби-носители, родени от „фонтан“

След получаване на достатъчно блокове за възстановяване на грешки, кодирани с безкраен код за изтриване, независимо кои блокове са, получателят може да реконструира оригиналното съобщение с много голяма вероятност. Безценен код за изтриване може да бъде конструиран със специфичен целеви праг на броя съобщения. Добрите безкамерни кодове за изтриване също показват явление, наречено скален ефект, което прави вероятността за възстановяване на първоначалното съобщение близо до 1, когато получателят получава над целевия праг на блокове за възстановяване на грешки.

Най-безкрайните кодове за изтриване - като това, това, това и това - са подобни, като разчитат на кодирането, използвайки базирана на XOR двустранна графика и декодиране на разпространение на вярвания, и постигат почти оптимална ефективност на кодиране. От тях Harmony използва най-модерния RaptorQ код. Този стандартизиран IETF код е създаден от изтъкнати инженери от компании като Qualcomm (hi безжична) и Netflix (hi IPTV), което свидетелства за практическия му характер.

Harmony използва кода на фонтана RaptorQ за надеждно и балансирано натоварване на съобщения.

Като се имат предвид n общите дестинационни възли, от които k може да се повреди, ние конструираме код с целева скорост, така че получаването на кодирани n - k - Cp блокове на съобщението е достатъчно за възстановяване на първоначалното съобщение. (Говорим за Cp по-долу.) След това изпращаме n кодирани блока, използвайки този код, всеки блок на всеки от n връстници. Колегите клюкарстват кодирания блок, който получават на други връстници, както в RapidChain IDA. Ако приемем, че k възлите са несъдействащи и не прехвърлят своите блокове за възстановяване на други връстници, честните възли все пак ще получат n-k блокове за възстановяване, които са достатъчни за реконструкция на първоначалното съобщение.

След изпращането на първоначалния пакет от n кодирани блока, подателят спорадично генерира допълнителни кодирани блокове и ги разпределя на произволни колеги. Препоръчителното закъснение е половината от средното време за заобикаляне между възлите (RTT), което може да бъде конфигурирано статично или измерено динамично, с експоненциален баккофф с ниска основа. Подателят може да спре да генерира и изпраща допълнителни блокове, след като потвърди, че всички необходими получатели (например кворумът на n-k) са реконструирали и обработили оригиналното съобщение.

Песимистичната константа Cp, малко положително цяло число, се справя с малката, но ненулева вероятност, че след получаване на точния праг на броя на кодираните блокове, приемниците все още не могат да реконструират първоначалното съобщение. Той може също да отчита загубата на базовата линия.

Подателят подписва кодираните блокове, които генерира и изпраща. Това се използва вместо дърво Merkle, така че получателят да може да валидира блока, преди да го клюки на други връстници. Тук не използваме дърво Merkle, защото е трудно да се използва за потенциално неограничен брой възли - кодирани блокове от „фонтана“ - в дървото, без да се жертват неговите защитни свойства.

Единственият случай е подобен на множествено предаване, с изключение на:

  • Броят на кодираните блокове и целевата честота на кода не се регулират от параметъра консенсус, а само от очакваната степен на загуба на пакет;
  • Всички кодирани блокове се изпращат директно на получателя;
  • Кодираните блокове не трябва да се подписват от подателя, тъй като ESP транспортът, използван в подлежащия слой HIPv2, вече осигурява защита на целостта на еднократния единен път между изпращача и получателя, а полученото съобщение, като едно съобщение за едно предаване, прави не е необходимо да се препредава на други връстници.

UDP транспорт, с DCCP / QUIC-вдъхновен контрол на задръстванията

Много, ако не и повечето, блокчейн протоколи използват TCP като свой транспорт. Въпреки това, напълно сериализираният, байтово ориентиран характер на TCP страда от проблеми с блокирането на линия и други нежелани недостатъци на производителността. Освен това ние осъзнаваме много предимства, предлагани от TCP чрез други средства:

  • Преправянето на грешки напред от RaptorQ вече осигурява средство за надеждно предаване с малко латентно трептене.
  • Пренареждането на блока за коригиране на грешки не е проблем при безценни кодове за изтриване.
  • Съобщенията на протокола на консенсусния слой вече съдържат маркери за генериране като блокови номера, така че пренареждането на протоколните съобщения може да бъде открито и обработено от слоя на консенсус. Платформата за данни ESP, вградена в HIPv2 слой, обработва корупцията на пакета от HMAC.

Заедно, те най-вече премахват необходимостта от TCP. Следователно, Harmony се отклонява от използването на TCP и използва обикновен UDP като основен транспорт, освен HIPv2 и ESP.

Harmony използва UDP като основен транспорт.

Използването на обикновена дейтаграма като UDP оставя един проблем все още отворен: Контрол на задръстванията. Интернет е споделен ресурс, а трафикът ни се мултиплексира с безброй други мрежови потоци по същата връзка. Ако изпращачът може да открие, че пътят до местоназначението е препълнен (и пакетите отпадат), изпращачът ще се оттегли по-добре и ще забави скоростта на предаване, за да постигне добра икономия на пропускателна способност. С други думи, съотношението на ефективната честотна лента към действителната скорост на предаване трябва да бъде близко до 1.

Контролът на задръстванията също е важен за гарантиране на справедливо използване на споделена връзка. Всъщност стандартът на IETF FEC Building Block, който стои в основата на RaptorQ, изисква протоколът, който използва изграждащ блок FEC, да използва механизъм за контрол на задръстванията, така че протоколът за разпространение на съдържанието, който използва строителни блокове FEC, може да остане добър гражданин, като не спамира споделена връзка с ненужно голям брой кодирани блокове.

Има множество опити за прилагане на контрол на задръстванията върху обикновени протоколи от дейтаграми като UDP. Протоколът за контрол на задръстванията в Datagram (DCCP), дългогодишен предложен IETF стандарт, предлага средство за контрол на задръстванията. Той има няколко режима, наречени TCP-подобни и TCP-friendly, с различни характеристики на backoff. Той се реализира както в Linux, така и в FreeBSD.

QUIC, друг транспортен протокол, базиран на UDP, разработен от Google и реализиран в Chrome, също взема контрол на задръстванията в свои ръце и прилага съвременен контрол на задръстванията. Той предлага много по-добра поносимост срещу загубени пакети по отношение на честотната лента, но има склонност към неблагоприятни ("гладуващи") TCP сесии на същата връзка.

Ние активно оценяваме тези различни подходи за контрол на задръстванията и вероятно ще използваме един от тях в базовия протокол Harmony.

Harmony ще въведе DCCP или QUIC контрол на задръстванията.

заключение

С това завършваме кратка обиколка около мрежовите технологии, на която основаваме нашия протокол Harmony. Мнозина от вас биха забелязали досега, че този преглед не представя роман, шестстранично изобретение, завършено с фантастична математическа формула или задълбочени разсъждения, а е по-скоро комбинация от съществуващи технологии, някои от които дори десетилетие или повече , Не може да се каже, че е толкова вълнуващо.

Това е правилно наблюдение и всъщност има причина: Тук, в Хармония, ние вярваме в прагматизма. Вярваме в това да стоим на раменете на гиганти, както правят повечето други в света на блокчейн и консенсус протоколи. Най-практично решение не трябва да бъде най-новите. Всъщност е точно обратното.

В Harmony вярваме в прагматизма и предишната мъдрост.

Вземете за пример мрежовата тъкан на Google за центрове за данни. Това е ново приложение на това нещо, наречено Clos network, чийто корен се простира чак до дните, в които телефонната мрежа се състоеше от кръстосана джунгла от тромави електромеханични превключватели. Както тези гигантски чудовища изпаднаха в полза, така и мрежата на Клос. Google обаче преоткри мрежата на Clos, когато търсеше жизнеспособна мрежа от центрове за данни, за да се справи с огромно количество мрежов трафик изток-запад; ето, ето, мрежата на Clos отново живее, този път в областта на модерните мрежи, комутирани с пакети.

Интернет също не е точно „ново нещо“. От създаването си в средата на 70-те години на миналия век в нея са преминали много изследвания и разработки, за да се превърне в едно от най-успешните иновации през последните 50 години. Не всички резултати от научноизследователска и развойна дейност видяха своя разцвет. Някои не успяха да получат значима инерция или сцепление; други имат приложението си ограничено до доста тясна област. Въпреки тези резултати обаче блясъкът, новостта и елегантността на тези по-стари изобретения все още продължават да се запазват и чакат да бъдат открити от хора със съответстващи нужди.

В Harmony също вярваме в това и се стремим да намерим обещаващи градивни елементи - не само в наши дни, но и в историческия архив на интернет технологиите, точно както Google откри този френски телефонен инженер и неговото 70-годишно изобретение ,