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


23

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

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

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

Ответы:


35

Вы можете думать о количестве портов. В текущих версиях 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, но оно связано с адресацией, а не количеством соединений. Количество подключений ограничено, но больше из-за конфигурации системы и объема памяти.


2
Итак, вернемся к 5-ти кортежам: хотя я ограничен 65536 портами, это ограничивает меня до 64 тыс. Соединений на каждый входящий IP-адрес , верно? Таким образом, единственным ограничением являются файловые дескрипторы, но они не обязательно 16-битные? Итак, в основном, что вы говорите, что нет никаких ограничений?
Крис

1
да. См. Также: en.wikipedia.org/wiki/Transmission_Control_Protocol раздел «Использование ресурсов»
user12889

3
@Chris: 64 тыс. Соединений на каждый входящий IP-адрес на одном локальном порту , да.
Гравитация

@ Крис, что сказал Гравити. 5-кортеж будет иметь (но никогда не достигнет) 65536 комбинаций с другой машиной. В действительности вы никогда не доберетесь туда, потому что машина не может использовать какой-либо старый порт для соединения - некоторые зарезервированы по определенным причинам.
Rich Homolka
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.