Обычный ответ таков: сначала вы просто так не делаете.
Клиент обычно подключается к серверу с несвязанным сокетом, что означаетне указал локальный порт, на который будут получены ответы.Сервер будет использовать bind
для указания локального порта, а затем будет прослушивать на этом порту подключения клиентов.
Когда клиент подключается с помощью несвязанного сокета, стек TCP выберет номер порта, которыйне используется в настоящее время, и назначьте его этому соединению.Когда он отправляет запрос на сервер, сервер ответит на номер порта, который был назначен.На стороне клиента стек TCP будет смотреть на номер порта в пакете и направлять его на тот процесс, которому был присвоен этот номер порта.
Таким образом, клиент не будет использовать порт 4321 - онЯ буду использовать любой порт, назначенный ему стеком.Когда другой процесс на той же машине подключается к тому же серверу, он также не будет использовать порт 4321 - он будет использовать другой порт , который ему назначен.Сетевой стек отвечает за то, чтобы каждый из них получал уникальный номер порта.
Для чего это стоит, порты TCP делятся на три диапазона.От 0 до 1023 - «хорошо известные» порты для серверов, таких как FTP, SMTP, HTTP, POP и т. Д. Они предназначены для использования серверами, и, возможно, ОС предпримет некоторые специальные шаги для их защиты.Например, типичная ОС потребует предоставления каких-либо привилегий уровня администратора / root процессу, который сможет использовать эти порты.
От 1024 до 49151 - зарегистрированные номера портов.Они обычно более свободно контролируются, чем хорошо известные порты.Почти каждый может настроить их прослушивание, но IANA поддерживает реестр конкретных целей для определенных портов.Согласно реестру, порт 4321 предназначен для удаленного протокола whois.
От 49152 до 65535 - динамические порты - когда клиент подключается к серверу, он обычно получает номер локального порта в этом диапазоне.Конечно, вы можете написать сервер и привязать его к номеру порта в этом диапазоне, если вы предпочитаете (например, для тестирования).Когда / если вы это сделаете, стек будет отслеживать это, поэтому он не будет пытаться использовать этот порт для других целей.