При принятии бесконечной производительности от аппаратных средств поле Linux может поддерживать> 65 536 открытых соединений TCP?
Я понимаю, что количество эфемерных портов (<65536) ограничивает количество соединений от одного локального IP до одного порта на одном удаленном IP.
Кортеж (локальный IP, локальный порт, удаленный IP, удаленный порт) - то, что исключительно определяет соединение TCP; делает это подразумевает, что больше, чем 65K соединения могут поддерживаться, если больше чем один из этих параметров свободен. например, соединения с одиночным номером порта на нескольких удаленных хостах от нескольких локальный дюйм/с.
Есть ли в системе другой предел на 16 битов? Количество дескрипторов файлов, возможно?
Один порт прослушивания может принимать более одного соединения одновременно.
Существует часто упоминаемое ограничение «64 КБ», но оно составляет на клиента на порт сервера и требует пояснения.
Каждый пакет TCP / IP имеет в основном четыре поля для адресации; это:
source_ip source_port destination_ip destination_port
< client > < server >
Внутри стека TCP эти четыре поля используются в качестве составного ключа для сопоставления пакетов с соединениями (например, файловых дескрипторов).
Если у клиента много подключений к одному и тому же порту в одном месте назначения, тогда три из этих полей будут одинаковыми - только source_port
изменяется, чтобы различать разные подключения. Порты представляют собой 16-битные числа, поэтому максимальное количество подключений, которые может иметь любой клиент к любому данному порту хоста, составляет 64 КБ.
Однако каждый из нескольких клиентов может иметь до 64K подключений к порту какого-либо сервера, и если сервер имеет несколько портов или один из них является многосетевым, вы можете увеличить это число еще больше.
Итак, реальный предел - дескрипторы файлов. Каждому отдельному соединению сокета дается дескриптор файла, поэтому на самом деле ограничение - это количество файловых дескрипторов, которые система была настроена для разрешения, и ресурсов для обработки. Максимальный предел обычно превышает 300 КБ, но его можно настроить, например с помощью sysctl .
Реальные пределы, которыми хвастаются для обычных устройств, составляют около 80 КБ, например, однопоточные серверы обмена сообщениями Jabber.