Более 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-соединение привязано к отдельному порту, поэтому ваш пример невозможен.