¿Cómo sirven los sitios de alto tráfico a más de 65535 conexiones TCP?

29

Si hay un límite en el número de puertos que puede tener una máquina y un socket solo puede unirse a un número de puerto no utilizado, ¿cómo manejan esto los servidores que experimentan cantidades extremadamente altas (más que el número de puerto máximo) de solicitudes? ¿Se hace simplemente distribuyendo el sistema, es decir, muchos servidores en muchas máquinas?

alh
fuente

Respuestas:

55

No comprende muy bien los números de puerto: un servidor escucha solo en un puerto y puede tener un gran número de sockets abiertos de clientes que se conectan a ese puerto.

En el nivel TCP, la tupla (ip de origen, puerto de origen, ip de destino, puerto de destino) debe ser única para cada conexión simultánea. Eso significa que un solo cliente no puede abrir más de 65535 conexiones simultáneas a un servidor. Pero un servidor puede (en teoría) servir 65535 conexiones simultáneas por cliente .

Por lo tanto, en la práctica, el servidor solo está limitado por la cantidad de energía de la CPU, memoria, etc. que tiene para atender las solicitudes, no por la cantidad de conexiones TCP al servidor.

Dennis Kaarsemaker
fuente
Me pregunto cómo afectará esto el grado de operador NAT
TheLQ
@TheLQ Sin CGN, cada cliente no puede abrir más de 65535 conexiones al mismo servidor, ningún cliente debería necesitar tantas conexiones al mismo servidor. Con CGN, cada CGN no puede abrir más de 65535 conexiones al mismo servidor, esas deberían compartirse entre todos los clientes que usan esa CGN. Si el CGN puede abrir simultáneamente conexiones 65535 a un servidor y conexiones 65535 a otro servidor es un detalle de implementación, que puede variar entre diferentes implementaciones de CGN.
Kasperd
El límite se puede aumentar agregando más direcciones IP a la CGN o implementando más CGN. Pero también puede implementar la pila dual. Luego, las conexiones a los servidores con soporte IPv6 no pasarán por el CGN, por lo que no consumirán preciosos números de puerto.
Kasperd
14

Estás equivocado: la singularidad del zócalo está determinada por cuatro factores:

  1. la dirección IP local
  2. el número de puerto local
  3. la dirección IP remota
  4. el número de puerto remoto

Cuando se ofrecen servicios de red, 1. y 2. normalmente son estáticos (por ejemplo, IP 10.0.0.1, puerto 80), pero a menos que espere miles de conexiones de un solo cliente (o una única puerta de enlace NAT), no va a empujar el límites para las posibles combinaciones de 3. y 4. antes de que se acaben los recursos locales.

Entonces, aunque prácticamente un cliente no usará un puerto que ya esté en uso para una conexión para abrir una conexión a una dirección IP de destino diferente, el agotamiento del número de puerto será el menor de sus problemas para casi cualquier aplicación, ya sea en el servidor o lado del cliente.

El problema es muy real con las puertas de enlace NAT (enrutadores) que atienden a clientes con un gran número de conexiones salientes abiertas (por ejemplo, torrentes); allí verá el agotamiento del número de puerto después de que se vacíe el conjunto de puertos disponibles para NAT. En este caso, la puerta de enlace NAT no puede crear ninguna asociación adicional, por lo tanto, corta efectivamente a los clientes de Internet.

el wabbit
fuente
2

La pregunta era cómo manejar grandes recuentos de conexiones (> 64k). Los dos métodos más comunes son:

  • Agregar más servidores, lo que aumenta el número de direcciones src / dst y las tuplas de número de puerto. Hay varias formas de compartir la carga en varios servidores; DNS round robin es uno; hay otros

  • Implemente "NAT de grado de operador" (que un amigo, burlona y correctamente, en mi opinión, se refiere como "NAT de grado más cruel"). Esto es esencialmente un NAT de un NAT. Esto tiene implicaciones muy malas para las aplicaciones, pero es lo que hacen algunos grandes proveedores cuando se quedan sin espacio de IPv4 y / o números de puerto, y / o no quieren pasar a IPv6.

usuario8162
fuente
2
Si lees más que el título, verás que esta pregunta es sobre el agotamiento de puertos y el OP se equivocó sobre cómo funciona. ¿Cómo exactamente esta respuesta agrega algo nuevo de valor a eso?
MDMarra
2
El OP pregunta explícitamente (y no solo en el titular) "cómo los servidores experimentan cantidades extremadamente altas ... de solicitudes". Dejando a un lado la confusión sobre cómo funcionan los enchufes, esa es una pregunta válida.
user8162
1
Excelente trabajo de cortar la pregunta a mitad de la oración. El resto esa frase dice: (more than the max port number).
MDMarra
2
Quizás te perdiste la parte donde estipulé que el OP no entiende la mecánica del socket. Soy de la opinión de que cómo superar los 64k puertos es un tema válido para el debate; Lo siento si no está de acuerdo, pero esa fue la pregunta y fue para lo que proporcioné un par de respuestas. Usted preguntó cómo respondía esto; así es como.
user8162
3
Esa es la mitad de la pregunta. La pregunta más amplia, como lo respalda la oración final del OP, es cómo romper la barrera de 64k.
user8162