Существует ли жесткий предел 65 536 открытых соединений TCP на IP-адрес на Linux? Я считал где-нибудь, что было, но кто-то просит подтверждение, и я просто не могу найти его.
Я, кажется, помню, что это было что-то о дескрипторах файлов, являющихся целым числом на 16 битов, которое ограничивает его так или иначе?
Или этот hokum и не является там просто никаким пределом кроме того, насколько раскормленный сервер?
Можно думать о количестве портов. Существует 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, но он имеет отношение к обращению, не количеству соединений. Количество соединений ограничено, но больше системной конфигурацией, и сколько памяти это имеет.