Когда говорят «сервер слушает 443 порт», легко представить один socket, который принимает все HTTPS-соединения.
Но TCP идентифицирует соединение не только по порту назначения.
Для него важна комбинация:
src IP + src port + dst IP + dst port
Например, сервер слушает:
10.0.0.10:443
А клиенты создают:
10.0.1.20:49152 → 10.0.0.10:443 10.0.1.21:49153 → 10.0.0.10:443 10.0.1.22:49154 → 10.0.0.10:443
Все три соединения приходят на один
:443, но TCP воспринимает их как разные соединения.И именно поэтому веб-сервер может одновременно обслуживать тысячи клиентов через один порт.
Но есть ещё интереснее.
Один и тот же порт 443 могут одновременно слушать несколько процессов, если используется
SO_REUSEPORT.Например:
ss -lntp | grep :443
несколько worker-процессов могут иметь собственные listening sockets на одном
IP:443.Ядро само распределяет новые соединения между ними.
При этом уже установленное соединение не прыгает между процессами: выбранный socket становится владельцем конкретного TCP-потока.
Поэтому фраза «порт 443 занят веб-сервером» на практике скрывает сразу несколько уровней:
443 - номер портаIP:443 - endpoint4-tuple - конкретное TCP-соединениеsocket - объект, через который процесс работает с этим соединениемИменно поэтому один
:443 способен обслуживать огромное количество независимых TCP-соединений одновременно.N.A.

