Как определяется исходный порт для HTTP? Есть ли когда-либо столкновение в NAT?

Я знаю, что когда HTTP-запрос сделан, пакеты отправляются из кажущегося случайного порта с высоким номером (например, 4575) на клиенте на порт 80 на сервере. Затем сервер отправляет ответ на тот же самый высокий номер порта, который маршрутизатор знает, чтобы перенаправить его на клиентский компьютер, и все завершено.

Мой вопрос: Как определяется порт возврата (4575 в этом примере)? Является ли он случайным? Если да, то в каком диапазоне? Существуют ли какие-либо ограничения на это? Что происходит, например, если два компьютера в локальной сети отправляют HTTP-запросы с одним и тем же исходным портом на один и тот же веб-сайт? Каким образом маршрутизатор знает, какой из них будет маршрутизироваться на какой компьютер? Или, может быть, такая ситуация достаточно редка, что никто не мешал ей защищаться?

Ответы

Ответ 1

NAT будет определять/определять исходящий порт для NAT-соединения/сеанса через собственные внутренние средства. Значение, это будет варьироваться в зависимости от реализации NAT. Это означает, что любые ответы назад вернутся к тому же самому исходящему порту.

Что касается вашего вопроса:

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

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

Диаграмма:

enter image description here