GNU/Linux >> Tutoriales Linux >  >> Linux

Agotamiento del puerto de red de Linux

Tienes dos preguntas principales aquí:

1.

Hablando estrictamente de IPv4, ¿es realmente posible el agotamiento de puertos?

Sí. Tomemos, por ejemplo, un enrutador de equilibrio de carga que envía todas las conexiones a una dirección IP NAT. Es probable que esto suceda cuando tienes muchos SRC IP s conectándose al cuello de botella de un único DST IP .

Esto significa que su servidor web podría tener un montón de conexiones como:

[email protected]:~# netstat -pnt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 173.200.1.18:80      10.100.1.100:49923        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.200.1.200:10155        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.10.1.10:14400        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.10.1.10:50652        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.20.1.20:57554        ESTABLISHED 13939/nginx: worker 

y eso está perfectamente bien. Sin embargo, si todas las 'Direcciones extranjeras' fueran iguales, esto puede causar un problema (por ejemplo, 'gran enrutador que realiza NAT <---> servidor con una dirección IP').

Si tuviera que postular por qué el agotamiento efímero de puertos no es un problema común, sugeriría que es porque cada puerto requiere un servicio de escucha y suficientes recursos para responder:otro recurso (memoria, CPU) es normalmente un cuello de botella primero.

Sin embargo, personalmente me he encontrado con algunos problemas de agotamiento de puertos cuando trabajo en una empresa de equilibrio de carga.

2. ¿Por qué un puerto usado puede presentar un problema para un servicio de escucha?

"Lo que permite el uso de puertos efímeros desde 1024-65535, que si tengo servicios que se vinculan en el puerto 3306 (mySQL, por ejemplo), a veces no se iniciarán porque el puerto está en uso".

El servidor mySQL no puede vincularse a ese puerto si está en uso, digamos por localhost:3306 o en todas las interfaces. Por ejemplo, vea la línea 0.0.0.0:80 en el siguiente netstat salida?

[email protected]:~# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      PID/Program name
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      964/php-fpm.conf)
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1660/mysqld     
tcp        0      0 0.0.0.0:842             0.0.0.0:*               LISTEN      1317/inetd      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      13938/nginx     

Eso significa que el puerto 80 está escuchando en todos interfaces locales al servidor. Si otro proceso tiene el puerto 80 antes que mi nginx el servidor comienza, nginx no podrá tomar el control de ese puerto y probablemente fallará su procedimiento de inicio.

Normalmente, el puerto 3306 está bien porque los servicios de escucha tienen puertos (o rangos) predefinidos que se solicitan desde la máquina host, p. puerto 80 y 443 para servidores web.


Linux
  1. Cómo cambiar el puerto SSH en Linux

  2. Linux – ¿Puerto serie Raspberrypi?

  3. Comprobar el uso del puerto en Linux

  4. ¿Probar eficientemente si un puerto está abierto en Linux?

  5. Cómo abrir puerto en Linux

Cómo configurar redes en Vagrant

Cómo encontrar el número de puerto de un servicio en Linux

Cómo cambiar el puerto SSH en Linux

Cómo hacer ping a un número de puerto en Linux

Abrir un puerto en Linux

Ejemplos de comandos ip para administrar redes en Linux