Більше 65536 TCP-підключень на Linux


11

Я застряг у спробі встановити більше 65536 вихідних TCP-з'єднань із вікна Linux (RedHat5).

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

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

З іншого боку, я не вірю, що я досягаю обмеження на IP-адресу - я використовую кілька IP-адрес і портів (я відкриваю з'єднання з портів 30 000 - 60 000 для кожної з декількох IP-адрес).

Чи є якийсь параметр настройки ядра Linux, який мені не вистачає? Або якась фундаментальна межа в TCP?

Невдача полягає в тому, що моя програма для відкриття з'єднань висить у виклику connect ().

Дякую за будь-яку допомогу, NickB


На яку межу ви потрапили? Яка помилка була, коли ви досягли цієї межі?
NOS

connect () висить.
NickB

1
Що між IP-адресою джерела та долі призначення? Ви, можливо, заповнюєте NAT таблицю якогось пристрою?

Відповіді:


10

Ось блог, де хтось отримав> 1 000 000 виходів з коробки.

У частині 1 ми встановлюємо діапазон "1024 65535" - це означає, що наявні непривілейовані порти 65535-1024 = 64511. Деякі з них будуть використовуватися в інших процесах, але ми ніколи не отримаємо понад 64511 підключень клієнтів, оскільки у нас не вистачить портів.

...

Тож давайте піднімемо 17 нових IP-адрес, маючи на меті здійснити 62 000 з'єднань з кожної - даючи нам загалом 1 054 000 підключень


Дякую! Це працює для мене. Зокрема, набір sysctl з metabrew.com/article/… дозволив мені встановити понад 65 536 TCP-з'єднань.
NickB

1

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


3
Це справедливо лише для однієї єдиної IP-адреси. Якщо ви використовуєте більше одного, кожна IP-адреса повинна мати 65536 відкритих портів.
Робота

1
правильно, для кожного вихідного з'єднання потрібен локальний порт. IIRC, жодні порти, які вже використовуються, не можна використовувати для цих з'єднань. так, наприклад, якщо ви використовуєте telnet / ftp / http, порти з номером 21/23/80 недоступні як локальні порти.
KevinDTimm

1
Ви також можете мати кілька підключень до одного порту.
gtrak

@Job - Так, оскільки TCP розміщено вгорі IP - я говорю лише про одну IP-адресу.

4
Кожне з'єднання ідентифікується кортежем, що складається з віддаленої адреси та порту та локальної адреси та порту. Отже> 65536 вхідних з'єднань з різних віддалених хостів можливо. > 65536 вихідні з'єднання з одного інтерфейсу на хості неможливі, і ви все одно обмежитеся дещо менше, ніж у будь-якому випадку, оскільки завжди будуть використовуватися деякі порти.
Лен Холгейт

0

У цьому контексті "єдиний інтерфейс" означає догляд за однією мережею з присвоєною їй однією IP-адресою. Кожне вихідне TCP-з'єднання пов'язане з окремим портом, тому ваш приклад неможливий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.