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?
Odpowiedz
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.
http://stackoverflow.com/questions/21501359/p2p-message-transfer-behind-firewalls-and-nat Czy możesz przeczytać te pytania i mi pomóc? –
dla BT serwer sygnalizacyjny jest znany jako tracker. – bond
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
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).
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
, 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
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
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.
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.
- 1. VisualVM przez zapory sieciowe - rozwiązywanie problemów z RMI
- 2. boost :: asio: Jak używać async_accept do akceptowania połączeń przychodzących?
- 3. spada połączeń z tcp_tw_recycle
- 4. WebRTC P2P - Aktualizacja
- 5. .NET i P2P - pisanie komunikatora P2P
- 6. Jak serwery HTTP akceptują Telnet
- 7. Projektowanie/architektura: gniazdo sieciowe jedno połączenie a wiele połączeń
- 8. Zasady Kafki i zapory
- 9. Jak działają pojemności kontenerów Docker, nawet jeśli nie są uruchomione?
- 10. Zamknij wszystkie podstawowe połączenia sieciowe
- 11. biblioteka wideo java p2p?
- 12. Jak wyłączyć/włączyć połączenie sieciowe w C#
- 13. C++ i voIP używające P2P
- 14. Rejestracja BroadcastReceiver przychodzących SMS
- 15. jeśli element div ma domyślnie szerokość 100%
- 16. Rozwiązanie P2P do wideokonferencji internetowych
- 17. Symulacja ruchu sieciowego p2p na jednym komputerze
- 18. Czy mogę napisać programy sieciowe oparte na sieci Ethernet w C++?
- 19. Convert.ToBoolean i Boolean.Parse nie akceptują 0 i 1
- 20. Jak wykryć, czy produkt zapory jest włączony?
- 21. Konfiguracja odpytywania przychodzących plików Mule
- 22. Jak anulować żądania sieciowe z afnetworking
- 23. Jak symulować łącze sieciowe 30 Kb/s
- 24. Android - Słuchaj przychodzących wiadomości SMS
- 25. ASP.NET MVC i usługi sieciowe
- 26. Usługi sieciowe SOAP w Haskell?
- 27. Jak domyślnie sortować malejąco domyślnie jQuery Tablesorter?
- 28. Arbiter nie akceptuje połączeń
- 29. Sprawdź połączenie sieciowe android
- 30. W jaki sposób aplikacje P2P znajdują inne węzły?
http://stackoverflow.com/questions/8523330/programming-p2p-application/8524609#8524609 – selbie