О преобразовании сетевых адресов (NAT)? - PullRequest
3 голосов
/ 23 мая 2010

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

Ответы [ 2 ]

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

5 голосов
/ 23 мая 2010

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

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

...