Для каждой системы в сети имеется 65536 портов , и каждое соединение или отправка / получение будут использовать один из них.
Мой вопрос: что произойдет, если у нас будет 65536 + 1 соединение ?!
Я знаю, что это не происходит нормальным образом, но мне любопытно узнать, как операционные системы справляются с этим.
networking
operating-systems
Омид Голпарвар
источник
источник
Ответы:
Имейте в виду, что система может обрабатывать более 65536 одновременных подключений, поскольку не обязательно каждое из них использует отдельный порт.
Соединение TCP или поток UDP определяется 4-мя кортежами:
Таким образом, даже если у вас есть веб-сервер с одним 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-потоков, которые может обработать ваше ядро.
источник