Protokół Gnutella

0

Witam forumowiczów,

Czy ktoś miał styczność z implementacją protokołu Gnutella? A może jest wśród Was ekspert z tej dziedziny?
Mam kilka pytań i zainteresowanych pomocą proszę o kontakt.

0

Implementacja Gnutelli jest np w BearShare, LimeWire, Shareazie - z nimi pewnie dużo ludzi się zetknęło. Gnutella ma tak dużo własnościowych rozszerzeń że stworzenie własnego w miarę działającego programu wymaga nie lada cierpliwości.

0

Dzięki za odpowiedź, chodzi mi konkretnie o zasadę tworzenia połączeń w tym protokole i routing wiadomości. Czy orientujesz się w tym temacie?

0

Słabo się orientuję. Kiedyś interesowałem się Shareazą, ale już dawno jej nie używam.

Gnutella jest oparta na HTTP + dodatkowe nagłówki. Połączenia to Handshaking, podczas którego węzły ustalają jaką wersją protokołu są w stanie używać. Routingu chyba jako takiego nie ma, przynajmniej w podstawowej wersji, podczas szukania superwęzeł wysyła żądanie do wszystkich innych superwęzłów do których jest podłączony, nieważne czy są 1 km dalej czy 1000 km dalej i czy pingi to 1 ms czy 1000 ms, szukanie po prostu kończy się po iluś tam hopkach. W wynikach dostajesz ipki klientów, a to już oczywiste że routing w TCP/IP jest "w standardzie".

Gnutella2 jest chyba lepiej zaprojektowana, zwłaszcza nie uwzględniając własnościowych rozszerzeń klientów Gnutelli. W Gnutelli2 wyszukiwanie odbywa się inaczej - samemu trzeba odpytywać kolejne huby, których adresy dostajemy przy okazji różnych czynności, także samego szukania.

0

Masz rację, samo przesyłanie danych odbywa się za pomocą protokołu HTTP. Inaczej jednak jest z rozpoznawaniem struktury sieci (komunikaty ping i pong) i wyszukiwaniem plików (komunikaty query i queryHit).
Interesuje mnie na przykład to, czy kiedy klient sieci wysyła query do jakiegokolwiek innego hosta to czy ten pierwszy musi oczekiwać aż zdalny host odbierze odpowiedzi (queryHit) od innych użytkowników sieci?(query musi być przekazywane dalej do innych hostów w sieci n razy) Czy wszytko (wysłanie zapytanie i otrzymanie kompletnej odpowiedzi, w międzyczasie forwardowanie wiadomości przez zdalnego hosta) odbywa się w ciągu jednego send-receive z perspektywy klienta wysyłającego query. Czy może klient wysyłający query otrzymuje odpowiedź od zdalnego hosta przy innej okazji a w przeciągu tego jednego send-receive odpowiada komunikatem queryHit dotyczącym tylko jego. Ten pierwszy przypadek, kiedy wszstko odbywa się jednego send-receive (z perspektywy klienta inicjującego), sprawia, że ze komunikacja na tym połączeniu może zostać zawieszona na znaczny czas. I to jest moja zagwozdka, jak odbywa sie forwardowanie i routing fizycznie.

Mam nadzieję, że to co napisałem jest choć trochę zrozumiałe :)

0

Mam wrażenie że oboje słabo się w to zagłębialiśmy ;p

Wg mnie szukanie odbywa się asynchronicznie. Tzn pusza się zapytania dalej i od razu przechodzi do innych czynności (pomijając czynności zapobiegające odpalaniu tego samego zapytania kilka razy na tym samym węźle). Jeśli dobrze pamiętam to przy szukaniu w Gnutelli to nawet po zamknięciu Shareazy odbierałem odpowiedzi na szukanie nawet chwilę po zamknięciu Shareazy czyli że węzły posiadające interesujące same łączyły się ze mną aby mnie o tym powiadomić. Z drugiej strony nie jestem tego pewien, bo w takim przypadku ta sieć w ogóle nie działałaby za firewallem. Możliwe że jest to trochę pomieszane, tzn superwęzły przechowują cześć informacji i od razu zwracają, a reszta jest przekazywana poprzez kolejne połączenia.

W zasadzie to może już nie będę tu pisał bo jeszcze wprowadzę Cię w błąd ;]

0

Problem w tym, że przeczytałem protokół Gnutelli i nie znalazłem o tym wzmianki. Jest info o tym, że komunikaty są przekazywane dalej ale nie ma informacji o tym, jak fizycznie jest to realizowane. Przemyślę Twoją sugestie o przesyłaniu asynchronicznym....
Tymczasem chyba masz rację, że obaj nie jesteśmy kompetentni.

Dzięki za dyskusję. Jak dojdę jak to z tym jest to napiszę na forum.

1 użytkowników online, w tym zalogowanych: 0, gości: 1