Как два компьютера соединяются с тем же внешним адресом через NAT?

Если у меня есть два внутренних компьютера, соединяющиеся с тем же внешним IP-адресом через маршрутизатор NAT, как маршрутизатор в состоянии получить трафик к корректному внутреннему компьютеру? Именно мое понимание, что NAT передает входящие пакеты к компьютеру, недавно отправленному исходящие пакеты в IP-адрес отправителя [входящего пакета]. Так как оба компьютера отправляют к тому же адресу, маршрутизатор передает пакет обоим? Если это так, действительно ли это - обязанность клиентского программного обеспечения определить, какие пакеты релевантны?

Действительно ли возможно, если оба компьютера пытаются соединиться с тем же портом?

17
задан user241146 30 December 2009 в 20:27
поделиться

5 ответов

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

Имея несколько систем, использующих один и тот же модем

Когда вы запускаете веб-браузер и переходите на www.google.com:80, ваш браузер получает/поиск бесплатного несистемного сопряженного порта из системы для прослушивания. Допустим, спрягающий порт 10000. Порт прослушивающего устройства служит для получения обратно http-потока от Google.

Затем ваш ребенок, сидящий рядом с вами, кстати, также просматривает www.google.com:80 и его/ее Google-сессию на игровой станции или xbox - чему бы то ни было кстати также назначен конъюгатный порт 10000.

Оба вы сидите за кабельным модемом, а за кабельным модемом - ваш беспроводной маршрутизатор. И обе ваши системы находятся позади беспроводного маршрутизатора - все сидят в этой последовательности, топологии сети.

Чтобы предотвратить столкновение адресов портов на маршрутизаторе/модеме

Давайте скажем, что ваша кабельная компания DHCP назначает адрес вашего модема ip4 72.72.72.72. Но ваш беспроводной маршрутизатор DHCP назначает 192.168.0.10 вашей системе, а 192.168.0.11 - системе вашего ребенка.

Когда кадр, несущий информацию о портах вашего слушателя, проходит через NAT-маршрутизатор, он транслирует либо один, либо оба порта прослушивания. Допустим, порт 15000 для вашей страницы и порт 16000 для вашей детской страницы.

Затем ваш беспроводной маршрутизатор посылает ваши запросы на сервер Google, как идущие с 72.72.72.72.72:15000 и 72.72.72.72:16000.

Затем сервер Google отвечает индивидуально на 72.72.72. 72:15000 и 72.72.72.72:16000, и когда беспроводной маршрутизатор сталкивается с ответом, он попадает в карту, которую он сохранил, и переводит 72.72.72.72:15000 в 192.168.0.10:10000, чтобы достичь вашей системы, но переводит 72.72.72.72:16000 в 192.168.0.11:10000, чтобы добраться до системы вашего ребенка.

Запущенные web/game/ftp/etc серверы

Но что, если на вашей системе запущен web-сервер или ftp-сервер. Что если у вас две системы, и у обеих есть веб-сервер, а оба веб-сервера прослушивают порт 80?

Допустим, локальный ip-адрес, зарегистрированный/назначенный беспроводным маршрутизатором системы первого веб-сервера, равен 192.168.0.30, а второй - 192.168.0.40.

У беспроводного маршрутизатора будет конфигурационная веб-страница, обычно по умолчанию 192.168.0.1:80, если только вы ее не изменили. На странице была бы вкладка, на которой можно было бы определить/зарезервировать отображение портов приложений.

Вы могли бы зарегистрироваться на беспроводном маршрутизаторе, чтобы зарезервировать отображение

192.168.0.30:80 => outgoing port 8080
192.168.0.40:80 => outgoing port 8088

Так что вам нужно будет позвонить друзьям, чтобы ваши веб-серверы/игровые серверы были адресованы по следующим адресам 72.72.72.72:8080 и 72.72.72.72:8088 соответственно, где беспроводной маршрутизатор будет исключать свои порты 8080 и 8088 из собственного динамического использования NAT.

Конечно, 72.72.72.72 не хуже, чем только до того, как ваш DHCP-провайдер решит обновить ip4-адрес вашего модема, скажем, 72.72.90.200. После чего вам нужно будет позвонить/позвонить своим друзьям и сказать. Адреса серверов изменились на 72.72.90.200:8080 и 72.72.90.200:8088 соответственно. Или вы можете подписаться на службу динамического dns (ddns) для использования именованного домена, где служба ddns должна будет установить простую утилиту heartbeat в вашей системе, чтобы помочь им отслеживать изменение адресов. Перевод DDNS является отдельной задачей/стратегией.

NAT модемы

Новые контракты с провайдерами предоставляют вам модем с NAT. Если это так, то вы должны выключить либо модем, либо беспроводной маршрутизатор. Вы не должны использовать оба - в чем смысл перевода дважды, потому что NAT просто для предотвращения столкновения адресов. Когда вы отключаете NAT от вашего беспроводного маршрутизатора, он может работать в качестве концентратора, а не маршрутизатор больше, так что вы можете подключить его к модему, используя один из его LAN-разъем, а не бросать его WAN-разъем.

.
32
ответ дан 30 November 2019 в 11:27
поделиться

Уже даны хорошие ответы, но вот еще один пример:

    HOST A addr         HOST B addr
    10.1.0.2:4040       10.1.0.3:4040
-----------------------------------------
NAT 200.50.50.28:4040   200.50.50.28:4041 (what external host sees)

200.50.50.28 - это глобальный (Интернет) IP-адрес маршрутизатора.

Каждый номер порта уникален в таблице NAT. И, конечно же, маршрутизатор выполняет всю работу грязной по изменению адресов источника и назначения прозрачно.

.
2
ответ дан 30 November 2019 в 11:27
поделиться

Маршрутизатор управляет "исходными" портами, которые являются отдельными для каждого компьютера. В то время как вы можете подключаться к порту 80 "назначения", маршрутизатор может назначить порт источника какому-нибудь порту с высоким номером.

Википедия подводит итог, так как

Трансляция сетевых адресов включает в себя переписывание источника и/или IP-адреса назначения и, как правило, также номера портов TCP/UDP IP пакеты, проходящие через NAT. Контрольные суммы (как IP, так и TCP/UDP) должны быть также будут переписаны с учётом изменения.

4
ответ дан 30 November 2019 в 11:27
поделиться

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

1
ответ дан 30 November 2019 в 11:27
поделиться

RFC3022 предоставляет много информации о том, как это работает

.
1
ответ дан 30 November 2019 в 11:27
поделиться
Другие вопросы по тегам:

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