W jaki sposób pakiety odpowiedzi IP docierają do miejsca docelowego w prywatnej sieci LAN? [duplikować]

26

To małe pytanie teoretyczne, które mylę mnie od dłuższego czasu.

Zasadniczo, jeśli jesteśmy w prywatnej sieci LAN i chcemy, aby przychodzące pakiety docierały na przykład do serwera HTTP zlokalizowanego na jednym z komputerów, przekierowujemy porty, aby przychodzące pakiety docierały dokładnie do tego komputera.

Teraz jestem dość zdezorientowany, w jaki sposób pakiety „odpowiedzi” docierają do miejsca docelowego w sieci LAN, na przykład kiedy otwieramy stronę internetową lub coś podobnego. Naprawdę nie mogę znaleźć żadnych przydatnych informacji na ten temat.

Mam nadzieję, że ktoś może dać mi kilka wskazówek lub połączyć mnie z informacjami, które mogą to wyjaśnić. Dzięki.

EDYCJA: Myślę, że powinienem to wyjaśnić. Przykładem tego jest coś takiego:
1. Komputer wewnątrz sieci LAN z jednym zewnętrznym adresem IP próbuje załadować stronę internetową z serwera sieciowego poza tą siecią LAN (w zasadzie w Internecie)
2 Serwer WWW odpowiada i odsyła stronę z powrotem do tego komputera.

To, co mnie dość myli w tym momencie, to skąd router wie, jaki komputer wysyła przychodzące dane (biorąc pod uwagę, że router jest podłączony do sieci LAN z wieloma komputerami) bez wcześniejszego przekierowania portów.

InsomniaArray
źródło
Właśnie obejrzałem fajny film na ten temat: Tłumaczenie adresu sieciowego - Computerphile
Der Hochstapler

Odpowiedzi:

56

Mimo że pytanie zostało w pełni uwzględnione. Wydaje mi się, że ten proces najlepiej opisać krok po kroku.

W tym przykładzie siedzę w prywatnej sieci LAN połączonej z Internetem za pośrednictwem routera. Ponieważ nasza sieć ma jeden publiczny adres IP, używamy NAT.

Kiedy więc poproszę o stronę superuser.com, która wygeneruje wiele pakietów IP. Spójrzmy na jeden.


Źródło pakietu IP : 192.168.1.12(moje IP)
Miejsce docelowe: 64.34.119.12(superuser.com)

Teraz mój system najprawdopodobniej jest skonfigurowany podobnie do tego, o którym mowa. Mam własny adres IP ( 192.168.1.12), maskę podsieci ( 255.255.255.0) i domyślną bramę ( 192.168.1.1). Teraz, ponieważ moje pole Miejsce docelowe w moim pakiecie IP wskazuje sieć inną niż moja, jest ono wysyłane do mojej domyślnej bramy (a nie bezpośrednio do komputera).

Ale w jaki sposób pakiet może dostać się do domyślnej bramy, jeśli Miejsce docelowe wskazuje gdzieś zupełnie inaczej?

Ethernet

To proste, ponieważ do tego celu używamy adresowania protokołu Ethernet. Po prostu ustawiliśmy nasz docelowy adres IP w pakiecie IP i adres MAC naszej domyślnej bramy jako miejsce docelowe w ramce Ethernet .

Teraz upewni się, że nasza domyślna brama pobierze pakiet superuser.com. Tak!

Teraz brama ma nasz pakiet i może wysłać go na swoją ścieżkę. Ale aby upewnić się, że otrzyma odpowiedź, najpierw musi zastąpić adres źródłowy pakietu (w przeciwnym superuser.comrazie próbowałby wysłać odpowiedź do jakiegoś (prawdopodobnie) nieistniejącego urządzenia z moim adresem IP w swojej sieci. bardzo fajnie.)
Więc mój router umieści swój publiczny adres IP w polu Źródło :


Źródło pakietu IP : 92.69.127.243(mój publiczny adres IP)
Miejsce docelowe: 64.34.119.12(superuser.com)

Teraz ta sama gra trwa i trwa z wszystkimi routerami na świecie, dopóki pakiet nie dotrze w końcu superuser.comi nie zostanie wygenerowana odpowiedź.

Odpowiedź

Odpowiedź
Źródło pakietu IP : 64.34.119.12(superuser.com)
Miejsce docelowe: 92.69.127.243(mój publiczny adres IP)

Ok, odpowiedź dotarła do mojego routera, co teraz? Skąd mój router może teraz wysłać odpowiedź 192.168.1.12?

TCP

Cóż, to faktycznie działa, ponieważ przyjrzeliśmy się tylko częściom komunikacji IP i Ethernet. To, co sprawia, że ​​działa, to część TCP.

Najprawdopodobniej wiesz, że serwery sieciowe zwykle działają na porcie 80. IP nie ma pojęcia portów . To pochodzi z TCP . W TCP mamy (podobnie jak w IP) port źródłowy i docelowy .

Mój pakiet TCP do superuser.com
Źródło: 192.168.1.12(mój adres IP)
Port źródłowy: 11111(port, który utworzył mój komputer)
Miejsce docelowe: 64.34.119.12(superuser.com)
Port docelowy:80

Kiedy router wyśle ​​ten pakiet początkowy (który jest adresowany superuser.comna port 80), umieści tam nowy port źródłowy (np 12345.).
I to jest ważna część! Zapamięta tę wymianę!

Pakiet TCP mojego routera do superuser.com
Źródło: 92.69.127.243(mój publiczny adres IP)
Port źródłowy: 12345(port utworzony przez mój router)
Miejsce docelowe: 64.34.119.12(superuser.com)
Port docelowy:80

Tak więc pakiet odpowiedzi otrzymany przez router wygląda następująco:
Odpowiedź Pakiet TCP od superuser.com
Źródło: 64.34.119.12(superuser.com)
Port źródłowy: 80
Miejsce docelowe: 92.69.127.243(mój publiczny adres IP)
Port docelowy: 12345(port utworzony przez mój router)

Więc teraz pobiera ten pakiet i widzi, że jest to port, który wcześniej zapamiętał, został przypisany do operacji NAT dla adresu IP 192.168.1.12(mojego adresu IP).

Odpowiedź Pakiet TCP z mojego routera
Źródło: 64.34.119.12(superuser.com)
Port źródłowy: 80
Miejsce docelowe: 192.168.1.12(mój adres IP)
Port docelowy: 11111(port utworzony przez mój komputer)

Der Hochstapler
źródło
1
Zredagowałem twoją odpowiedź, nie pokazała wyraźnie, co się dzieje z numerami portów. Dodałem więcej przykładów pośrednich kroków i numerów portów, gdzie każdy krok.
Scott Chamberlain,
1
@OliverSalzburg Szukałem odpowiedzi na to samo pytanie, a twoje wyjaśnienie pomogło mi przypomnieć sobie, tylko krótkie pytanie na ten temat. Zastanawiasz się, jak długo router utrzyma odwrotne odwzorowania (port źródłowy), jakby zabrakło mu miejsca, jeśli będzie to robił przez tak wiele żądań, czy spłukuje je zbyt regularnie?
Ahmed
@Ahmed: Ilość pamięci do śledzenia tych informacji jest ograniczona. Istnieje 65536 możliwych numerów portów, są one przechowywane w 2 bajtach. Zatem zapamiętanie adresu IP (4 bajty) dla każdego portu sumowałoby się do 65536 x 4 bajtów = 262144 bajtów = 256 kB. Jednak szczegóły są zaimplementowane w routerze, to nie jest dużo pamięci.
Der Hochstapler
@Oliver Świetna odpowiedź, dokładnie tego, czego szukałem! Mam kilka pytań - (1) „ta sama gra trwa i trwa z wszystkimi routerami na świecie” - czy to jest dokładne? Z pewnością pole źródłowe nie będzie nadal zastępowane na każdym kroku? (2) Czy router zapamiętuje otwarte porty przez dłuższy czas, czy też regularnie je upuszcza w przypadku braku odpowiedzi? (3) Czy to oznacza, że ​​haker może przepuścić pakiety przez zaporę routera za pomocą ataku man-in-the-middle: szpiegowanie wychodzących pakietów TCP, a następnie atakowanie otwartego portu TCP routera za pomocą sfałszowanego źródłowego adresu IP pasującego do miejsca docelowego?
Jon Bentley,
1
W jaki sposób odpowiedź ping ICMP wraca do komputera w sieci LAN? Czy ma coś podobnego do portu dla TCP? Co powiesz na inne protokoły?
Jean
11

Tłumaczenie adresu sieciowego . W skrócie, gdy router bramy prywatnej sieci LAN zastępuje prywatny adres źródłowy sieci LAN własnym adresem publicznym, modyfikuje pakiet w pewien sposób, na przykład przypisując unikalny i poza tym lokalnie bez znaczenia numer portu, który mapuje z powrotem na źródłowy węzeł sieci LAN i żądanie wychodzące . Zapamiętuje to mapowanie portów, więc kiedy odpowiedź wraca do publicznego adresu IP / unikalnego portu #, on (router) wie, jak usunąć mapowanie z powrotem do jednego z jego węzła źródłowego. W ten sposób można również uruchamiać wiele kart, przeglądarek lub instancji przeglądarki, a odpowiedzi na każde żądanie przeglądarki wracają do właściwej przeglądarki i karty.

JRobert
źródło
2
JRobert: Co z protokołami IP (np. ICMP), innymi niż tcp lub udp, które nie mają numeru portu?
Uri
0

Kiedy pakiet początkowy dociera do zewnętrznego interfejsu routera, zmienia docelowy adres IP pakietu zgodnie z konfiguracją przekierowania portów i przesyła zmodyfikowany pakiet do wewnętrznego interfejsu routera (w razie potrzeby po zwykłym ARP)

Pakiet dociera do serwera WWW i nadal ma zewnętrzny źródłowy adres IP, który będzie używany jako adres docelowy dla każdej odpowiedzi. Serwer odpowiednio adresuje wychodzące pakiety odpowiedzi w zwykły sposób za pomocą docelowego adresu IP równego źródłowemu adresowi IP żądania. Ponieważ adres IP żądającego jest zewnętrzny, pakiet jest adresowany w warstwie MAC do wewnętrznego interfejsu routera.

Pamiętaj, że w każdej warstwie sieci są różne cele.

RedGrittyBrick
źródło
0

Przekierowanie portów odbywa się zwykle na routerze lub urządzeniu do niego sąsiadującym. Gdy urządzenie w sieci LAN wysyła ruch do innego urządzenia w tej samej sieci LAN, router w ogóle nie jest zaangażowany. Ruch drogowy nawet go nie dotyka. Twoje reguły przekierowania portów nie będą miały wpływu na ruch LAN-to-LAN.

Ethernet został zaprojektowany z myślą o topologii „magistrali”, w której każdy komputer był fizycznie podłączony do tego samego nośnika. Podczas gdy nowoczesne przełączniki optymalizują przepływ ruchu, ucząc się adresu MAC na drugim końcu portu i odpowiednio replikując ruch, topologia „magistrali” nadal pozostaje. Wszystko, co jest podłączone do standardowego przełącznika, może „bezpośrednio” dotrzeć do czegokolwiek innego (zakładając, że znajduje się w tej samej podsieci) bez konieczności „przechodzenia” przez urządzenie pośrednie, takie jak router.

Możesz być zdezorientowany, jeśli urządzenie, do którego podłączasz wszystkie komputery, ma wiele portów Ethernet „LAN”, a następnie pojedynczy port „WAN”. Tego typu urządzenia są w rzeczywistości zarówno routerem, jak i przełącznikiem w tej samej obudowie.

Tak więc w Twojej sieci LAN, jeśli serwer HTTP ma adres 192.168.1.55, aby uzyskać do niego dostęp w sieci LAN, musisz wpisać „ http://192.168.1.55 ” w pasku adresu przeglądarki. Router nigdy tego nie widzi. Aby dotrzeć do niego poza siecią LAN, musisz wpisać swój zewnętrzny adres IP, tj. „ Http://256.99.88.77 : {port, który tu przekazałeś}” lub cokolwiek to jest. Uderza to w router, działa na nim funkcja NAT routera, a następnie router wysyła go do 192.168.1.55.

LawrenceC
źródło
0

Po prostu, gdy komputer w prywatnej sieci LAN inicjuje połączenie wychodzące, brama NAT automatycznie generuje dla niego mapowanie portów. Są one mniej więcej takie same jak wcześniej mapowane porty: {port publiczny, adres prywatny, port prywatny} i są używane w ten sam sposób. Największą różnicą w przypadku mapowań dynamicznych jest to, że brama NAT często musi arbitralnie przypisywać porty publiczne do mapowań, gdy oczekiwany numer portu jest już w użyciu.

Spiff
źródło