Что происходит, если две локальные системы загружают один и тот же ресурс через один и тот же порт?

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

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

Есть ли какой-нибудь механизм в маршрутизаторе или сервере, чтобы обнаружить это? Или возможно ли такое поведение вообще?

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


Обновление : Из комментариев я понял, что был недостаточно ясен, поэтому позвольте мне повторить это на примере:

Меня интересует только порт "источника" устройств. Предположим, у меня есть два ноутбука (192.168.2.10 и 192.168.2.11), оба они скачивают один и тот же файл с одного и того же сервера где-то в интернете. Каждая из них имеет операционную систему, которая генерирует случайный порт, поэтому IP-адрес источника и порт источника будут выглядеть следующим образом: 192.168.2.10:6321 and 192.168.2.11:7132. Я думал, что в NAT, маршрутизатор будет устанавливать свой (публичный) IP адрес вместе с портами ноутбуков, так что если публичный IP адрес домашнего маршрутизатора будет 65.82.23.32, эти два пакета получат эти IP и порт источника соответственно: 65.82.23.32:6321 и 65.82.23.32:7132.

Теперь, когда ответ получен, маршрутизатор может определить, какой пакет предназначен для какого ноутбука по номерам портов, верно? Пока все хорошо. Но что произойдет, если случайно или намеренно два ноутбука генерируют один и тот же порт источника? Например: 192.168.2.10:6000 и 192.168.2.11:6000. Теперь маршрутизатор будет устанавливать свой публичный IP-адрес в качестве IP-адреса источника, как и раньше, но теперь, если он попытается использовать эти номера портов, эти пакеты будут иметь точно такой же IP-адрес источника и номер порта источника, как : 65.82.23.32:6000 and 65.82.23.32:6000.

Здесь я запутался, что когда ответ приходит обратно, как маршрутизатор может решить, какой пакет предназначен для какого ноутбука?

После ответа @mfinni, я заметил, что PAT работает не так! NAT устройство (здесь маршрутизатор) назначает уникальные порты каждому отдельному ноутбуку (частный IP адрес), затем пакеты посылаются с этими уникальными портами (например 7777 и 7778). Таким образом, когда ответ приходит обратно, становится ясно, какой пакет предназначен для какого ноутбука, исходя из портов, тогда маршрутизатор преобразует эти 65.82.23.32:7777, 65.82.23.32:7778 в --> 192.168.2.10:6000, 192.168.2.11:6000 соответственно.

11
задан 15 August 2021 в 19:13
4 ответа

TCP-соединение (которое лежит в основе HTTP и многих других протоколов) однозначно (в данный момент времени) определяется 4 параметрами:

  • Локальный IP
  • Локальный порт
  • Удаленный IP-адрес
  • Удаленный порт

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

Аналогичным образом, если два запроса от двух устройств проходят через одно и то же устройство NAT, устройство NAT будет использовать разные исходные порты. В зависимости от устройства оно может либо сохранить исходные порты источника (и изменить только один в случае конфликта), либо всегда назначать новый исходный порт независимо от исходного исходного порта.

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

43
ответ дан 16 August 2021 в 08:15

Таблица NAT знает, что исходный порт на каждом клиенте отличается, поэтому она не может случайно отправить неправильный пакет не тому внутреннему клиенту. Устройство NAT также назначает разные исходящие порты, и они НЕ совпадают между разными внутренними клиентами.

11
ответ дан 15 August 2021 в 19:32

Когда вы говорите о NAT, вы, вероятно, имеете в виду NAPT. Что изменяет исходный порт (по крайней мере, если это необходимо) в устройстве NAT. Таким образом, исходный порт изменится.

Например, iptables MASQUERADE

При выполнении NAT в этом случае также необходимо «отслеживание соединения», которое просто отслеживает, какой «внешний порт» относится к какому «внутреннему клиенту и порту». ". В iptables вы часто будете видеть правило RELATED,ESTABLISHED, которое использует. Вы также обнаружите, что если маршрутизатор, поддерживающий NAPT, будет перезапущен, все соединения будут разорваны. В то время как маршрутизатор без NAT обычно просто возобновляет любые соединения. (при условии, что перезапуск завершается до истечения времени ожидания клиента)

5
ответ дан 15 August 2021 в 20:58

Маршрутизатор не использует тот же номер исходного порта, который ноутбуки генерируют в своих исходящих запросах к ГЛОБАЛЬНОЙ сети, он генерирует свои собственные уникальные исходные порты. Таблица NAT в маршрутизаторе преобразует laptop1:6000 в publicip:N и laptop2:6000 в publicip:M. Затем он знает, куда направлять входящие пакеты, через какой порт поступает трафик из Интернета.

5
ответ дан 16 August 2021 в 15:14

Теги

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