Respuesta corta: porque se usa más que solo el número de puerto del servidor para identificar una conexión.
Respuesta larga: cuando un sistema operativo obtiene un datagrama de IP entrante marcado como utilizando el protocolo TCP, los demultiplexa (los asigna a la conexión TCP apropiada) de acuerdo con el datagrama:
- Dirección IP origen
- puerto TCP de origen
- Dirección IP de destino
- puerto TCP de destino
Estos cuatro valores forman una clave, y todos deben ser iguales para que dos datagramas entrantes cuenten como pertenecientes a la “misma” conexión.
- Para resolver el problema de agotamiento del espacio de direcciones con IPv4, ¿por qué no simplemente aumentamos la especificación de tamaño de octetos TCP / IP de 32 bits a 64 bits, en lugar de diseñar un nuevo protocolo IPv6?
- ¿Cómo mide el proveedor de servicios de Internet nuestro uso de Internet?
- Cómo crear su propio paquete tcp / IP y agregar su propia carga útil y enviarla a otro sistema usando el lenguaje de programación c
- ¿Podemos rastrear la IP del remitente original cuando solo tenemos una copia reenviada?
- ¿Por qué el modo de transferencia asincrónica (ATM) perdió a IP?
Un servidor web típico escuchará solo en los puertos 80 y quizás 443. Contrariamente a los detalles de la pregunta, el sistema operativo no “asigna un número de puerto aleatorio” cuando acepta una conexión. El socket creado recientemente devuelto por accept () seguirá estando en el puerto del servidor 80 o 443.
Pero el sistema operativo puede determinar a qué conexión está destinado un datagrama entrante (incluso si todos están destinados al puerto 80), porque los datagramas entrantes que pertenecen a diferentes conexiones tendrán diferentes direcciones IP de origen o números de puerto.
En otras palabras, incluso un servidor que solo escucha en un solo puerto y una dirección IP aún puede manejar una cantidad gigantesca de conexiones. El límite es de 60000+ de cada cliente en particular a un servidor en particular . Sin embargo, cualquier servidor puede manejar más de 60000 conexiones entre sí con una dirección IP (en otras palabras, miles de millones de conexiones entrantes, especialmente si cuenta IPv6).
(Esto podría ser un problema si tuviera más de 60,000 máquinas detrás de un solo traductor de direcciones de red, compartiendo una dirección IP, y todas quisieran hacer una conexión TCP al mismo servidor remoto. Esto es parte de por qué “NAT de nivel de operador “requiere cierto esfuerzo para hacerlo bien y por qué IPv6 sería una buena idea).