Существует ли жесткий предел 65 536 открытых соединений TCP на IP-адрес на Linux?

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

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

Или этот hokum и не является там просто никаким пределом кроме того, насколько раскормленный сервер?

23
задан 01.03.2011, 01:53

1 ответ

Можно думать о количестве портов. Существует 65 536 портов, доступных в TCP в текущих версиях IPv4. Это не просто ограничение Linux, его часть протокола. Ваш IP-адрес определяет Вашу машину, и порт определяет программу на Вашей машине.

Но, количество соединений не ограничено этим. Соединение состоит из 5 частей информации, в фанате говорят с 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. Я уверен, что мог повысить его, если бы я должен был.

Так, существует предел 65 336, но он имеет отношение к обращению, не количеству соединений. Количество соединений ограничено, но больше системной конфигурацией, и сколько памяти это имеет.

35
ответ дан 07.12.2019, 09:50

Теги

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