Прежде всего, «порт» - это просто число. Все, что действительно представляет собой «соединение с портом», - это пакет, номер которого указан в поле заголовка «порт назначения».
Теперь есть два ответа на ваш вопрос, один для протоколов с отслеживанием состояния и один для протоколов без сохранения состояния.
Для протокола без сохранения состояния (т. Е. UDP) проблем нет, поскольку «соединений» не существует - несколько человек могут отправлять пакеты на один и тот же порт, и их пакеты будут поступать в любой последовательности. Никто никогда не находится в «связанном» состоянии.
Для протокола с состоянием (например, TCP) соединение идентифицируется 4-мя кортежами, состоящими из портов источника и назначения, а также IP-адресов источника и назначения. Таким образом, если две разные машины подключаются к одному и тому же порту на третьей машине, существует два разных подключения, поскольку исходные IP-адреса различаются. Если одна и та же машина (или две за NAT или иным образом совместно использующие один и тот же IP-адрес) дважды подключается к одному удаленному концу, соединения дифференцируются по порту источника (который обычно является случайным портом с большим номером).
Проще говоря, если я дважды подключусь к одному и тому же веб-серверу с моего клиента, два соединения будут иметь разные исходные порты с моей точки зрения и порты назначения с веб-сервера. Таким образом, нет никакой двусмысленности, даже если оба соединения имеют одинаковые IP-адреса источника и назначения.
Порты - это способ мультиплексировать IP-адреса, чтобы разные приложения могли прослушивать одну и ту же пару IP-адрес / протокол. Если приложение не определяет собственный протокол более высокого уровня, невозможно мультиплексировать порт. Если два соединения, использующие один и тот же протокол, имеют одинаковые IP-адреса источника и назначения и одинаковые порты источника и назначения, они должны быть одинаковыми.