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