Большинство домашних маршрутизаторов используют специальный случай NAT, называемый PAT.
Вы также увидите, что это называется NAPT или IP Masquerading. Все три последних термина означают одно и то же в общем использовании. (Сокращения - Трансляция сетевых адресов / Трансляция адресов портов / Трансляция сетевых адресов)
Когда пакет выходит с вашего внутреннего компьютера, адрес источника переписывается, как вы знаете. Порт источника также изменяется, обычно на большое число, и маршрутизатор хранит таблицу трансляции адресов.
Например, допустим, у вас есть клиентский компьютер, который переходит на www.google.com. Ваш компьютер (например, 192.168.1.100) ищет этот адрес и устанавливает TCP-соединение с 72.14.204.147 на порту 80 с вашего внутреннего IP-адреса, используя случайный исходный порт.
К вашему компьютеру соединение выглядит так:
192.168.1.100:37641 <--> 72.14.204.147:80
Ваш компьютер отправляет пакет на маршрутизатор, который выбирает новый случайный высокий порт и перезаписывает пакет. Каждое исходящее соединение получает свой порт на маршрутизаторе. Затем маршрутизатор пересылает пакет вашему провайдеру после добавления его в свою таблицу соединений:
PrivateIP PrivatePort PublicIP PublicPort Remote RemotePort
------------- ---------- ----------- ----------- ---------- -----------
192.168.1.100 37641 *10.6.23.5 59273 72.14.204.147 80
* В качестве примера я использовал адрес, начинающийся с 10, но он не является общедоступным. Таблица также несколько упрощена.
Для Google соединение выглядит так:
10.6.23.5:59273 <--> 72.14.204.147:80
Google отправит ответ на 10.6.23.5 через порт 59273. Затем ваш маршрутизатор ищет эту информацию в таблице и пересылает пакет на 192.168.1.100:37641.
www.google.com
бы я нашел его, если бы я не отправил ему первоначальный запрос. Другими словами, сообщения могут достигать меня только через маршрутизатор, если я первоначально отправил запрос через маршрутизатор