Jak działa peer-to-peer przez Internet?

15

Z tego, co rozumiem, nie ma sposobu, aby wysłać pakiet do komputera w sieci lokalnej spoza sieci, chyba że znamy mechanizm routingu wykorzystywany przez router.

Zakładając, że mamy konfigurację, która wygląda następująco:

  1. Komputer-A, IP 192.168.1.2 (brama domyślna 192.168.1.1)

  2. Komputer-B, IP 192.168.1.3 (brama domyślna 192.168.1.1)

  3. Router-C, IP 192.168.1.1 (zewnętrzny IP 1.1.1.1)

  4. Router D (zewnętrzny adres IP 2.2.2.2)

Komputer-A, Komputer-B i Router-C należą do tej samej sieci lokalnej. Router-D chce wysłać dane do komputera-A, ale nie może tego zrobić bez przejścia przez router-C.

Teraz Router-C przekieruje pakiety na Komputer-A, jeśli port docelowy to 1000, i przekieruje pakiety na Komputer-B, jeśli port docelowy to 2000. Ale na pewno jedynym urządzeniem, które zna ten mechanizm routingu, jest sam Router-C! Nawet komputer A ani komputer B nie będą o tym wiedzieć, prawda?

Router-D może więc wysłać pakiet do komputera-A, jeśli wysyła pakiet do routera-C przez port 1000, ale skąd router-D ma wiedzieć, że wysyła pakiety przez port 1000, a nie powiedzieć port 1001?

W jaki sposób programy peer-to-peer, takie jak Bittorrent, przechodzą ten problem? Jedyne rozwiązanie, jakie mogę wymyślić, to wysłanie pakietu przez router D do routera C przez wszystkie porty, tak aby został on przekazany do komputera A, ale czy istnieje lepsze rozwiązanie?

Pacerier
źródło

Odpowiedzi:

9

Twoje zamieszanie wynika z niektórych błędnych założeń.

Ale z pewnością jedynym urządzeniem, które zna ten mechanizm routingu, jest sam Router-C! Nawet komputer A ani komputer B nie będą o tym wiedzieć, prawda?

Co, dlaczego? Dlaczego router został skonfigurowany do przekazywania tych portów do tych adresów IP? Musisz skonfigurować klienta P2P, aby korzystał z określonego portu, a następnie odpowiednio skonfigurować router.

ale skąd Router-D ma wiedzieć, że wysyła pakiety przez port 1000, a nie powiedzieć port 1001?

Ponieważ konfigurujesz klienta P2P, aby używał określonego portu (standardowego lub niestandardowego dla tego protokołu).

Jedyne rozwiązanie, jakie mogę wymyślić, to wysłanie pakietu przez Router-D do Routera-C przez wszystkie porty, tak aby został on przekazany do komputera A, ale czy istnieje lepsze rozwiązanie?

To jest o wiele prostsze. Kiedy klient nawiązuje połączenie z peerem, określa port, którego chce użyć, więc peer wysyła dane przez ten port.

Hmm, ale Bittorrent nie zmienia zachowania routera, prawda? Ponieważ niektóre mechanizmy routingu mogły być dynamiczne, jak wykazano w superuser.com/a/187190/78897, w jaki sposób Computer-A może o tym wiedzieć?

Klient nie wpływa bezpośrednio na router, ale router można skonfigurować / na tyle inteligentnie, aby dostosować się do zachowania klienta. Możesz włączyć UPnP zarówno w routerze, jak i kliencie, aby automatycznie konfigurować połączenie, a większość routerów ma możliwość kontroli stanowej w ramach mechanizmu przekierowania portów .

Podsumowując, oznacza to, że połączenie może być dynamicznie nawiązywane na losowym porcie, a następnie router może śledzić, co się dzieje, zamiast postrzegać wszystko jako przypadkowe, pozbawione znaczenia połączenia. W ten sposób może przekazać połączenie w razie potrzeby, ponieważ na przykład jest odpowiedzią na to drugie połączenie, które właśnie się wydarzyło .

Problem pojawia się, gdy masz wiele systemów korzystających z tego samego programu. Posiadanie wielu systemów podłączonych do tego samego routera, współużytkowanie tego samego adresu IP i korzystanie z dynamicznych portów szybko staje się niemożliwe do zarządzania, a nawet przy stanowej inspekcji, trudno jest, jeśli nie niemożliwe, prawidłowe działanie. W takim przypadku konieczne będzie użycie portów statycznych (domyślnych lub innych).


Jeśli do monitorowania połączeń używasz programu takiego jak SmartSniff lub TCPView , zauważysz, że połączenia P2P zwykle mają skonfigurowany port (lub domyślny dla klienta) jako miejsce docelowe połączeń przychodzących oraz domyślny lub niestandardowy / losowy port dla źródła i odwrotnie dla połączeń wychodzących.

Synetech
źródło
Hmm, ale Bittorrent nie zmienia zachowania routera, prawda? Ponieważ niektóre mechanizmy routingu mogły być dynamiczne, jak wykazano w superuser.com/a/187190/78897 , w jaki sposób Computer-A może o tym wiedzieć?
Pacerier
Przekazywanie portów. Skonfigurowałeś to wcześniej.
UtahJarhead
@Pacerier Jeśli zarówno router, jak i aplikacja p2p korzystają z UPnP , przekierowanie portów można wykonać dynamicznie. W takim przypadku tak Bittorrent nie zmienia zachowania routera.
zero2cx
@ zero2cx, czy istnieje sposób na połączenie peer-to-peer bez zmiany zachowania routera?
Pacerier
@Pacerier, jeśli chcesz mieć NAT (wiele systemów udostępniania połączenia), to musi jakoś skonfigurować router, aby wiedzieć, gdzie do nawiązywania połączeń (dobrze, technicznie Państwo mogli po prostu wszyscy wyrzucają każdego połączenia do wszystkich portów jak pan sugeruje, ale to byłoby w najlepszym razie okropne). Możesz to zrobić statycznie (konfigurować adresy IP i porty) lub dynamicznie (UPnP).
Synetech,
4

Twoje pytanie dotyka serca Internetu i samej definicji routingu. W twoim przykładzie router D wysyła dane do komputera A na podstawie dwóch przesłanek:

  • Powiedziano mu, aby wysyłać dane do komputera A.
  • To już przetworzone dane z komputera A.

Wydaje się, że twój scenariusz zakłada pierwszą opcję - router D chce wysłać do komputera A. Ale jak się tam dostanie? Odbywa się to za pomocą tabel routingu, które są udostępniane między routerami.

Router C regularnie wysyła aktualizacje do wszystkich routerów, w których wie - łącznie z routerem D - że „zna” sieć „192.168. *” (W rzeczywistości - tak się nie stanie, ponieważ ta sieć nie jest routowana - jest uważana za prywatną. zignoruj ​​to.) Router D już wie, że router C zna tę sieć.

Kiedy dane są przeznaczone dla komputera A, adresowane są najpierw przez sieć. Router D pyta: „Muszę znaleźć sieć 192.168. *. Czy ja to wiem? Nie. Czy znam kogoś, kto to robi? Tak. Router C wie. Jak dostać się do routera C? Przez mój 2.2. Interfejs 2.2 ”.

Następnie router D wysyła dane do routera C. Router C pobiera je i mówi: „Och, mam dane z routera D, ale dotyczy to sieci 192.168. Czy znam tę sieć? Tak, przez moją sieć 192.168.1.1” przekazuje to.

Jest jeszcze trochę pracy do rozwiązania w kwestii adresowania IP i MAC, ale omawiam routing jako taki, a nie ARP i sieci lokalne.

Zauważysz swoje pierwsze założenie - router zdalny musi znać mechanizm routingu - tutaj nie wchodzi w grę. Router D nie dba o to, czy router C korzysta z EIGRP, RIP, RIPv2, OSPF lub cokolwiek innego. Wszystko zależy od tego, żeby dostał aktualizację. (Oczywiście sposób, w jaki otrzymano aktualizację, jest ważny, aby zapewnić synchronizację między nimi. Ale znowu, to inny problem.)

Drugie założenie - że numer portu jest czynnikiem wpływającym na routing - jest również nieprawidłowe. Routery (ogólnie) nie potrzebują informacji o porcie, aby podejmować decyzje dotyczące routingu. (To się nieznacznie zmieniło z powodu niektórych nowych technologii sieciowych i dotyczy głównie zapór ogniowych i serwerów proxy, ale nadal szersze założenie nadal dotyczy „prawdziwych” routerów.)

Kontynuując twój przykład, router C przekaże dane na porcie 1000 (zgodnie ze scenariuszem), ponieważ możliwe jest, że na komputerze A jest oczekiwana usługa na tym konkretnym porcie. Ale może to zrobić tylko dlatego, że router D wysłał go na port 1000. A router D wysyła go tylko na ten port, ponieważ twórca danych wysłał go do routera D na tym porcie.

Nie rozumiem, że uwzględnienie programów bittorrent lub P2P jest odzwierciedleniem zadanego pytania. Obowiązują te same wyjaśnienia. Routery można również skonfigurować z wyzwalaniem portów, które kojarzą dane urządzenie (lub adres IP) z określonym portem. Takie, że gdy ruch przychodzi przez port 1234, routery wiedzą, że wysyłają dane do urządzenia ABCD. Jest to zwykle związane z wychodzącym portem TCP. tzn. jeśli wyślę ruch na porcie 7890, router wie, że ruch przychodzący będzie na porcie 1234 i wyśle ​​go do mnie.

Wyzwalanie portów nie jest jednak powiązane z (zdalnymi) decyzjami dotyczącymi routingu - zamiast tego odnosi się do wewnętrznej tabeli MAC / IP, której router używa dla sieci LAN.

Zaktualizuj / edytuj : aby udzielić dalszej odpowiedzi i rozwinąć swój komentarz. Router D zna komputer A tylko na podstawie adresu IP (192.168.2.2). Ale router C zna komputer A na podstawie adresu IP i adresu MAC. MAC (Media Access Control) to unikalny (zwykle ...) 48-bitowy identyfikator zdefiniowany przez międzynarodowy standard. Każde urządzenie podłączone do sieci LAN (przewodowej i bezprzewodowej) powinno mieć unikalny adres MAC.

Router (Router C) kojarzy adres IP i adres MAC razem w tabeli (tablica adresów MAC). Tak więc, gdy ruch przychodzi do routera C, a router realizuje dla niego swój „lokalny”, sprawdza tablicę adresów MAC. Router następnie dosłownie zmienia informacje o adresowaniu ramki.

Rekonstruuje (przepisuje) informacje o docelowej warstwie 2, aby mieć docelowy adres MAC komputera A, ale zachowuje takie same informacje o adresie IP (warstwa 3).

Jeśli trasa NIE zna adresu MAC. Lub nie ma w swojej tabeli relacji IP-MAC, robi coś, co nazywa się ARP (protokół rozpoznawania adresów), aby zapytać „HEJ, wszyscy w tej sieci. Czy masz ten adres MAC?” A czasem - „Wszyscy, jaki jest twój adres MAC?”). Odpowiednie urządzenie / urządzenia reaguje, a router buduje swoją tabelę IP-MAC.

Jan
źródło
Więc Router-D wysyła pakiet do Routera-C przez port 60000 (wstępnie skonfigurowany), Router-C odbiera pakiet, ale skąd ma wiedzieć, że ten pakiet ma zostać przesłany do komputera-A?
Pacerier
1
Router D zna już ostateczne miejsce docelowe - komputer A. Zna (Router D) zna komputer A tylko na podstawie adresu IP: 192.168.2.2. Ale router C zna komputer A na dwa sposoby: adres IP (192.168.2.2) i coś, co nazywa się jego adresem MAC. Zaktualizuję odpowiedź, dodając więcej informacji.
John
2

Wyzwalanie portów. W jaki sposób serwer WWW wysyła do Ciebie stronę internetową po jej zażądaniu? Ponieważ o to prosiłeś. Gdy o to poprosisz, router wie, że oczekuje odpowiedzi, a gdy ją otrzyma, przesyła ją do odpowiedniego komputera. Niektóre programy są napisane w celu uruchomienia otwarcia w oczekiwaniu na sygnał z określonego komputera, nawet jeśli tak naprawdę nie jest w drodze.

Niektóre modele mają centralny serwer używany do podstawowej komunikacji. Na przykład:

  • Klient1 loguje się do serwera w celu komunikacji dwukierunkowej.
  • Klient2 loguje się w tym samym celu.

Serwer zna teraz wszystkie pliki, które mają Klient1 i Klient2.

  • Klient2 mówi „Chcę plik X z klienta1” na serwer.
  • Serwer mówi Klientowi1 „Klient2 chce pliku X.”
  • Klient 1 wysyła śmieciową część danych do publicznego adresu IP klienta2, uruchamiając funkcję wyzwalania portu, aby otworzyć port dla odpowiedzi od klienta 2.
  • Klient2 wysyła swój początkowy sygnał do publicznego adresu IP klienta1.

Klient1 właśnie oszukał router, aby otworzył ten port dla Klienta2.

W niektórych przypadkach, takich jak BitTorrent lub oryginalny Napster (iirc), musisz przekierować port na routerze, aby działał optymalnie.

O ile inni klienci początkowo wiedzą, z którym portem się połączyć, to dlatego, że twój klient powiedział rojowi lub serwerowi, którego portu używasz. BitTorrent często używa modułu śledzącego, który śledzi, które porty są używane przez poszczególnych klientów.

Utah Jarhead
źródło
O ile wiedzą, jakich portów użyć ... konfigurujesz klienta tak, aby nasłuchiwał na określonym porcie. Twój klient informuje rój (jak w przypadku BitTorrenta), na jakim porcie się znajdujesz, aby inni klienci wiedzieli, z czym się połączyć. Twój komputer im powiedział.
UtahJarhead
Myślę, że odpowiedziałeś podczas pisania mojego pierwszego aneksu. Poprawny?
UtahJarhead
ale skąd komputer ma znać mechanizm routingu, gdy robi to router? Niektóre mechanizmy mogły być dynamiczne, jak pokazano w superuser.com/a/187190/78897
Pacerier,
Nie, nie musi znać routingu. Aby większość klientów P2P działała poprawnie, musisz odpowiednio skonfigurować Port Forwarding na routerze. Bez tego możesz komunikować się tylko z innymi klientami, z którymi najpierw rozmawiasz. Nie mogą zainicjować rozmowy. Krótko dotknąłem tego w mojej odpowiedzi (od drugiego do ostatniego akapitu)
UtahJarhead
Ale przekierowanie portów jest możliwe tylko wtedy, gdy administrator skonfigurował je wstępnie. Chcesz powiedzieć, że Bittorrent rekonfiguruje nasze routery?
Pacerier