Что является теоретическим максимальным количеством открытых соединений TCP, которые может иметь современное поле Linux

При принятии бесконечной производительности от аппаратных средств поле Linux может поддерживать> 65 536 открытых соединений TCP?

Я понимаю, что количество эфемерных портов (<65536) ограничивает количество соединений от одного локального IP до одного порта на одном удаленном IP.

Кортеж (локальный IP, локальный порт, удаленный IP, удаленный порт) - то, что исключительно определяет соединение TCP; делает это подразумевает, что больше, чем 65K соединения могут поддерживаться, если больше чем один из этих параметров свободен. например, соединения с одиночным номером порта на нескольких удаленных хостах от нескольких локальный дюйм/с.

Есть ли в системе другой предел на 16 битов? Количество дескрипторов файлов, возможно?

226
задан tshepang 31 January 2014 в 06:16
поделиться

1 ответ

Один порт прослушивания может принимать более одного соединения одновременно.

Существует часто упоминаемое ограничение «64 КБ», но оно составляет на клиента на порт сервера и требует пояснения.

Каждый пакет TCP / IP имеет в основном четыре поля для адресации; это:

source_ip source_port destination_ip destination_port
< client            > < server                      >

Внутри стека TCP эти четыре поля используются в качестве составного ключа для сопоставления пакетов с соединениями (например, файловых дескрипторов).

Если у клиента много подключений к одному и тому же порту в одном месте назначения, тогда три из этих полей будут одинаковыми - только source_port изменяется, чтобы различать разные подключения. Порты представляют собой 16-битные числа, поэтому максимальное количество подключений, которые может иметь любой клиент к любому данному порту хоста, составляет 64 КБ.

Однако каждый из нескольких клиентов может иметь до 64K подключений к порту какого-либо сервера, и если сервер имеет несколько портов или один из них является многосетевым, вы можете увеличить это число еще больше.

Итак, реальный предел - дескрипторы файлов. Каждому отдельному соединению сокета дается дескриптор файла, поэтому на самом деле ограничение - это количество файловых дескрипторов, которые система была настроена для разрешения, и ресурсов для обработки. Максимальный предел обычно превышает 300 КБ, но его можно настроить, например с помощью sysctl .

Реальные пределы, которыми хвастаются для обычных устройств, составляют около 80 КБ, например, однопоточные серверы обмена сообщениями Jabber.

333
ответ дан 23 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: