W jaki sposób NAT współdzieli jeden publiczny adres IPv4 z wieloma prywatnymi adresami IPv4 [zamknięte]

10

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?

Nicolas Zozol
źródło
Jeden do wielu powinien odpowiedzieć na twoje pytania. Również pytania dotyczące sieci domowych i edukacji na poziomie podstawowym nie pasują najlepiej do tej witryny.
Craig Constantine

Odpowiedzi:

14

(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:

<source IP> <source port> <destination IP> <destination port>

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:

  • Komputer ma adres IP 1.1.1.1
  • Serwer ma adres IP 3.3.3.3
  • Standardowy port dla HTTP to 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 IP 1.1.1.1, portem źródłowym 2345, docelowym adresem IP 3.3.3.3, portem docelowym 80. Pakiety docierają do serwera, widzi własny adres IP i port 80, więc wie, że jest to żądanie strony internetowej. Serwer następnie wysyła stronę z powrotem w pakietach ze źródłowym adresem IP 3.3.3.3, portem źródłowym 80, docelowym adresem IP 1.1.1.1, portem docelowym 2345. Komputer odbiera te pakiety i wie, która to była strona internetowa, z powodu numeru portu 2345.

Te kombinacje portów są często zapisywane jako takie: 1.1.1.1:2345i 3.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:

  • 192.168.0.0 - 192.168.255.255
  • 172.16.0.0 - 172.31.255.255
  • 10.0.0.0 - 10.255.255.255

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:

  • A: 192.168.0.1i B:192.168.0.2
  • Ich brama ma publiczny adres IP 1.1.1.1.
  • Trzymamy ten sam serwer WWW.
  • Oba komputery chcą tej samej strony z tego samego serwera.

Najpierw oba komputery wybierają losowy port: powiedzmy: 192.168.0.1:2345i 192.168.0.2:5432.

Komputer A wysyła swój pakiet ze źródłem 192.168.0.1:2345i miejscem docelowym 3.3.3.3:80. Brama tłumaczy ten pakiet na 1.1.1.1:2345miejsce docelowe źródła 3.3.3.3:80i pamięta, że ​​trafiają do niego wszelkie odpowiedzi na tę kombinację 192.168.0.1. Kiedy więc otrzyma odpowiedź ze źródłem 3.3.3.3:80i miejscem docelowym 1.1.1.1:2345, przetłumaczy ją na źródło 3.3.3.3:80i miejsce docelowe 192.168.0.1:2345i wyśle ​​pakiet.

Komputer B wysyła swój pakiet ze źródłem 192.168.0.2:5432i miejscem docelowym 3.3.3.3:80. Brama tłumaczy ten pakiet na 1.1.1.1:5432miejsce docelowe źródła 3.3.3.3:80i pamięta, że ​​trafiają do niego wszelkie odpowiedzi na tę kombinację 192.168.0.2. Kiedy więc otrzyma odpowiedź ze źródłem 3.3.3.3:80i miejscem docelowym 1.1.1.1:5432, przetłumaczy ją na źródło 3.3.3.3:80i miejsce docelowe 192.168.0.2:5432i 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.

JelmerS
źródło
Dzięki. Myślałem, że każdy klient wyśle ​​swój port 80 na inny port 80. Myślę, że wielu niespecjalistów wierzy w to samo.
Nicolas Zozol