Линукс. Gnutella&Freenet Печат
Петък, 02 Март 2012 07:29

Gnutella и Freenet: Новите виртуални същества на Мрежата

Целта на проектите Gnutella и Freenet е информацията в Интернет да приеме форма наподобяваща самата мрежа, в която се намира - неуязвима, децентрализирана и свободно достъпна.


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

Мрежа в мрежата

Интернет се състои от милиони свързани компютри, като най-разпространеният принцип на комуникация е client - server. Програмите на Gnutella и Freenet могат да бъдат разгледани като комбинация от client и server, защото извършват равнопоставен (peer-to-peer) трансфер на данни в двете посоки. За да има съгласуваност, тази комбинация от клиент и сървър ще бъде просто наричана клиент в настоящия материал. Главната идея тук е клиентите да бъдат равноправни и да следват едни прости правила за взаимна комуникация, което да им позволи да изградят една комплексна и солидна мрежа, независима от отделния клиент. По този начин клиентите на GnutellaNet и Freenet сформират две своеобразни мрежи в свръх-мрежата на Интернет.

Gnutella и Freenet се крепят на два сравнително прости протокола, чиито спесификации са свободно достъпни. Тази "отвореност" позволява всеки желаещ да се заеме с разработката на собствени клиенти.

Протоколите са изградени така, че те да бъдат слабо обвързани с операционната система, под която работят. Gnutella има разработени клиенти както за различните варианти на Unix, така и за Windows и Macintosh. Оригиналният Freenet клиент пък е написан на Java, и може да работи на всеки компютър с инсталиран Java Runtime Environment 1.1. Тези качества ускоряват разпространението на мрежите на Gnutella и Freenet, и същевременно ги правят независими от отделни компании, операционни системи и стандарти.

По цели и изпълнение Gnutella и Freenet имат както общи допирни точки, така и някои съществени разлики, които ги отличават един от друг. Чрез този материал ще се опитам да опиша техните основни механизми на действие и съществуващите недостатъци. Проектите обаче се развиват много бързо и се работи усилено по решаването на проблемите. Двата проекта предлагат интересни технически възможности, и аз ще се спра също така накратко на тяхното значение за по-нататъшното развитие на Интернет.

Предистория на проектите

Gnutella стартира преди няколко години като идея на Nullsoft, която е дъщерна компания на Americal Online (AOL). Проектът се развива много добре, но бива спрян в алфа версия след като AOL разбира, че бъдещият продукт може успешно да бъде използван за пиратска дейност. Възможно е това решение да е повлияно и от последвалото обединение на AOL с мултимедийната компания Time Warner. Но дори след прекъсването на проекта идеята продължава да живее. Няколко програмисти успяват да възпроизведат протокола и стартират нов проект за доразработване на софтуера. Твърди се, че никой от създателите на сегашната Gnutella не е ползвал първоначалния код на Nullsoft.

Разработката на Freenet започва с дипломната работа на Ian Clarke като студент по информатика в университета на Единбърг, Шотландия. След завършването си през 1999, Ian работи в софтуерния бизнес, като през свободното си време той и други доброволци работят над проекта. Freenet се намира под лиценза GPL и в момента е все още в ранна версия. Въпреки това досега са били разпространени около 35000 копия на програмата чрез сайта на Freenet.

Хоризонти в GnutellaNet

Със създаването на ARPANET и така до наши дни, информацията остава тясно свързана с отделния сървър, където тя се намира. За да получим търсения файл, било то текст, програма, изображение или пък mp3, на нас ни е нужен точния URL на сървъра. Два от най-разпостранените протоколи, HTTP и FTP, ползват точно този "адресен" метод за достигане до нужната ни информация.

С лавинообразното увеличаване на компютрите свързани към Интернет нарастна и количеството информация предоставена на тях. Това от своя страна доведе до появата на търсачки и директории от типа на Yahoo, които да улеснят намирането на адресите на компютрите с желаната от нас информация. Услугите предоставяни от търсачките и директориите са толкова ценени, че сайтове от типа на Yahoo са най-посещаваните в Интернет. Те обаче имат и своите недостатъци - broken links, претовареност на сървъра, множество реклами и напоследък някои от тях дори станаха мишени на тъй наречените denial-of-service атаки. Има също така и потребители, които спекулират, че търсачките преследват чисто комерсиални цели, предоставяйки нарочно "филтрирана" информация и трупайки log файлове за дейността на посетителите.

Какви са възможните алтернативи?

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

Всеки желаещ да се присъедини към GnutellaNet може свободно да инсталира клиент на собствения си компютър. След това той трябва да се спре на следните три неща:

  • да реши каква информация да предостави за ползване в мрежата; тези файлове се поставят в определена от самия него директория.
  • да определи по какъв начин тя да бъде претърсвана, когато пристигне запитване; тук той има пълна свобода да реши как ще се извършва това - fgrep, SQL query, и т.н.
  • да намери няколко "съседи", които също така ползват клиенти на Gnutella; чрез тях се осъществява връзката с останлата част на GnutellaNet.

Както беше споменато, всеки Gnutella клиент разполага с таблица на други клиенти "съседи" (подобно на IP routing table), с които пряко поддържа връзка. Тук трябва да бъде отбелязано, че географското положение на "съседите" е без значение. Съсед може да бъде както клиент на същия LAN, така и клиент на другия край на света. Собственикът на отделния клиент сам определя с колко и с кои други Gnutella клиенти да комуницира. По принцип броят на съседите зависи от капацитета на връзката към Интернет, два три такива са достатъчни.

Всеки клиент може да участва в търсенето и предоставянето на информация. Начинът е следния:

Клиентът, който търси информация изпраща запитване до всички негови съседи едновременно. Когато клиент получи запитване, той от своя страна препраща запитването до собствените си съседи, а те по-нататък. Същевременно всеки клиент получил запитване претърсва "склада" си. Ако той прецени, че разполага с търсеното, информацията се препраща обратно от клиент на клиент докато достигне до този, който е подал запитването. Върнатата информация може да бъде URL или файл.

Паралелният характер на търсенето може да генерира огромно количество запитвания (това е геометрична прогресия!) и евентуално да наводни мрежата. За да се избегне това явление, всяко запитване има уникален идентификационен номер и ограничен живот. Идентификационния номер предотвратява повторното преминаване на едно и също запитване през даден клиент. Всяко препращане пък отнема от живота на съответното запитване докато то стане невалидно и умре. Можем да си представим, че всеки клиент има определен хоризонт, до който може да достигне. Този хоризонт зависи от топологията на околната Gnutella мрежа и от живота на запитването. Един такъв хоризонт обхваща от няколко хиляди до няколко десетки хиляди клиенти.

Какво може да се каже за предимствата и нодостатъците на GnutellaNet?

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

Наличието на "хоризонти" е едно доста противоречиво качество. От една страна то е недостатък, защото информацията, която търсим може да остане отвъд хоризонта. От друга страна хоризонтът увеличава надежността на GnutellaNet като цяло. Досега са били правени опити за атака срещу мрежата чрез изпращане на запитвания с много дълъг живот, или пък изпращането на огромен брой такива. Една такава атака може да предизвика претоварване на околните клиенти и тяхното изпадане от мрежата. Това в същото време локализира атаката, защото отказалите клиенти блокират нейното по-нататъшно разрастване.

Засега обаче все още се работи по изграждането на ефективни механизми за защита. Възможно е те да включват интелигентни алгоритми, които да "убиват" запитвания със съмнително дълъг живот, или да затварят временно връзките, през които пристига опасен трафик.

Логично е да си представим, че със своите качества GnutellaNet предоставя отличен канал за разпространяване на нелинцензирана информация, като mp3 файлове например. Засега за тези цели се използват предимно HTTP, FTP или Napster сървъри. Тяхната цетрализираност и липса на анономност обаче ги прави лесно уязвими, когато се стигне до съдебни заплахи, блокиране с филтри и нареждания за затваряне. Появата на GnutellaNet обаче ще причини много повече трудности за музикалните компании и властите - тук участниците са твърде много и е почти невъзможно трафикът на информация да бъде следен и контролиран.

Freenet - една почти перфeктна анархия?

В материала описващ архитектурата на Freenet, Ian Clarke ясно подчертава главната цел на неговото творение - създаването на само-адаптираща се мрежа, където информацията да може да са разпространява без цетрализиран контрол и опасност от цензура.

Какви са мотивите, които той посочва? Според него значението на Интернет за предаване на информация е нарастнало неимоверно много, ала в същото време няма достатъчни гаранции за сигурност и анонимност, особено когато те биват изискани. В това отношение Freenet представлява една още по-радикална идея от GnutellaNet.

Freenet също така е базиран на множество едноправни клиенти свързани помежду си. Отново всеки клиент предоставя пространство за складиране на информация и поддържа пряка връзка с няколко Freenet съседи. С това обаче приликите с Gnutella се изчерпват.

Документите се съхраняват под формата на кодирани файлове, като всеки файл има собствен уникален "ключ". Ключът (нещо като URL) представлява кратък идентификатор на документа и е също така кодиран. Връзката между документ и ключ се извършва от специална hash-функция. Както документа, така и ключа се съхраняват в складовото пространство на някой клиент. Фактът, че и двата са кодирани има много интересни законови последици. Собственикът на даден клиент не можа да бъде подведен под отговорност за съдържанието на файла, защото той от пръв поглед не може да бъде запознат с него.

Как става търсенето на даден документ?

Ползвателят, подал запитване трябва да зададе точния идентификатор на документа, така че клиентът да възпроизведе съответния ключ. След това клиентът изпраща запитване до своите съседи, а те го препращат по нататък до намирането на съответния документ. За разлика от Gnutella, търсенето във Freenet протича много по-контролирано, използвайки линеен алгоритъм и система за следене статуса на запитването.

Когато документът бъде намерен се стартира процес по доставката му до клиента подал запитването. Този процес използва принципите на кеширане (cashing) и насочване (routing). След като документът бъде открит, той бива препратен обратно от клиент на клиент, като по пътя бива кеширан от отделните клиенти. Тъй като отделният клиент има ограничено складово пространство, той запазва копия само на най-последните документи, а по- старите биват изтривани. Този транспортен механизъм е може би най-фундаменталната черта на Freenet, която води до следните забележителни ефекти:

  • най-търсените документи имат най-много разпространени копия из мрежата; това многократно ускорява тяхното намиране и получаване.
  • документите постепенно мигрират в районите на Freenet, където те са най-търсени; това пести капацитета на мрежата.
  • тези документи, които не представляват интерес, постепенно изчезват; това освобождата мрежата от ненужните "трупове".
  • невъзможно е да се определи броят и местоположението на копията на даден документ.

Вкарването на нов документ във Freenet може да се извърши през който и да е клиент, като съществува механизъм, които да възпрепятства замяната на съществуващ документ с фалшиво копие. Този механизъм извършва запитване дали същия ключ и съответен документ вече съществуват. Само ако отговорът е отрицателен, документът може да бъде вкаран в мрежата.

Конспирацията във Freenet може да бъде пълна. Информацията се придвижва наоколо в кодирана форма и макар и тя да бъде разшифрована, трафикът в целия си обем трудно може да бъде следен. Източникът и ползвателите пък имат възможност да запазят високо ниво на анонимност. Както бе споменато, във Freenet дори не може да бъде направена разлика между търсене и вкарване на информация.

Най-голямото ограничение на Freenet се състои в търсенето на информация. Този, който иска да достигне до даден документ трябва да знае точния му идентификатор, в противен случай търсеният ключ и документа няма да си съвпаднат. Също така все още не съществува механизъм за подновяване на остаряли документи с по-нови версии.

Някои автори вече сравниха Freenet с една почти съвършена машинна анархия - мрежа без централен контрол, липсваща йерархична структура и с шифровани канали за предаване на информация. Съществуват опасения, че Freenet е нож с две остриета и може да бъде използван за нелегални цели от софтуерни пирати, кракери, криминални групи и политически движения. Ian Clarke в едно свое интервю се опитва да погледне по-обективно на създалото се положение. Според него като цяло информацията е трудно да бъде класифицирана, и следователно трябва да се предава свободно и без цензура. Дали това не е отговор към правителствата и определени компании, които се опитват да сложат ред в Интернет?

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