Hay 65536 puertos para cada sistema en la red, y cada conexión o envío / recepción utilizará uno de esos.
Mi pregunta es: ¿qué pasa si tenemos 65536 + 1 conexiones?
Sé que no sucede de manera normal, pero tengo curiosidad por saber cómo lo manejan los sistemas operativos.
networking
operating-systems
Omid Golparvar
fuente
fuente
Respuestas:
Tenga en cuenta que un sistema puede manejar más de 65536 conexiones concurrentes, ya que no necesariamente utilizan un puerto separado.
Una conexión TCP o flujo UDP se define mediante la 4-tupla:
Por lo tanto, incluso si tiene una máquina de servidor web con una sola dirección IP y un solo paquete de software de servidor HTTP que solo escucha en el puerto 80, en teoría podría manejar 65536 conexiones por dirección IP de cliente que se conecta a ella . Entonces, las conexiones de 64Ki desde la dirección IP 1 del cliente, más las conexiones de 64Ki desde la dirección IP 2 del cliente, etc.
Por lo tanto, los protocolos admiten, en una primera aproximación, 2 48 conexiones / flujos a un solo puerto TCP o UDP en una sola dirección IPv4. Considere juntos TCP y UDP, y tanto el espacio de direcciones de IPv4 como el espacio de direcciones cósmicamente / cómicamente grande de IPv6, y puede ver que es probable que los protocolos en sí mismos nunca sean la fuente del límite para el número de conexiones concurrentes que un host puede manejar.
Del mismo modo, no hay nada en los protocolos TCP o UDP que impida que una máquina cliente use un solo puerto de origen en una sola dirección IP para realizar múltiples conexiones salientes a varias direcciones y puertos de servidor. A veces, las API de red de un sistema operativo dado pueden no facilitar esto, pero es importante recordar que, digamos, la antigua y venerable API "[BSD] Sockets" es solo una API para TCP y UDP. TCP y UDP pueden tener capacidades que no están expuestas por la API de Sockets tradicional.
Por lo tanto, la cantidad de conexiones TCP concurrentes o flujos UDP que puede manejar un host determinado está limitada no tanto por los números de puerto, sino por los recursos del sistema, como el espacio RAM y el tiempo de CPU que se necesita para realizar un seguimiento de todas esas conexiones y atenderlas a todas. Además, los detalles específicos de la implementación de un sistema operativo pueden imponer límites artificiales. Por ejemplo, en la filosofía "todo es un archivo" de Unix, puede haber un descriptor de archivo para cada conexión TCP o flujo UDP. Si su núcleo Unix tiene un límite en la cantidad de descriptores de archivo que puede rastrear, ese límite de descriptor de archivo es un límite artificial en la cantidad de conexiones TCP concurrentes o flujos UDP que su núcleo puede manejar.
fuente