¿Qué sucede cuando todos los puertos TCP están reservados?

Depende de cómo esté configurado el sistema.

Normalmente, una vez que no hay puertos disponibles, no puede abrir otro. Ese recurso está agotado.

Sin embargo, aquí es donde entran en juego los servicios integrados y los servicios diferenciados.

IntServ, en principio, le permite combinar múltiples conexiones internas en la única que se apaga. Siempre que la implementación de IntServ NO use el mecanismo de puerto TCP limitado del sistema operativo para las conexiones internas (nunca he visto uno que funcione de esa manera, pero eso no lo hace imposible, hay muchos mecanismos de IPC que podrían hacer el trabajo) ), entonces se puede conectar cualquier número de conexiones a ese puerto.

El desafío es identificar qué va con qué, ya que el clasificador de paquetes no está garantizado de extremo a extremo y no se garantiza que el punto remoto juegue con él de la manera que desee. Sin embargo, no puede hacer reenvío de paquetes con estado sin un medio de resolver esto.

La mayoría del trabajo sobre esto supone que está utilizando el modelo OSI en lugar del modelo TCPIP, porque entonces se le permite asumir cosas como la información de la sesión, donde la sesión se puede utilizar para dividir un solo flujo TCP en un gran número de flujos de las diferentes aplicaciones imagina que son flujos TCP.

Sin embargo, en el mundo real, lo que obtienes es la Denegación de servicio. El agotamiento de los recursos es de lo que se trata DoS. Si no pudieras agotar los recursos, a nadie le importaría si hubiera diez conexiones sin otro fin o mil millones.

Interpretaré esta pregunta como “¿qué sucede si no hay puertos TCP disponibles para que el sistema operativo los asigne?”

Si eso sucede, la llamada para asignar un puerto a un socket (ya sea connect () o bind ()) fallaría y un programa con buen comportamiento devolvería un mensaje de error.

Dado que una conexión TCP se identifica por una tupla de 4 de {cliente-ip, cliente-puerto, host-ip, host-puerto} y hay 64K puertos disponibles en TCP, entonces es imposible usar completamente todos los puertos en todas partes. Sin embargo, si restringimos todas las conexiones entre dos hosts, eso deja 64K puertos disponibles en el cliente para cada puerto disponible en el host. Si quisieras usar todos los puertos tanto en el cliente como en el host, eso sería 64K al cuadrado, o 4G posibles tuplas entre dos hosts. Esas son muchas conexiones, pero si tuviera unos pocos terabytes de memoria, quizás podría ser posible mantener tantas conexiones. En ese caso, después de que se hayan asignado todos los puertos, ambas computadoras no podrán comunicarse mediante conexiones adicionales.

Si todos los puertos TCP están en uso, ya no podrá completar una conexión TCP. En la vida real, esto casi nunca sucede, ya que muchos flujos TCP son de corta duración y los puertos se reciclan rápidamente a nuevas conexiones.

Recuerde que las conexiones se multiplexan con una tupla de 5: dirección de origen, dirección de destino, puerto de origen, puerto de destino y número de protocolo. Para cualquier par de origen / destino en TCP, puede mantener alrededor de 65,000 conexiones simultáneas a un puerto específico (por ejemplo, http o https).

El agotamiento de puertos a veces surge en los sistemas NAT de nivel de operador donde cientos de dispositivos comparten una sola dirección IP de origen y golpean una sola dirección de destino. Un operador de sistema bien administrado notará que se acerca este tipo de límites y agregará más direcciones de origen al grupo NAT para detener el problema.

Si quiere decir “qué sucede cuando se nos acaban los números de puerto para asignarlos como números de puerto” conocidos “en los estándares”, simplemente comenzamos a reciclar los números de puerto. En la práctica, el número de puerto TCP reservado tiene que reservarse principalmente a favor de la asignación dinámica de puertos utilizando protocolos de nivel superior. El último “puerto reservado” que importa que recuerde que me asignaron fue el puerto 22 para SSH, y que fue robado de un número de puerto previamente reservado.

Entonces no se puede agregar más, al igual que cuando se distribuyen todas las direcciones DHCP. Eso es todo, no hay más disponibles hasta que se lanzan algunos, para ser reutilizados nuevamente.

No mucho.

Afortunadamente, nadie intenta ejecutar todos los servicios. Por lo tanto, los puertos asignados a servicios que no está ejecutando son gratuitos para otras aplicaciones.

Por ejemplo, BGP se asigna al puerto 179. Pero solo un porcentaje muy pequeño de los sistemas realmente ejecuta BGP. Por lo tanto, puede reutilizar ese número de puerto para otros servicios.

Diablos, puede reutilizar el puerto 80 (HTTP – navegación web) siempre que su sistema no sea un servidor web.

Todos los puertos tcp nunca se pueden reservar si eso sucede, su sistema está comprometido o con firewall. Para que se produzcan las comunicaciones por Internet, debe tener todos los puertos abiertos y no estoy seguro de la cantidad máxima de puertos que un sistema puede abrir. Por ejemplo, si quiero usar el puerto 101011123, ese es un puerto válido que se me ocurrió y no creo que esté reservado.