Myślę, że to bardzo klasyczne pytanie, ale sądzę, że mam pewne doświadczenie, nie mam już wystarczającego słownictwa, aby wyszukiwać i rozumieć poprawnie w sieci.
Załóżmy, że mam sieć domową z 192.168.0.1 (IP.1) i 192.168.0.2 (IP.2) i oboje gramy w Counter Strike uderzając dokładnie w ten sam serwer zewnętrzny.
Skąd mój domowy router wie, który pakiet przejdzie na IP.1? Często czytam rzeczy z adresami NAT i xxx.xxx/y. ** Gdzie jest zapisana część / y na stosie TCP / IP?
Czy potrzebujemy do tego absolutnie NAT? Z artykułu z Wikipedii zrozumiałem, że NAT jest zoptymalizowany pod kątem adresów IP, gdy niektóre komputery są wyłączone. Czy pozwala również na podłączenie 5 urządzeń za pomocą tylko 1 publicznego adresu IP?
Odpowiedzi:
(W tym przypadku zignoruję wyszukiwanie DNS lub akcję drugiej warstwy, ponieważ nie jest to istotna część historii NAT).
Każde połączenie TCP składa się z czterech części:
W skrócie: docelowy adres IP służy do dostarczenia pakietu do właściwego komputera, port docelowy służy do przeniesienia pakietu na tym komputerze do właściwego programu / sesji Źródłowy adres IP służy do określenia, gdzie należy wysłać odpowiedzi. To samo dotyczy portu źródłowego. Po wysłaniu odpowiedzi źródło i miejsce docelowe są po prostu zamieniane.
Zacznijmy od dwóch komputerów bez NAT:
1.1.1.1
3.3.3.3
80
Gdy komputer prosi o stronę internetową, najpierw wybiera losowy nieużywany numer portu z losowego zakresu (1024-65535). Chodźmy odebrać
2345
. Nastąpi następująca sekwencja: Komputer wyśle pakiet z: źródłowym adresem IP1.1.1.1
, portem źródłowym2345
, docelowym adresem IP3.3.3.3
, portem docelowym80
. Pakiety docierają do serwera, widzi własny adres IP i port80
, więc wie, że jest to żądanie strony internetowej. Serwer następnie wysyła stronę z powrotem w pakietach ze źródłowym adresem IP3.3.3.3
, portem źródłowym 80, docelowym adresem IP1.1.1.1
, portem docelowym2345
. Komputer odbiera te pakiety i wie, która to była strona internetowa, z powodu numeru portu2345
.Te kombinacje portów są często zapisywane jako takie:
1.1.1.1:2345
i3.3.3.3:80
.Teraz liczba komputerów w Internecie znacznie przewyższa liczbę dostępnych adresów IPv4. Aby zachować przestrzeń adresową, wprowadzono zestaw prywatnych zakresów adresów, które można dowolnie wykorzystywać do udostępniania adresów. Zakresy te nazywane są RFC1918 i są następujące:
Adresów tych nigdzie nie ma w tablicach routingu internetowego, więc jeśli wyślesz pakiet z miejscem docelowym w tych zakresach na szkiełku internetowym, po prostu zostanie usunięty. Jest tak, ponieważ miliony ludzi używają tych samych adresów. Adresy te muszą zostać przetłumaczone na coś użytecznego dla Internetu. Tutaj pojawia się tłumaczenie adresu sieciowego:
Mamy dwa komputery:
192.168.0.1
i B:192.168.0.2
1.1.1.1
.Najpierw oba komputery wybierają losowy port: powiedzmy:
192.168.0.1:2345
i192.168.0.2:5432
.Komputer A wysyła swój pakiet ze źródłem
192.168.0.1:2345
i miejscem docelowym3.3.3.3:80
. Brama tłumaczy ten pakiet na1.1.1.1:2345
miejsce docelowe źródła3.3.3.3:80
i pamięta, że trafiają do niego wszelkie odpowiedzi na tę kombinację192.168.0.1
. Kiedy więc otrzyma odpowiedź ze źródłem3.3.3.3:80
i miejscem docelowym1.1.1.1:2345
, przetłumaczy ją na źródło3.3.3.3:80
i miejsce docelowe192.168.0.1:2345
i wyśle pakiet.Komputer B wysyła swój pakiet ze źródłem
192.168.0.2:5432
i miejscem docelowym3.3.3.3:80
. Brama tłumaczy ten pakiet na1.1.1.1:5432
miejsce docelowe źródła3.3.3.3:80
i pamięta, że trafiają do niego wszelkie odpowiedzi na tę kombinację192.168.0.2
. Kiedy więc otrzyma odpowiedź ze źródłem3.3.3.3:80
i miejscem docelowym1.1.1.1:5432
, przetłumaczy ją na źródło3.3.3.3:80
i miejsce docelowe192.168.0.2:5432
i wyśle pakiet.Jeśli oba komputery wybiorą ten sam numer portu źródłowego, brama po prostu wybierze inny wolny losowy numer portu źródłowego i pamięta o przetłumaczeniu numeru portu. Czasami jest to określane jako PAT (tłumaczenie adresu portu). Jest to w zasadzie podzbiór NAT.
Istnieje kilka implementacji tego wszystkiego. Brama może po prostu tylko zapamiętać „Komputer X użył źródłowego portu Y” i przekierować wszystko z portem Y do komputera X. Może pamiętać, że Komputer X użył źródłowego portu Y i docelowego Z ”i przekazywał tylko cokolwiek z portu Z do portu Y z powrotem do komputer X. Lub istnieje opcja, że zapamiętuje całą krotkę i wysyła tylko ruch do komputera X, który pasuje do całego źródłowego / docelowego adresu IP i portu.
źródło