Я просто подумал, и мне в голову пришла эта идея.
Допустим, у меня есть хосты A и B в моей локальной сети. У меня есть маршрутизатор и хост C в Интернете. Я знаю, что при инициировании соединения исходный порт выбирается случайным образом, но что произойдет, если два хоста выберут одно и то же при инициировании одного и того же хоста: порт?
A:10123 -> C:80
B:10123 -> C:80
Как маршрутизатор узнает, какие пакеты принадлежат каждому?
Ура.
Тот факт, что хосты A и B выбрали порт 10123, не означает, что это порт, который использует маршрутизатор. Маршрутизатор подключается к хосту C через порт источника по своему выбору. Итак, связь выглядит примерно так:
router
+--------------------+
A:(src:10123, dest:80) -> | A:10123 -> C:43775 | -> C:80
B:(src:10123, dest:80) -> | B:10123 -> C:43776 | -> C:80
+--------------------+
Я с Лаурентиу, маршрутизатор отправит пакет на основе IP-адреса из A или B. Ответный пакет будет выглядеть так:
Source IP: C
Source Port: 80
Destination IP: A (or B)
Destination Port 10123
Маршрутизатор направит пакет на правильный хост.
Если маршрутизатор настроен с PAT, маршрутизатор назначит IP NAT / PAT и новые случайные исходные порты для исходящих пакетов.
Маршрутизатор имеет таблицу маршрутизации с IP-адресом. Он запоминает конкретный IP-адрес, чтобы определить, какой хост сделал запрос, и направить этот ответный пакет на этот конкретный хост.