Как Маршрутизатор знает где к передаче пакетов

Если несколько компьютеров с локальными адресами (192.168.0.#) подключены к маршрутизатору, и каждый компьютер открывает веб-браузер и запрашивает страницу по HTTP, когда эти пакеты TCP:80 отосланы, маршрутизатор переключает локальный адрес со статическим IP маршрутизатора (т.е. Поставщик, данный IP), таким образом, сервер может ответить на соответствующий адрес.

Но то, как маршрутизатор знает, к которому компьютеру передать ответ HTTP, так как заголовок TCP не содержит локальный IP-адрес (делает это?), и все компьютеры используют порт 80?

Это имеет какое-либо отношение к MAC-адресам?

Как точно это работает?

72
задан 07.02.2010, 15:11

1 ответ

Большинство домашних маршрутизаторов использует особый случай 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.

81
ответ дан 07.12.2019, 08:10

Теги

Похожие вопросы