20

Существует ли жесткое ограничение в 65536 открытых TCP-соединений на IP-адрес в Linux? Я где-то читал, что там было, но кто-то просит подтверждения, а я просто не могу его найти.

Кажется, я помню, что дескрипторы файлов представляли собой 16-битное целое число, что как-то его ограничивает?

Или это хокум, и нет ли другого ограничения, кроме того, насколько мощным является сервер?

1 ответ1

31

Вы можете думать о количестве портов. В текущих версиях IPv4 в TCP доступно 65536 портов. Это не просто ограничение Linux, это часть протокола. Ваш IP-адрес идентифицирует ваш компьютер, а порт - программу на вашем компьютере.

Но количество подключений этим не ограничивается. Соединение состоит из 5 частей информации, в geek говорят 5 кортежей. Он определяется протоколом (TCP, UDP), локальным IP-адресом и портом, а также удаленным IP-адресом и портом. Итак, возьмите веб-сервер. Он может обслуживать много соединений на одном и том же порту (скорее всего, 80). Ваш веб-сервер может даже поддерживать несколько подключений к одному клиентскому компьютеру. Скажем, вы подключаетесь к google.com из двух окон. Ваша машина выберет неиспользуемый порт для каждого соединения. Итак, сервер Google должен будет отслеживать (TCP, google.com, 80, yourmachine, someport1) и (TCP, google.com, 80, yourmachine, someport2). В какой-то момент вы столкнетесь с ограничениями, но это не жесткий предел, и он очень зависит от системы.

И да, каждый сокет является дескриптором файла, но не все машины используют шорты для таблицы fd. В моей системе, не настроенной вообще, cat /proc/sys/fs/file-max выдает 323997. Я уверен, что мог бы повысить его, если бы мне было нужно.

Таким образом, существует ограничение в 65336, но оно связано с адресацией, а не количеством соединений. Количество подключений ограничено, но больше из-за конфигурации системы и объема памяти.

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