(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:2345
i 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.1
i 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:2345
i 192.168.0.2:5432
.
Komputer A wysyła swój pakiet ze źródłem 192.168.0.1:2345
i miejscem docelowym 3.3.3.3:80
. Brama tłumaczy ten pakiet na 1.1.1.1:2345
miejsce docelowe źródła 3.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łem 3.3.3.3:80
i miejscem docelowym 1.1.1.1:2345
, przetłumaczy ją na źródło 3.3.3.3:80
i miejsce docelowe 192.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 docelowym 3.3.3.3:80
. Brama tłumaczy ten pakiet na 1.1.1.1:5432
miejsce docelowe źródła 3.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łem 3.3.3.3:80
i miejscem docelowym 1.1.1.1:5432
, przetłumaczy ją na źródło 3.3.3.3:80
i miejsce docelowe 192.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.