Назад | Перейти на главную страницу

Более 65536 TCP-соединений в Linux

Я застрял, пытаясь установить более 65536 исходящих TCP-соединений из коробки Linux (RedHat5).

Я уже настроил как исходящие, так и принимающие поля, чтобы разрешить достаточно дескрипторов файлов.

Я не верю, что существует проблема на принимающей стороне - у меня есть несколько целевых ящиков, каждый с несколькими IP-адресами, и я использую несколько портов.

Что касается исходящей стороны, я не верю, что достигаю предела для каждого IP-адреса - я использую несколько IP-адресов и портов (я открываю соединения с портов 30 000–60 000 для каждого из нескольких IP-адресов).

Есть ли какой-то настраиваемый параметр ядра Linux, который мне не хватает? Или какой-то принципиальный предел в TCP?

Ошибка в том, что мое приложение для открытия соединений зависает при вызове connect ().

Спасибо за любую помощь NickB

Вот блог, в котором кто-то получил> 1 000 000 исходов из коробки.

  • Ричард Джонс, MetaBrew.com, 4 ноября 2008 г., Приложение Comet для миллиона пользователей с Mochiweb, часть 3, раздел Превращаем его в 1 миллион (Архивировано Вот.)

В Части 1 мы установили диапазон «1024 65535» - это означает, что доступно 65535-1024 = 64511 непривилегированных портов. Некоторые из них будут использоваться другими процессами, но мы никогда не получим более 64511 клиентских подключений, потому что у нас закончатся порты.

...

Итак, давайте создадим 17 новых IP-адресов с намерением установить 62 000 подключений с каждого, что дает нам в общей сложности 1 054 000 подключений.

Протокол TCP использует только 16 бит как для порта назначения, так и для порта источника. Не будет возможности открыть более 65536 портов одновременно - даже в Linux.

В этом контексте «единый интерфейс» означает единое сетевое обслуживание с назначенным ему единственным IP-адресом. Каждое исходящее TCP-соединение привязано к отдельному порту, поэтому ваш пример невозможен.