Más de 65536 conexiones TCP en Linux

11

Estoy atascado tratando de configurar más de 65536 conexiones TCP salientes desde un cuadro de Linux (RedHat5).

Ya he configurado los cuadros de salida y de aceptación para permitir suficientes descriptores de archivo.

No creo que haya un problema en el lado de la aceptación: tengo varios cuadros de destino, cada uno con varias direcciones IP y estoy usando múltiples puertos.

En el lado saliente, no creo que esté alcanzando un límite por dirección IP: estoy usando múltiples direcciones IP y puertos (estoy abriendo conexiones desde los puertos 30,000 - 60,000 para cada una de varias direcciones IP).

¿Hay algún parámetro ajustable del kernel de Linux que me falta? ¿O algún límite fundamental en TCP?

El error es que mi aplicación para abrir las conexiones se cuelga en la llamada connect ().

Gracias por cualquier ayuda NickB

NickB
fuente
¿Qué límite alcanzaste? ¿Cuál fue el error cuando llegaste a ese límite?
nos
connect () se cuelga.
NickB
1
¿Qué hay entre tus IP de origen y destino? ¿Posiblemente estás llenando la tabla NAT de algún dispositivo?

Respuestas:

10

Aquí hay un blog en el que alguien obtuvo> 1,000,000 de saldos de una caja.

  • Richard Jones, MetaBrew.com, 04-11-2008, Una aplicación de cometa para millones de usuarios con Mochiweb, Parte 3 , sección Convertirla en 1 millón (Archivado aquí ).

En la Parte 1, establecemos el rango en "1024 65535", lo que significa que hay 65535-1024 = 64511 puertos sin privilegios disponibles. Algunos de ellos serán utilizados por otros procesos, pero nunca obtendremos más de 64511 conexiones de clientes, porque nos quedaremos sin puertos.

...

Entonces, mencionemos 17 nuevas direcciones IP, con la intención de hacer 62,000 conexiones de cada una, lo que nos da un total de 1,054,000 conexiones

StackzOfZtuff
fuente
¡Gracias! Funciona para mi. Específicamente, las filtraciones de sysctl de metabrew.com/article/… me permitieron configurar más de 65,536 conexiones TCP.
NickB
1

El protocolo TCP solo usa 16 bits para el puerto de destino y de origen. No habrá forma de tener más de 65536 puertos abiertos a la vez, ni siquiera con Linux.


fuente
3
Esto solo es cierto para una sola dirección IP. Si usa más de uno, cada dirección IP debería poder tener 65536 puertos abiertos.
Trabajo
1
correcto, se requiere un puerto local para cada conexión saliente. IIRC, los puertos que ya están en uso no se pueden usar para estas conexiones. así, por ejemplo, si está ejecutando telnet / ftp / http, los puertos numerados 21/23/80 no están disponibles como puertos locales.
KevinDTimm
1
También puede tener múltiples conexiones al mismo puerto.
gtrak
@ Job: Sí, dado que TCP está apilado sobre IP, solo estoy hablando de una dirección IP.
44
Cada conexión se identifica mediante una tupla que consta de la dirección remota y el puerto y la dirección local y el puerto. Entonces, es posible> 65536 conexiones entrantes desde diferentes hosts remotos. > 65536 conexiones salientes desde una única interfaz en un host no es posible y de todos modos estarías limitado a algo menos que eso, ya que siempre habrá algunos puertos en uso.
Len Holgate
0

En este contexto, una "interfaz única" significa un cuidado de red único con una sola dirección IP asignada. Cada conexión TCP saliente está vinculada a un puerto separado, por lo que su ejemplo no es posible.

Len Holgate
fuente