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

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

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

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

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

Я пропускаю какой-нибудь настраиваемый параметр ядра Linux? Или какой-то фундаментальный предел в TCP?

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

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

2 ответа

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

  • Ричард Джонс, MetaBrew.com, 2008-11-04, Comet-приложение на миллион пользователей с Mochiweb, часть 3, раздел Увеличение до 1 миллиона (Архивировано здесь)

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

...

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

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

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

Другие вопросы по тегам