Как IP-пакеты ответа достигают своего назначения в частной локальной сети? [Дубликат]


26

Это небольшой теоретический вопрос, который меня смущал довольно долго.

По сути, если мы находимся в частной локальной сети и хотим, чтобы входящие пакеты достигали, например, HTTP-сервера, расположенного на одной из машин, мы перенаправляем порты так, чтобы входящие пакеты доходили именно до этого компьютера.

Теперь я совершенно не понимаю, как «ответные» пакеты достигают своего места назначения внутри локальной сети, например, когда мы открываем веб-страницу или около того. Не могу найти полезную информацию на эту тему.

Я надеюсь, что кто-то может дать мне пару подсказок или связать меня с информацией, которая могла бы это объяснить. Спасибо.

РЕДАКТИРОВАТЬ: Я думаю, что я должен уточнить. Пример того, что я спрашиваю, может быть примерно таким:
1. Компьютер внутри локальной сети с одним внешним IP-адресом пытается загрузить веб-страницу с веб-сервера вне этой локальной сети (в основном в Интернете)
2 Веб-сервер отвечает и отправляет веб-страницу обратно на этот компьютер.

В настоящий момент меня смущает то, как маршрутизатор узнает, на какой компьютер отправлять входящие данные (если маршрутизатор подключен к локальной сети с несколькими компьютерами) без переадресации предыдущего порта.


Только что посмотрел симпатичное видео на тему: Трансляция сетевых адресов - Компьютерный
файл

Ответы:


56

Хотя вопрос был полностью покрыт. Я чувствую, что этот процесс лучше всего описывать шаг за шагом.

Для этого примера я сижу в частной локальной сети, подключенной к Интернету через маршрутизатор. Поскольку наша сеть использует один публичный IP-адрес, мы используем NAT.

Поэтому, когда я запрашиваю страницу, superuser.comкоторая будет генерировать много IP-пакетов. Давайте посмотрим на один.

IP-пакет
Источник: 192.168.1.12(мой IP)
Место назначения: 64.34.119.12(superuser.com)

Теперь моя система, скорее всего, настроена аналогично той, о которой идет речь. У меня есть свой собственный IP-адрес ( 192.168.1.12), маска подсети ( 255.255.255.0) и шлюз по умолчанию ( 192.168.1.1). Теперь, поскольку мое поле Destination в моем IP-пакете указывает на сеть, отличную от моей, оно отправляется на мой шлюз по умолчанию (а не на компьютер напрямую).

Но как пакет может добраться до шлюза по умолчанию, если пункт назначения указывает куда-то еще?

Ethernet

Это просто, потому что для этого мы используем адресацию протокола Ethernet. Мы просто устанавливаем наш IP-адрес назначения в пакете IP и MAC-адрес нашего шлюза по умолчанию в качестве пункта назначения в кадре Ethernet .

Теперь это будет гарантировать, что наш шлюз по умолчанию получит пакет для superuser.com. Ура!

Теперь шлюз имеет наш пакет и может отправить его прямо на своем пути. Но чтобы убедиться, что он получит ответ, сначала нужно заменить адрес источника пакета (в противном superuser.comслучае попытался бы отправить ответ на какое-либо (возможно) несуществующее устройство с моим IP-адресом в их сети. Теперь это не будет очень приятно.)
Так что мой маршрутизатор разместит свой публичный IP-адрес в поле Source :

IP Packet
Источник: 92.69.127.243(мой публичный IP)
Место назначения: 64.34.119.12(superuser.com)

Теперь та же самая игра продолжается со всеми маршрутизаторами в мире, пока пакет, наконец, не придет superuser.comи не будет получен ответ.

Ответ

Ответ IP Packet
Источник: 64.34.119.12(superuser.com)
Пункт назначения: 92.69.127.243(мой публичный IP)

Хорошо, ответ дошел до моего роутера, что теперь? Как мой маршрутизатор теперь знает, на что отправить ответ 192.168.1.12?

TCP

Что ж, на самом деле это работает, потому что мы рассмотрели только части связи по IP и Ethernet. То, что делает эту работу, является частью TCP.

Скорее всего, вы знаете, что веб-серверы обычно работают через порт 80. IP не имеет понятия о портах . Это происходит от TCP . В TCP у нас (как и в IP) есть порт источника и назначения .

Мой TCP-пакет для superuser.com
Источник: 192.168.1.12(мой IP-адрес)
Исходный порт: 11111(порт, составленный моим компьютером)
Пункт назначения: 64.34.119.12(superuser.com)
Порт назначения:80

Когда ваш маршрутизатор отправит этот начальный пакет (который адресован superuser.comна порт 80), он поместит туда новый порт источника (например 12345).
И это важная часть! Он запомнит эту замену!

TCP-пакет моего маршрутизатора к superuser.com
Источник: 92.69.127.243(мой общедоступный IP-адрес)
Исходный порт: 12345(порт, созданный моим маршрутизатором)
Пункт назначения: 64.34.119.12(superuser.com)
Порт назначения:80

Таким образом, пакет ответа, полученный маршрутизатором, на самом деле выглядит следующим образом:
Пакет ответа TCP от superuser.com
Источник: 64.34.119.12(superuser.com)
Исходный порт: 80
Пункт назначения: 92.69.127.243(мой публичный IP-адрес)
Порт назначения: 12345(порт, составленный моим маршрутизатором)

Поэтому теперь он получает этот пакет и видит, что для порта, который он помнил ранее, был назначен операциям NAT для IP-адреса 192.168.1.12(мой IP-адрес).

Ответ TCP Packet от моего маршрутизатора
Источник: 64.34.119.12(superuser.com)
Исходный порт: 80
Пункт назначения: 192.168.1.12(мой IP-адрес)
Порт назначения: 11111(порт, составленный моим компьютером)


1
Я отредактировал ваш ответ, он не ясно показал, что происходит с номерами портов. Я добавил больше примеров промежуточных шагов и номеров портов, где каждый шаг.
Скотт Чемберлен

1
@OliverSalzburg Я искал ответ на тот же вопрос, и твое объяснение помогло мне вспомнить, просто быстрый вопрос по этому вопросу. Хотите знать, как долго маршрутизатор будет хранить эти обратные сопоставления (исходный порт), как будто бы ему не хватило места, если он продолжал делать это для стольких запросов, слишком часто он сбрасывает их?
Ахмед

@ Ахмед: объем памяти для отслеживания этой информации ограничен. Есть 65536 возможных номеров портов, они хранятся в 2 байтах. Таким образом, запоминание IP-адреса (4 байта) для каждого порта составит до 65536 x 4 байта = 262144 байта = 256 кБ. Однако в маршрутизаторе реализована специфика, это не так много памяти.
Der Hochstapler

@ Оливер Отличный ответ, именно то, что я искал! У меня есть несколько вопросов - (1) «та же игра продолжается со всеми маршрутизаторами в мире» - это точно? Конечно, поле источника не будет продолжать заменяться на каждом шаге? (2) Запоминает ли маршрутизатор долгосрочные открытые порты или регулярно отбрасывает их для неотвечающих запросов? (3) Означает ли это, что хакер может пропустить пакеты через брандмауэр вашего маршрутизатора с помощью атаки «человек посередине»: отслеживание исходящих пакетов TCP, а затем нацеленность на открытый порт TCP маршрутизатора с поддельным IP-адресом источника, соответствующим вашему назначению?
Джон Бентли

1
Как ответ на пинг ICMP возвращается на компьютер в локальной сети? Есть ли что-то похожее на порт для TCP? Как насчет других протоколов?
Жан

11

Трансляция сетевых адресов . Вкратце, когда маршрутизатор шлюза частной локальной сети заменяет адрес источника частной локальной сети собственным публичным адресом, он каким-то образом модифицирует пакет, например, присваивая уникальный и в противном случае локально бессмысленный номер порта, который он сопоставляет с исходным узлом локальной сети, и исходящий запрос. , Он запоминает это сопоставление портов, поэтому, когда ответ возвращается к общедоступному IP / уникальному порту #, он (маршрутизатор) знает, как отменить отображение этого на один из его исходных узлов. Это также, как вы можете запустить несколько вкладок, браузеров или экземпляров браузера, и ответы на каждый запрос браузера возвращаются в правильный браузер и вкладку.


2
JRobert: А как насчет IP-протоколов (например, ICMP), кроме tcp или udp, которые не имеют номера порта?
Ури

0

Когда исходный пакет поступает на внешний интерфейс маршрутизатора, он изменяет IP-адрес назначения пакета в соответствии с конфигурацией переадресации портов и передает измененный пакет на внутренний интерфейс маршрутизатора (после обычного ARP, если необходимо).

Пакет достигает веб-сервера и все еще имеет внешний IP-адрес источника, который будет использоваться в качестве адреса назначения для любого ответа. Соответственно, сервер обращается к исходящим ответным пакетам обычным способом с IP-адресом получателя, равным IP-адресу источника запроса. Поскольку IP-адрес запрашивающей стороны является внешним, пакет адресован на уровне MAC внутреннему интерфейсу маршрутизатора.

Обратите внимание, что на каждом сетевом уровне существуют разные цели.


0

Переадресация портов обычно выполняется на маршрутизаторе или соседнем с ним устройстве. Когда устройство в локальной сети отправляет трафик другому устройству в той же локальной сети, маршрутизатор вообще не участвует. Движение даже не касается этого. Ваши правила переадресации портов не будут влиять на трафик между локальными сетями.

Ethernet был спроектирован с учетом топологии «шины», где каждый компьютер был физически подключен к одной и той же среде. В то время как современные коммутаторы оптимизируют поток трафика, изучая MAC-адрес на другом конце порта и соответственно реплицируя трафик, топология «шины» все еще остается. Все, что связано со стандартным коммутатором, может «напрямую» достигать чего-либо еще (при условии, что оно находится в той же подсети) без необходимости «проходить» через промежуточное устройство, такое как маршрутизатор.

Вы можете быть сбиты с толку, если устройство, к которому вы подключаете все компьютеры, имеет несколько портов «LAN» Ethernet, а затем один порт «WAN». Эти типы устройств фактически являются одновременно маршрутизатором и коммутатором в одном шасси.

Таким образом, если внутри вашего ЛВС-сервера есть адрес 192.168.1.55, чтобы получить доступ к нему внутри ЛВС, вам нужно будет ввести « http://192.168.1.55 » в адресной строке браузера. Роутер никогда этого не видит. Чтобы получить доступ к нему за пределами вашей локальной сети, вам потребуется ввести ваш внешний IP-адрес, т. Е. « Http://256.99.88.77 : {порт, который вы перенаправили сюда}» или что-то еще. Это действительно влияет на ваш маршрутизатор, на нем работает функция NAT маршрутизатора, а затем маршрутизатор отправляет его на 192.168.1.55.


0

Проще говоря, когда компьютер в частной локальной сети инициирует исходящее соединение, шлюз NAT автоматически создает для него сопоставление портов. Они примерно такие же, как сопоставления портов, которые вы вводили ранее: {общий порт, частный адрес, частный порт}, и используются примерно так же. Самая большая разница с динамическими сопоставлениями заключается в том, что шлюзу NAT часто приходится произвольно назначать публичные порты для сопоставлений, когда ожидаемый номер порта уже используется.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.