Просто интересно про конкретный сценарий NAT. Предположим, у нас есть 4 компьютера, совместно использующие глобальный IP-адрес под NAT. Я понимаю, что блок NAT хранит внутреннюю запись, чтобы знать, на какой компьютер пересылать запросы. Но скажем, на компьютере №2 я пытаюсь загрузить файл. Допустим, на компьютерах №1, №3 и №4 я просто обычно просматриваю веб-страницы. Когда браузер инициирует TCP-соединение для получения этого файла, как он узнает, на какой компьютер его передать? Я имею в виду, что каждый из четырех компьютеров использует порт 80 для просмотра веб-страниц, верно? Как запись NAT определяет, какой «порт 80» какому компьютеру принадлежит?
О трансляции сетевых адресов (NAT)?
Ответы (2)
Концепция «80-й порт для http» не работает. Когда компьютер просматривает веб-страницы, только сервер использует порт 80, в то время как клиент будет использовать случайный номер порта. Сервер отвечает подключенным портом назначения, предоставленным клиентом. Порт 80 предназначен только для того, чтобы выбить дверь веб-сервера.
Что делает NAT, так это транслирует исходящие пакеты всех этих 4 компьютеров таким образом, чтобы их исходные порты не дублировались. Когда NAT получает пакет, он проверяет, можно ли преобразовать подключенный порт назначения, и, если возможно, транслирует его в локальную сеть.
Каждое уникальное TCP-соединение в Интернете состоит из четырех чисел - {source IP, source port, destination IP, destination port}
.
Шлюз NAT (GW) преобразует это в {GW public IP, GW-mapped port, destination IP, destination port}
, чтобы внешние маршрутизаторы знали, что нужно возвращать пакеты на этот конкретный шлюз. Он также сохраняет сопоставление этих сопоставленных портов с исходным IP-адресом и номером порта в соответствии со строками {GW-mapped port -> {source IP, source port}}
, что позволяет ему выяснить, на какую внутреннюю машину отправлять ответные пакеты.