Skąd Router wie, gdzie przesłać pakiet

67

Jeśli kilka komputerów z adresami lokalnymi (192.168.0. #) Jest podłączonych do routera, a każdy komputer otwiera przeglądarkę internetową i żąda strony przez HTTP, po wysłaniu tych pakietów TCP: 80 router przełącza adres lokalny za pomocą statyczny adres IP routera (tzn. adres IP podany przez dostawcę), aby serwer mógł odpowiedzieć na odpowiedni adres.

Ale skąd router wie, na który komputer przesłać odpowiedź HTTP, skoro nagłówek TCP nie zawiera lokalnego adresu IP (prawda?), A wszystkie komputery używają portu 80?

Czy to ma coś wspólnego z adresami MAC?

Jak dokładnie to działa?

Kornelije Petak
źródło

Odpowiedzi:

78

Większość routerów domowych korzysta ze specjalnego przypadku NAT o nazwie PAT.

Zobaczysz go również jako NAPT lub maskowanie IP. Wszystkie trzy ostatnie terminy oznaczają to samo w powszechnym użyciu. (Akronimy - tłumaczenie adresu sieciowego / tłumaczenie adresu portu / tłumaczenie adresu sieciowego)

Gdy pakiet wychodzi z komputera wewnętrznego, adres źródłowy jest przepisywany, jak wiadomo. Port źródłowy jest również zmieniany, zwykle na dużą liczbę, a router utrzymuje tablicę translacji adresów.

Załóżmy na przykład, że masz komputer kliencki, który przechodzi na stronę www.google.com. Twój komputer (np. 192.168.1.100) wyszukuje ten adres i nawiązuje połączenie TCP z 72.14.204.147 na porcie 80 z twojego wewnętrznego adresu IP, używając losowego portu źródłowego.

Połączenie z komputerem wygląda następująco:

192.168.1.100:37641   <-->  72.14.204.147:80

Komputer wysyła pakiet do routera, który wybiera nowy losowo wysoki port i przepisuje pakiet. Każde połączenie wychodzące ma swój własny port na routerze. Router przekazuje następnie pakiet do twojego dostawcy usług internetowych po dodaniu go do tabeli połączeń:

PrivateIP        PrivatePort   PublicIP      PublicPort    Remote          RemotePort
-------------    ----------    -----------   -----------   ----------      -----------
192.168.1.100    37641         *10.6.23.5    59273         72.14.204.147   80

* Na przykład użyłem adresu zaczynającego się od 10, ale nie można ich publicznie routować. Tabela jest również nieco uproszczona.

W przypadku Google połączenie wygląda następująco:

10.6.23.5:59273   <-->  72.14.204.147:80

Google wyśle ​​odpowiedź do 10.6.23.5 na porcie 59273. Router następnie wyszukuje te informacje w tabeli i przekazuje pakiet do 192.168.1.100:37641.

Paweł
źródło
3
Podsumowując, router używa numerów portów do zapamiętywania, co z zewnątrz sieć lokalna trafia do tego, co znajduje się wewnątrz sieci. Nie wyjaśnia to jednak, jak www.google.comby mnie znalazł, gdybym nie wysłał pierwszej prośby. Innymi słowy, wiadomości mogą docierać do mnie przez router tylko wtedy, gdy początkowo wysłałem żądanie przez router
CodyBugstein
2
@Imray google.com (lub cokolwiek innego w Internecie) nie może znaleźć Twojego komputera, jeśli Twój komputer nie zainicjował żądania. Dlatego posiadanie routera zapewnia dużo bezpieczeństwa.
Jason
6
@Jason To niebezpieczny mit. Posiadanie zapory ogniowej zwiększa bezpieczeństwo. Zadaniem typowego routera SoHo jest po prostu sprawienie, aby wszystko działało, a nie zatrzymanie działania. Se tutaj , aby uzyskać więcej informacji.
David Schwartz
1
@Jason Lepiej nie usuwać komentarza, ponieważ nie można przeczytać tego, co byłoby warte dyskusji.
barlop
2
Dobry przykład, ale czy to oznacza, że ​​wszystkie porty o dużej liczbie są zawsze otwarte na naszych routerach?
jiggunjer
1

Routery między siecią lokalną a resztą Internetu używają techniki o nazwie NAT.

Tylko fragment z ilustrowanego tomu 1 protokołu TCP / IP o NAPT, ze słowem o wadach jego prostego kuzyna, Basic NAT:

Podstawowy NAT wykonuje przepisywanie tylko adresów IP. Zasadniczo adres prywatny jest przepisywany na adres publiczny, często z puli lub zakresu adresów publicznych dostarczonych przez dostawcę usług internetowych. Ten typ translacji NAT nie jest najpopularniejszy, ponieważ nie pomaga radykalnie zmniejszyć zapotrzebowanie na adresy IP - liczba globalnie routowowanych adresów musi być równa lub większa niż liczba hostów wewnętrznych, które chcą jednocześnie uzyskiwać dostęp do Internetu. O wiele bardziej popularne podejście, NAPT polega na użyciu identyfikatorów warstwy transportowej (tj. Portów dla TCP i UDP, identyfikatorów zapytań dla ICMP) w celu rozróżnienia, który host po prywatnej stronie NAT jest powiązany z danym pakietem (patrz Rysunek 7- 4). Pozwala to na dużą liczbę wewnętrznych hostów (tj. wiele tysięcy), aby jednocześnie uzyskać dostęp do Internetu przy użyciu ograniczonej liczby adresów publicznych, często tylko jednego. Zazwyczaj będziemy używać terminu NAT, aby uwzględnić zarówno tradycyjny NAT, jak i NAPT, chyba że rozróżnienie jest ważne w danym kontekście.

CodyBugstein
źródło