Вопрос: Если предположить, что на моем домашнем интернет-маршрутизаторе включена технология PAT, как мой маршрутизатор узнает, на какие хосты следует демультиплексировать пакеты при получении пакетов из Интернета?
Пример: В моей локальной сети есть 2 хоста. Каждый отправляет запрос на один и тот же сервер для получения одной и той же информации. Каждый хост использует один и тот же порт. Как маршрутизатор узнает, какие пакеты куда должны идти? Каждый пакет должен иметь один и тот же адрес источника и назначения. Порты должны быть одинаковыми, если только нет какой-то магии портов, о которой я не знаю.
Моя догадка: Я собираюсь предположить, что есть какие-то метаданные, о которых я не знаю, которые прикреплены к пакетам, которые каким-то образом идентифицируют каждый отдельный хост в частной сети. Но это, похоже, не работает в следующем примере.
Пример: Некий хост(другой) в другой сети хочет отправить пакет хосту(моему) в моей локальной сети. Другой хост отправляет пакет на публичный IP-адрес моей сети. Но поскольку мой хост не ожидает пакет, он не мог предоставить моему маршрутизатору никаких метаданных о том, как демультиплексировать пакет. А другой хост не знает никаких метаданных, кроме публичного IP-адреса моей сети.
решение1
Устройства, выполняющие трансляцию сетевых адресов, поддерживают таблицу трансляции, которая включает информацию об исходных и целевых IP-адресах и номерах портов. Сочетание исходного IP-адреса и номера порта, а также конечного IP-адреса и номера порта создает уникальный идентификатор для каждого сеанса.
решение2
Исходные порты.
Каждый клиент внутри NAT назначает случайный порт с большим номером в качестве исходного порта своего соединения с сервером.
Когда маршрутизатор транслирует запрос, он также устанавливает исходный порт и отслеживает, какой исходный порт он назначил какому соединению. Таким образом, веб-сервер отправляет обратно что-то с исходным портом 80 и портом назначения 35201 (или любым другим), маршрутизатор ищет, какое из сетевых клиентских подключений он назначил как 35201.
Обратите внимание, что это означает, что веб-сервер, вероятно,нетзнать, какой исходный порт запросил исходный клиент, а также на какой исходный порт маршрутизатор его перевел. (Исходный порт в запросе становится портом назначения в ответе.)
решение3
Я просто хочу продолжить ответы выше, касающиеся примера, который вы упомянули о внешнем устройстве, пытающемся связаться с вашим внутренним хостом. Исходя из вышесказанного, по умолчанию ваш маршрутизатор будет сбрасывать трафик, инициированный из Интернета, поскольку он не знает, какой внутренний хост в вашей локальной сети должен получать трафик, поскольку для этого еще не создана запись в таблице NAT маршрутизатора.
Чтобы разрешить входящий трафик в вашу локальную сеть из Интернета, нужно определить определенное правило переадресации портов, также известное как статический NAT, чтобы вы сообщали маршрутизатору, когда трафик из Интернета поступает, например, на порт 80, что нужно перенаправить этот трафик на мой веб-сервер в локальной сети по IP-адресу и порту 192.168.1.5:80.