2013-02-17 7 views
18

Jeśli zapory ogniowe domyślnie blokują wszystkie przychodzące połączenia, jak działają technologie p2p? Podobnie jak w przypadku torrentów, w jaki sposób łączysz się ze wszystkimi, którzy współużytkują plik i pobierają od nich informacje? Czy przechodzi przez serwer przekazujący, czy coś takiego?Jeśli zapory sieciowe nie akceptują domyślnie połączeń przychodzących, jak działają sieci p2p?

+0

http://stackoverflow.com/questions/8523330/programming-p2p-application/8524609#8524609 – selbie

Odpowiedz

14

Nie mam wszystkiego na temat BitTorrenta, ponieważ jestem na temat ogólnych technik łączności P2P. Zazwyczaj klienci w sieci P2P spotykają się na wspólnym serwerze sygnalizacyjnym (np. SIP, XMPP, serwer śledzący, strona internetowa) w celu wymiany adresów IP, innych metadanych i komunikatów na bezpośrednie połączenia inicjujące. Następnie użyj jednej z następujących technik poniżej, aby uzyskać sesji komunikacyjnej dzieje:

  • Obie strony próbują połączyć ze sobą jednocześnie - w przypadku jednej strony nie może akceptować połączenia przychodzące, ale dopuszcza się wykonywanie połączeń wychodzących . Tak jest w przypadku scenariusza zapory ogniowej.

  • Dziurkowanie (używane w połączeniu z powyższym). Przekaźniki nie są wymagane jako takie, ale pomagają zapewnić łączność, gdy oba urządzenia równorzędne są za urządzeniami sieciowymi, które są trudne do przejścia. Dostępne są zarówno techniki UDP Hole Punching, jak i TCP Hole Punching. Więcej informacji here.

  • Przekaźniki, w tym TURN servers, mogą zostać wdrożone w sieci P2P, gdy bezpośrednie połączenie nie jest możliwe. Wszystkie Twoje ulubione aplikacje do połączeń wideo wykorzystują przekaźniki do tych scenariuszy, ale robią wszystko, aby uzyskać równorzędne połączenia, aby uniknąć kosztu przekazywania.

Bing dla następujących zagadnień: Ogłuszenie, kolei ICE (Interactive Connectivity Establishment), libjingle, pjnath, libnice.

+0

http://stackoverflow.com/questions/21501359/p2p-message-transfer-behind-firewalls-and-nat Czy możesz przeczytać te pytania i mi pomóc? –

+0

dla BT serwer sygnalizacyjny jest znany jako tracker. – bond

+0

Po pierwsze, trudno jest znaleźć dokumentację na ten temat. Masz rację, jeśli chodzi o drugi punkt, dziurkowanie, opisany w [Vuze DHT Additional Fetures] (https://wiki.vuze.com/w/Distributed_hash_table#Additional_Features) i oparty na koncepcji węzłów Rendez-Vous z [ Dokumentacja Vuze Swarm Discoveries] (https://wiki.vuze.com/w/Swarm_Discoveries#Introduction). Dla ostatniego punktu STUN/TURN jest [nie zaimplementowano, przynajmniej w Vuze] (http://vote.vuze.com/forums/170588-general/suggestions/3101012-implement-stun-t). – KrisWebDev

5

Jeśli zapora (w przeciwieństwie do NAT) zamierza blokować połączenia przychodzące (co, jak sądzę, normalnie robią), nic nie można z tym zrobić. Możesz wypróbować wszystkie dziurki, które chcesz. Osiąga się to po prostu zaimplementowaniu symetrycznego NAT, tj. Każdy otwór jest otwarty specjalnie dla ip, portu poczwórnego (źródło, port docelowy i IP).

BitTorrent prawdopodobnie przestanie działać tylko dlatego, że nie będzie w stanie odbierać połączeń przychodzących, po prostu będzie działać nieco gorzej. Możliwe, że w roju jest co najmniej kilka osób, które mogą odbierać połączenia, i po prostu się z nimi łączysz.

This to stare wyjaśnienie tego, że bycie zaporą oznacza po prostu gorszą wydajność.

EDIT:

Krótka odpowiedź na „dlaczego” jest to, że większość rówieśników nie są za zaporami (właśnie NAT).

+0

Czy możesz rozwinąć na http://bt.degreez.net/firewalled.html? Jak dostali ", że rówieśnicy z otwartymi portami otrzymują 2.4 razy więcej uwagi niż ci, których porty są zablokowane"? – Geremia

+0

, ponieważ będziesz mieć więcej połączeń peer (przynajmniej masz więcej potencjalnych połączeń peer), jeśli możesz odbierać próby połączeń przychodzących. Ta liczba nie ma zastosowania do rojów w ogóle, ale do ich przykładu w szczególności. – Arvid

+0

Wygląda na to, że liczba ta byłaby nieznacznie <2 w tym przypadku, a nie 2.4 (patrz [moja odpowiedź tutaj] (https://stackoverflow.com/a/48193512/1429450)). – Geremia

1

Dla potomności:

Krótka odpowiedź brzmi: to zrobić poprzez https://en.wikipedia.org/wiki/Hole_punching_(networking)

Po podłączeniu do google.com z komputera (który najprawdopodobniej siedzi z tyłu routera i NAT) swoich maszyn adres IP i NAT "numer portu jest wysyłany na serwery google. Google korzysta z tych informacji o połączeniu, aby przesyłać wyniki wyszukiwania na Twój komputer.

Możesz myśleć o serwerach google podobnych do jednego węzła w sieci p2p.Google było w stanie "dotrzeć" do ciebie z ich serwerów, nawet jeśli router nie akceptuje połączenia przychodzącego. Jest tak, ponieważ nie zainicjowały połączenia (nie znają kombinacji ip: NATedport, aby zainicjować połączenie). Ale twój komputer może nawiązywać połączenia wychodzące i wysyłać/publikować twoje ip: NATedport combo do zewnętrznego świata.

Tak więc oba węzły w p2p wysyłają swoje połączenie ip: NATedport na stronę osoby trzeciej i wymieniają te informacje i rozpoczynają łączenie (kto pierwszy dostarczył informacje) do siebie nawzajem.

0

Let
F = # zaporę węzły,
O = # węzły otwartego portu wejściowego,
T = F + O = Łączna liczba węzłów
P = O/T = ułamek wszystkich węzłów, które mają otwarte porty,
C F = max # połączeń zaporę każdy węzeł może mieć i
C O = max # połączeń każdy węzeł może mieć otwarty.

Następnie
C f = O, ∵ zaporę węzły mogą łączyć się tylko otwierać węzłów
C O = T - 1 ∵ otwarte węzły mogą połączyć się ze wszystkimi innymi węzłami (i gdy wszystkie zaporowe węzły po raz pierwszy się z nimi połączą)
tak
C O
/C F = (T - 1)/O = 1/P - 1/O.

Jeśli T jest duża,
C O/C F ≈ 1/P.

Załóżmy na przykład, że połowa węzłów ma otwarte porty wejściowe: P = ½. Następnie
C O/C F ≈ 2
co oznacza, że ​​otwarte węzły ~ 2 x liczba połączeń jako zaporę węzłów (co oznacza, że ​​są przeciążone, lecz także oznacza, że ​​więcej widoczność).

W ten sposób lepiej jest dla poszczególnych węzłów i dla całej sieci mieć P = 1; wszystkie węzły będą jednakowo widoczne i równie obciążone.

Jeśli P = 0, sieć nie będzie działać ∵ nikt nie będzie mógł inicjować połączeń z innymi urządzeniami równorzędnymi.

Powiązane problemy