Esta podría ser una pregunta tonta, pero algunos amigos y yo hemos estado discutiendo las posibles limitaciones de TCP. Tenemos una aplicación que escuchará a los clientes (piense en una puerta de enlace) y enrutará todos los datos de los clientes conectados a través de un único editor de kafka conectado a un tema.
Uno de mis amigos está diciendo que TCP será un problema para esta puerta de enlace porque establecerá una nueva conexión para cada mensaje que envíe (no el kafka, pero el protocolo de transporte subyacente es el problema), lo que requiere un nuevo puerto cada vez. ¿Al ritmo que enviaremos estos mensajes de clientes (gigabytes), kafka se quedará sin puertos para leer?
He desarrollado durante varios años y nunca he oído hablar de esto antes y me gustaría obtener una comprensión de nivel inferior (que pensé que tenía) de cómo funciona TCP. Entiendo que cuando establece una conexión TCP, esa conexión permanece abierta hasta que la aplicación agota el tiempo de espera o el servidor o el cliente la cierran a la fuerza. Los datos que se envían a través de esta conexión son una secuencia y no abrirán / cerrarán nuevas conexiones independientemente de las 3 V (volumen, velocidad, variedad).
En lo que respecta a los puertos, se usa un puerto para la transmisión y el puerto interno del descriptor de archivos es algo que la aplicación administra para la lectura / escritura de clientes individuales. Nunca he entendido que TCP establece nuevas conexiones para cada paquete que escribe.
Pido disculpas de antemano si esta pregunta no es directa o demasiado vaga. Realmente estoy desconcertado y espero que alguien pueda proporcionar más contexto a lo que dicen mis colegas.
SO_REUSEADDR
para cerrar sockets más rápido, aumentar el rango de puertos efímeros, etc. Además, TCP_FASTOPEN
se pueden usar varios conmutadores a nivel del sistema operativo para solucionar otras limitaciones bien conocidas de TCP. De cualquier manera, no tiene sentido discutir las limitaciones de TCP cuando ni siquiera tiene una carga de trabajo para probar.