Кіріспе

Gnutella2, көбінесе G2 деп аталады, 2002 жылы Майкл Стоукспен негізінен әзірленген және шығарылған, теңдестірілген желі протоколы. G2 протоколы gnutella протоколынан шабыттанғанмен, байланыс құру рәсімі мен жүктеу механизмінен басқа, оның дизайнынан көп нәрсе ұқсамайды. G2 кеңейтілген екілік пакет форматын және жаңа іздеу алгоритмін қолданады. Бұдан әрі, G2 байланысты (бірақ едәуір өзгеше) желі топологиясына және жақсартылған метадеректер жүйесіне ие, бұл желідегі вирустар сияқты жалған файлдарды тиімді түрде азайтуға көмектеседі.

Тарих

2002 жылдың қараша айында Майкл Стоукс Gnutella2 протоколын Gnutella Developers Forum-да жариялады. Кейбіреулер Gnutella2-нің мақсаттары gnutella 0.6 протоколымен толық ажырасып, жаңадан бастауға бағытталған, соның арқасында gnutella-ның нашар бөліктері жақсартылып, жалпы түрде әсерлі әрі тартымды болатынын айтты. Ал басқа әзірлеушілер, әсіресе LimeWire және BearShare өкілдері, мұны "арзан жарнамалық әрекет" деп санай отырып, техникалық жетістіктерін мойындамады. Кейбіреулер әлі де бұл желіні "Gnutella2" деп атамай, "Майк протоколы" ("MP") деп атайды. Gnutella2 протоколы өзінің қосылыстары үшін әлі де ескі "GNUTELLA CONNECT/0.6" қол алысу тізбегін пайдаланады. G2 көптеген "ескі" gnutella желі клиенттерімен үйлесімді емес, бірақ көптеген Gnutella2 клиенттері gnutella желісіне де қосылады. Көптеген Gnutella2 қолдаушылары мұның саяси себептерге байланысты екенін алға тартады, ал gnutella қолдаушылары күрт өзгерістердің терең қайта жазу шығындарын ақтайтын жеткілікті мәні жоқ екенін мәлімдейді.

Дизайн

Gnutella2 түйіндерді екі топқа бөледі: Жапырақтар және Хабтар. Көптеген Жапырақтар Хабтарға екі байланыс орнатады, ал Хабтар жүздеген Жапырақ байланыстарын және орташа есеппен басқа Хабтарға 7 байланысты қабылдайды. Іздеу басталған кезде, қажет болса, түйін Хабтар тізімін алады және тізімдегі Хабтармен байланысады, тізім толыққанша немесе алдын ала белгіленген іздеу шегіне жеткенше іздеу жүргізілгенін еске алады. Бұл пайдаланушыға желіге артық жүктеме салмай танымал файлды оңай табуға мүмкіндік береді, сонымен қатар теориялық тұрғыдан алғанда, пайдаланушыға желіде кез келген жерде орналасқан бір файлды табу мүмкіндігін сақтайды. Хабтар Жапырақтардағы қандай файлдар бар екенін Query Routing Table (сұрау маршруттау кестесі) арқылы индекстейді, ол Жапырақ Хабқа жүктейтін кілт сөздердің хэштерінің бір биттік жазбаларымен толтырылады, содан кейін Хаб оны өзінің Жапырақтарынан алынған барлық хэш-кестелермен біріктіріп, көрші Хабтарға жіберу үшін нұсқасын жасайды. Бұл Хабтарға іздеуге сәйкес келетін жазбалар маршруттау кестелерінде табылмайтын жағдайда, Жапырақтар мен көрші Хабтарға сұрауларды жібермеу арқылы өткізу қабілетін азайтуға мүмкіндік береді. Gnutella2 іздеу үшін TCP емес, UDP-ге негізделген. TCP қосылымын орнатуға кеткен қосымша шығын, кішкентай көлемдегі деректермен көптеген түйіндерге байланыс орнатуды қажет ететін кездейсоқ іздеу жүйесін тиімсіз етеді. Дегенмен, UDP-нің де өз кемшіліктері бар. UDP қосылымсыз болғандықтан, хабарды жіберген клиентке хабардың қабылданғанын хабарлаудың стандартты тәсілі жоқ, сондықтан пакет жоғалса, оны білуге болмайды. Осы себепті Gnutella2-дегі UDP пакеттерінде сенімділікті қосу үшін жалауша бар. Сенімділік белгісі қосылған UDP пакеті қабылданғанда, клиент жіберуші клиентке пакеттің мақсатқа жеткенін хабарлау үшін растау пакетімен жауап береді. Егер растау пакеті жіберілмесе, сенімді пакеті жеткізілуін қамтамасыз ету үшін қайта жіберіледі. Маңыздылығы төмен пакеттерге, жалауша қосылмаған жағдайда, растау пакеті қажет емес, бұл сенімділікті төмендетіп, сонымен қатар жүктемені азайтады, себебі растау пакетін жіберу және күту қажет болмайды.

Хаттаманың ерекшеліктері

Gnutella2 кеңейтілген бинарлық пакет форматына ие, оны XML құжат ағашымен салыстыруға болады, және ол Gnutella-ның кейбір жетілмеген бөліктеріне жауап ретінде жасалған. Пакет форматы желідегі басқа клиенттерде қателер тудырмау үшін болашақ желілік жақсартулар мен жеке дамытушылардың мүмкіндіктерін қосуға мүмкіндік беру үшін жобаланған. Файлдарды анықтау және олардың қауіпсіздігін тексеру үшін SHA-1 хэштері қолданылады. Файлдың бірнеше көзден параллель жүктелуін қамтамасыз ету үшін, сондай-ақ файл жүктеліп жатқан кезде бөліктерді сенімді жүктеуге (жұрттану) мүмкіндік беру үшін Tiger tree хэштері пайдаланылады. Іздеу жүйесін одан да берік және толық ету үшін Gnutella2 файл аттарынан ғана алынғаннан гөрі, іздеу нәтижелерінде толықрақ белгілеу, бағалау және сапа туралы ақпарат беруге арналған метадеректер жүйесіне ие. Түйіндер осы ақпаратты файлды жойғаннан кейін де бөлісе алады, бұл пайдаланушыларға желідегі вирустар мен зиянды бағдарламаларды белгілеуге, олардың көшірмесін сақталмай мүмкіндік береді. Gnutella2 желіде қолданылатын өткізу қабілетін азайту үшін желілік байланыстарында сығымдалуды қолданады. Қосымша кеңейтулерге /Q2/I-дегі "A" жолы және сұраныс нәтижелерінде /QH2/H/ALT, /QH2/H/PART/MT, /QH2/HN, /QH2/BH және /QH2/G1 енгізілуі кіреді.

Гнутелладан айырмашылығы

Жалпы алғанда, екі желі де шамалы ғана ерекшеленеді, басты айырмашылықтар пакет форматында және іздеу әдістемесінде.

Хаттама

Gnutella пакеттерінің форматы сынға ұшырады, себебі ол бастапқыда кеңейтілу мүмкіндігін ескере отырып жасалмаған. Содан бері жылдар бойы көптеген қосымшалар енгізілді, нәтижесінде пакеттік құрылым шатасып, тиімсіз болып қалды. Gnutella2 мұнан сабақ алды және Gnutella стандартының көптеген қосымша мүмкіндіктерін Gnutella2-ге енгізумен қатар, бастапқыда болашақта кеңейтуге мүмкіндік беретіндей етіп жобаланды.

Іздеу алгоритмі

Gnutella сұранысты тарату әдісін пайдаланса, Gnutella2 кездейсоқ іздеу жүйесін қолданады, онда іздеу торабы Хабтар тізімін жинап, бірінен соң бірі тікелей байланысады. Дегенмен, Хабтар «Хаб кластерлері» деп аталатын өзіндік құрылымдарға бірігіп, әр Хаб көршілері сақтаған мәліметтерді көшіріп алады. Сондықтан, Лифке бүкіл Хаб кластерінің ақпараты (әдетте 7 Хаб) қайтарылады. Бұл, Gnutella сұранысты тарату жүйесімен салыстырғанда бірнеше артықшылықтар береді. Ол тиімдірек, себебі іздеуді жалғастыру желі трафигін үрделді түрде арттырмайды, сұраныстар көптеген түйіндер арқылы жолданбайды және іздеудің нақтылығын арттырады, бұл клиентке белгілі бір нәтижелер саны алынғаннан кейін іздеуді тоқтатуға мүмкіндік береді, Gnutella-дағыдан гөрі тиімдірек. Алайда, кездейсоқ іздеу жүйесі желінің күрделілігін де арттырады, сондай-ақ желіні күтіп-жөндеу және басқару қажеттілігін күшейтеді, және зиянды шабуылшының желіні қызметтен шығаруға бағытталған шабуылдар жасауына жол бермеу үшін қауіпсіздік шараларын талап етеді.

Терминология

Терминологияда да айырмашылық бар: желіні жинақтау үшін қолданылатын, күшті мүмкіндіктерге ие тораптар gnutella желісінде Ultrapeers деп, ал Gnutella2 желісінде Hubs деп аталады, сондай-ақ топологияда олардың қолданылуы да сәл өзгеше. Gnutella желісінде Ultrapeers көбінесе теңдес байланыстармен шамалас көптеген жапырақтарды сақтайды, ал Gnutella2 Hubs әлдеқайда көп жапырақтарды, бірақ азырақ теңдес (Hub to Hub) байланыстарын сақтайды. Бұл айырмашылықтың себебі әртүрлі желілердің іздеу әдістеріне сәйкес келетін әртүрлі ең тиімді топологиялардың болуында.