35

Для каждой системы в сети имеется 65536 портов , и каждое соединение или отправка / получение будут использовать один из них.

Мой вопрос: что произойдет, если у нас будет 65536+1 соединение ?!

Я знаю, что это не происходит обычным образом, но мне любопытно узнать, как операционные системы справляются с этим.

1 ответ1

61

Имейте в виду, что система может обрабатывать более 65536 одновременных подключений, поскольку не обязательно каждое из них использует отдельный порт.

Соединение TCP или поток UDP определяется 4-мя кортежами:

(source IP address, source port, destination IP address, destination port)

Таким образом, даже если у вас есть веб-сервер с одним IP-адресом и один пакет программного обеспечения HTTP-сервера, который прослушивает только порт 80, теоретически он может обрабатывать 65536 подключений на каждый подключенный к нему IP-адрес клиента. Таким образом, 64Ki-соединения с IP-адреса клиента 1, плюс 64Ki-соединения с IP-адреса клиента 2 и т.д.

Таким образом, протоколы поддерживают, в первом приближении, 2 48 подключений / потоков к одному порту TCP или UDP по одному адресу IPv4. Рассмотрим как TCP, так и UDP вместе, а также адресное пространство IPv4 и космически / комично большое адресное пространство IPv6, и вы можете видеть, что сами протоколы вряд ли когда-либо станут источником ограничения количества одновременных соединений, которые хост может справиться.

Точно так же в протоколах TCP или UDP нет ничего, что мешало бы клиентскому компьютеру использовать один исходный порт на одном IP-адресе для создания нескольких исходящих соединений с различными адресами и портами сервера. Иногда сетевые API данной ОС могут не облегчать эту задачу, но важно помнить, что, скажем, почтенный старый API-интерфейс «[BSD] Sockets» - это всего лишь один API для TCP и UDP. TCP и UDP могут иметь возможности, которые не предоставляются традиционным API Sockets.

Таким образом, число одновременных TCP-соединений или UDP-потоков, которые может обрабатывать данный хост, ограничено не столько номерами портов, сколько системными ресурсами, такими как пространство ОЗУ и время ЦП, которое требуется для отслеживания всех этих соединений и их обслуживания. Также специфичные для реализации детали ОС могут накладывать искусственные ограничения. Например, в философии Unix "все является файлом" может существовать файловый дескриптор для каждого соединения TCP или потока UDP. Если ваше ядро Unix имеет ограничение на количество дескрипторов файлов, которое оно может отслеживать, то ограничение дескрипторов файлов является искусственным ограничением на количество одновременных TCP-соединений или UDP-потоков, которые может обработать ваше ядро.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .