Как NAT совместно использует один общедоступный IPv4-адрес для нескольких частных IPv4-адресов [закрыто]

10

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

Допустим, у меня есть домашняя сеть с 192.168.0.1 (IP.1) и 192.168.0.2 (IP.2), и мы оба играем в Counter Strike, поражая один и тот же внешний сервер.

Как мой домашний маршрутизатор узнает, какой пакет отправится на IP.1? Я часто читаю вещи с NAT и адресами xxx.xxx/y. ** Где записана часть / y в стеке TCP / IP?

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

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

Ответы:

14

(Для следующего я буду игнорировать любые поиски DNS или действие второго уровня, так как это не относится к истории NAT.)

Любое TCP-соединение состоит из четырех частей:

<source IP> <source port> <destination IP> <destination port>

Вкратце: IP-адрес назначения используется для получения пакета на правильном компьютере, порт назначения используется для передачи пакета на этом компьютере в правильную программу / сеанс. Исходный IP-адрес используется, чтобы знать, куда отправлять любые ответы. То же самое касается порта источника. Когда отправляется ответ, источник и пункт назначения просто меняются местами.

Начнем с двух компьютеров без NAT:

  • У компьютера есть IP 1.1.1.1
  • Веб-сервер имеет IP 3.3.3.3
  • Стандартный порт для HTTP 80

Когда компьютер запрашивает веб-страницу, он сначала выбирает случайный неиспользуемый номер порта из случайного диапазона (1024-65535). Давайте выберем 2345. Затем произойдет следующая последовательность действий: компьютер отправит свой пакет с: IP-адрес 1.1.1.1источника, порт источника 2345, IP-адрес 3.3.3.3назначения, порт назначения 80. Пакеты поступают на веб-сервер, он видит свой собственный IP и порт 80, поэтому он знает, что это запрос на веб-страницу. Затем веб-сервер отправляет веб-страницу обратно в пакетах с исходным IP-адресом 3.3.3.3, исходным портом 80, целевым IP-адресом 1.1.1.1, целевым портом 2345. Компьютер получает эти пакеты и знает, для какой запрашиваемой веб-страницы это было, из-за номера порта 2345.

Эти комбинации портов часто пишутся так: 1.1.1.1:2345и 3.3.3.3:80.

Теперь количество компьютеров в Интернете намного превышает число доступных адресов IPv4. Для сохранения адресного пространства был введен набор частных диапазонов адресов, которые можно свободно использовать для совместного использования адресов. Эти диапазоны упоминаются как RFC1918 и следующие:

  • 192.168.0.0 - 192.168.255.255
  • 172.16.0.0 - 172.31.255.255
  • 10.0.0.0 - 10.255.255.255

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

У нас есть два компьютера:

  • A: 192.168.0.1и B:192.168.0.2
  • Их шлюз имеет публичный IP 1.1.1.1.
  • Мы держим тот же веб-сервер.
  • Оба компьютера хотят одну и ту же веб-страницу с одного и того же сервера.

Сначала оба компьютера выбирают случайный порт: скажем, 192.168.0.1:2345и192.168.0.2:5432 .

Компьютер А отправляет свой пакет с источником 192.168.0.1:2345и адресатом 3.3.3.3:80. Шлюз переводит этот пакет в источник 1.1.1.1:2345назначения 3.3.3.3:80и запоминает, что любые ответы на эту комбинацию отправляются 192.168.0.1. Таким образом, когда он получает ответ с источником 3.3.3.3:80и адресатом 1.1.1.1:2345, он переводит его в источник 3.3.3.3:80и пункт назначения.192.168.0.1:2345 и отправляет пакет.

Компьютер B отправляет свой пакет с источником 192.168.0.2:5432и адресатом 3.3.3.3:80. Шлюз переводит этот пакет в источник 1.1.1.1:5432назначения 3.3.3.3:80и запоминает, что любые ответы на эту комбинацию отправляются 192.168.0.2. Таким образом, когда он получает ответ с источником 3.3.3.3:80и адресатом 1.1.1.1:5432, он переводит его в источник 3.3.3.3:80и пункт назначения 192.168.0.2:5432и отправляет пакет.

Если оба компьютера выбрали один и тот же номер порта источника, шлюз просто выберет другой свободный номер порта случайного источника и не забудет также перевести номер порта. Это иногда называют PAT (трансляция адреса порта). Это в основном подмножество NAT.

Есть несколько реализаций для всего этого. Шлюз может просто помнить «Компьютер X использовал порт источника Y» и пересылать что-либо с портом Y на компьютер X. Он может помнить, что Компьютер X использовал порт источника Y и пункт назначения Z »и только перенаправлять что-либо из порта Z в порт Y обратно в компьютер X. Или существует вариант, что он запоминает весь кортеж и отправляет на компьютер X только трафик, соответствующий ip и порту источника / назначения.

JelmerS
источник
Спасибо. Я думал, что любой клиент отправит со своим портом 80 на другой порт 80. Я думаю, что многие неспециалисты верят в то же самое.
Николас Зозол