О трансляции сетевых адресов (NAT)?

Просто интересно про конкретный сценарий NAT. Предположим, у нас есть 4 компьютера, совместно использующие глобальный IP-адрес под NAT. Я понимаю, что блок NAT хранит внутреннюю запись, чтобы знать, на какой компьютер пересылать запросы. Но скажем, на компьютере №2 я пытаюсь загрузить файл. Допустим, на компьютерах №1, №3 и №4 я просто обычно просматриваю веб-страницы. Когда браузер инициирует TCP-соединение для получения этого файла, как он узнает, на какой компьютер его передать? Я имею в виду, что каждый из четырех компьютеров использует порт 80 для просмотра веб-страниц, верно? Как запись NAT определяет, какой «порт 80» какому компьютеру принадлежит?


person Rudi    schedule 23.05.2010    source источник
comment
Отвечает ли это на ваш вопрос? Как два компьютера подключаются к одному внешнему адресу через NAT?   -  person Jason Law    schedule 09.05.2020


Ответы (2)


Концепция «80-й порт для http» не работает. Когда компьютер просматривает веб-страницы, только сервер использует порт 80, в то время как клиент будет использовать случайный номер порта. Сервер отвечает подключенным портом назначения, предоставленным клиентом. Порт 80 предназначен только для того, чтобы выбить дверь веб-сервера.

Что делает NAT, так это транслирует исходящие пакеты всех этих 4 компьютеров таким образом, чтобы их исходные порты не дублировались. Когда NAT получает пакет, он проверяет, можно ли преобразовать подключенный порт назначения, и, если возможно, транслирует его в локальную сеть.

person billyswong    schedule 23.05.2010

Каждое уникальное 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}}, что позволяет ему выяснить, на какую внутреннюю машину отправлять ответные пакеты.

person Nikolai Fetissov    schedule 23.05.2010
comment
У меня вопрос, а если сервер использует NAT на своей стороне? Будет ли порт назначения заменен чем-нибудь после прибытия пакета? Например, когда мы общаемся с публичным портом 80 сервера, может ли быть, что фактический порт на стороне сервера - это какой-то другой номер? Если да, значит ли это, что серверные программисты должны убедиться, что порт 80 не используется ни для чего другого? - person mercury0114; 10.04.2016
comment
NAT прозрачен для приложений, поэтому разработчика сервера будет интересовать только номер порта, который прослушивает его процесс. - person Nikolai Fetissov; 11.04.2016