Istnieje ogólne nieporozumienie między NAT ( translacją adresów sieciowych) a PAT (translacją adresów portów), czego najczęściej używamy w naszych domowych routerach.
NAT
Załóżmy, że mamy sieć o następującej topologii:
Private_Network <-------> Router <-------> The_Internet
Interfejs routera podłączonego do Private_Network ma prywatny adres IP , tzn . Taki, który nie jest unikalny w The_Internet . Z drugiej strony, w przypadku NAT , router ma wiele interfejsów podłączonych do The_Internet . Każdy interfejs ma unikalny adres IP w The_Internet . Załóżmy teraz, że Host_A i Host_B znajdują się w sieci prywatnej i obaj chcą jednocześnie uzyskać dostęp do witryny WWW_X w Internecie . Adresy IP i porty Host_Apakiet będzie:
Źródło IP: Host_A 's prywatne IP
Source Port: port na Host_A
Destination IP: Website_X ' s publiczny / unikalny IP
Destination Port: port A, jeżeli Website_X serwera jest słuchanie
i w ten sam sposób dla pakietu pochodzącego z Host_B .
Jeśli źródłowy adres IP pozostanie niezmieniony, Website_X odpowie na adres IP, który jest prywatny, tj. Nie jest unikalny, a zatem pakiet nigdy nie będzie w stanie znaleźć swojej drogi powrotnej. Aby rozwiązać ten problem, router sprawdza, czy jeden z jego unikalnych adresów IP połączonych z Internetem nie jest używany. W takim przypadku wykonuje następujące mapowanie:
Host_A „s prywatne IP ======= Router's_unique_IP_K
a teraz pakiet, który zaczął się od Host_A przechodząc do Website_X i teraz opuszcza interfejs routera podłączony do The_Internet będzie miał postać:
Źródłowy adres IP: Router's_unique_IP_K
Port źródłowy: Port na Host_A
Docelowy adres IP: Publiczny / unikalny port docelowy IP witryny_X
: Port, na którym nasłuchuje serwer Website_X
W ten sposób możesz zrozumieć, że istnieje prywatne powiązanie od prywatnych adresów IP do publicznych adresów IP. Dlatego gdy pakiet przychodzi z witryny Website_X do routera , to powiązanie jest sprawdzane, a docelowy adres IP jest ponownie zmieniany na prywatny i dostarczany z powodzeniem do właściwego hosta.
Jak widać, ta metoda jest dość prosta, ale ma jedną wielką wadę: każdy prywatny host musi mieć zarezerwowany unikalny adres IP, co jest kosztowne, dlatego wybieramy mniej unikalnych adresów IP niż hosty w sieci prywatnej. Dlatego jeśli wszystkie prywatne hosty próbują uzyskać dostęp do The_Internet w tym samym czasie, tylko ich podzbiór, równy liczbie dostępnych publicznych adresów IP, które routerma, będzie miał dostęp, a reszta zostanie odrzucona.
Aby temu przeciwdziałać, stworzyliśmy PAT .
PAT
PAT jest tym, czego używa zdecydowana większość naszych domowych routerów. Podstawowym ograniczeniem jest to, że router ma jeden unikalny adres IP, z którym łączy się z The_Internet , ale nadal chcemy umożliwić wielu hostom z sieci prywatnej dostęp do The_Internet w tym samym czasie.
Sposób, w jaki to robimy, jest „podobny” do sposobu, w jaki NAT robi to z kluczową różnicą: zamiast routera przechowującego pulę adresów IP, przechowuje pulę numerów portów. Dokładniej, pakiet przybyciu na routerze z Host_A w Private_Network przeznaczone do Website_X wInternet będzie miał następujący format:
Źródło IP: Host_A 's prywatne IP
Source Port: port na Host_A
Destination IP: Website_X ' s publiczny / unikalny IP
Destination Port: port A, jeżeli Website_X serwera jest słuchanie
Teraz router wykona dwa zadania:
- Spowoduje to zmianę źródła do IP routera jest unikatowy publicznego IP AND
- Zmieni port źródłowy na port z puli utrzymywanej przez router i nieużywanej, np. Port_Z
a teraz pakiet, który zaczął się od Host_A przechodząc do Website_X i teraz opuszcza interfejs routera podłączony do The_Internet będzie miał postać:
Źródłowy adres IP: Router's_unique_IP_K
Port źródłowy: Port_Z
Docelowy adres IP: Publiczny / unikalny docelowy adres IP strony WWW
: Port, na którym nasłuchuje serwer Website_X
a router zachowa następujące mapowanie:
Prywatny adres IP Host_A ORAZ port na Host_A ======= Port_Z
Dlaczego to działa?
Teraz, gdy pakiet wraca, router po prostu sprawdza docelowy numer portu i zmienia docelowy adres IP oraz docelowy numer portu zgodnie z wcześniej wspomnianym mapowaniem i pakiet zostaje pomyślnie dostarczony.
Co się stanie, jeśli uruchomię wiele aplikacji na tym samym hoście?
Różne aplikacje będą z definicji miały różne porty, dlatego będą mapowane na inny port niż router .
Co jeśli wielu hostów próbuje uzyskać dostęp do The_Internet w tym samym czasie i wszyscy korzystają z tej samej aplikacji?
Różne hosty będą z definicji miały różne prywatne adresy IP, dlatego będą mapowane na inny port niż router .
PAT niebezpiecznie równoważy się w szarej przestrzeni między warstwami. Numery portów są częścią protokołu transportowego, a routery mogą działać do protokołu internetowego. Technicznie rzecz biorąc, jest to coś, co nie jest dozwolone w protokołach. Dlatego istnieją, przynajmniej teoretycznie, potencjalne zagrożenia: pula portów jest ograniczona. Dlatego jeśli moja prywatna sieć składa się z 1000 hostów i na każdym z nich działa port_pool / 10 aplikacji, w tabeli mapowania na routerze zabraknie dostępnych wpisów, a dostęp do aplikacji będzie zabroniony.
Ta odpowiedź znacznie przekroczyła moją zamierzoną długość, ale mam nadzieję, że była pomocna.