Aquí hay una cita de Sam Jansen de un comentario en gafferongames.com :
Hablando como investigador de redes y no como desarrollador de juegos, la conclusión de nunca usar TCP y UDP juntos parece un poco fuerte. TCP solo tendrá pérdida de paquetes si está enviando demasiados datos; de alguna manera al igual que los datos UDP que está enviando. La diferencia es que no tienes control directo sobre la velocidad a la que TCP envía, esto está oculto para ti.
Si solo necesita enviar algunos datos confiables y no quiere preocuparse por la retransmisión e implementar un protocolo confiable, y sabe que la velocidad será baja, entonces no habrá problemas con el uso de TCP y UDP.
La relación no es tan compleja entre los dos realmente: TCP simplemente aumenta su velocidad de envío (si hay datos para enviar) hasta que se pierde el paquete, en cuyo caso vuelve a marcar su velocidad, luego comienza a aumentar la velocidad nuevamente (esto tiempo más lento). Cuando su aumento en la velocidad causa la pérdida de paquetes, es muy probable que también afecte a cualquier otra secuencia de datos, incluidos sus paquetes UDP.
El documento Características de la pérdida de paquetes UDP: el efecto del tráfico TCP obtuvo sus resultados al abrir múltiples conexiones TCP a la vez e inundar la red con datos. Esto conduce a la congestión seguida de la sincronización global , que causan paquetes descartados. Obviamente, un cliente de juegos no abrirá una docena de conexiones a la vez e inundará la red con datos, por lo que sus resultados serán diferentes.
Para responder tu pregunta:
Me pregunto si tiene sentido usar TCP y UDP al mismo tiempo, pero para diferentes cosas [...]
Sí, esto es aceptable si se mantiene dentro de los límites de ancho de banda.
- TCP para enviar información que se envía con poca frecuencia, pero se debe garantizar que llegue de manera confiable. Como las actualizaciones de puntaje, el nombre de un jugador o incluso el estado de encendido / apagado de una luz en el mundo del juego.
Cuando use TCP y UDP, siempre debe preferir enviar tanto como sea posible a través de UDP y lo menos posible a través de TCP.
Ahora, te pregunto esto: ¿es realmente necesario enviar la puntuación, el nombre del jugador y el estado de una luz sobre TCP? Si bien es cierto que necesita recibir estos datos eventualmente, ¿es cierto que necesita recibir estos datos estrictamente en orden y exactamente una vez?
Probablemente no.
UDP funciona bien para estos casos, y Quake 3 es un buen ejemplo de cómo.
Entonces, ¿cuál es un buen ejemplo de TCP junto con UDP? Bueno, piensa en el chatbox de un juego. Las actualizaciones de este chatbox (es decir, las nuevas líneas de texto) deben enviarse de manera confiable y estrictamente en orden. Por lo tanto, TCP es un buen ajuste.