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:
Komputer-A, IP 192.168.1.2 (brama domyślna 192.168.1.1)
Komputer-B, IP 192.168.1.3 (brama domyślna 192.168.1.1)
Router-C, IP 192.168.1.1 (zewnętrzny IP 1.1.1.1)
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?
źródło
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:
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.
źródło
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:
Serwer zna teraz wszystkie pliki, które mają Klient1 i Klient2.
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.
źródło