¿Por qué Netflix usa TCP y no UDP para su transmisión de video?

La transmisión de video se encuentra con TCP en su naturaleza. Primero, la transmisión de video adopta la búsqueda previa y el almacenamiento en búfer para lograr una reproducción fluida. TCP proporciona dicho búfer (de red), así como la garantía de transmisión confiable para que no se pierda la trama (sin embargo, una trama podría perder la fecha límite de reproducción y se descarta).

En segundo lugar, el sondeo de ancho de banda de TCP y el control de congestión intentarán utilizar todo el ancho de banda disponible entre el servidor y el cliente, obteniendo contenido lo más rápido posible mientras que es amigable con otro tráfico (TCP) en los mismos enlaces.

Por otro lado, la transmisión en vivo opta por UDP , debido a que se puede realizar una pequeña recuperación previa en la transmisión en vivo y cuanto mayor sea el almacenamiento en búfer, mayor será el retraso de la reproducción de video. Dado que UDP solo sirve la funcionalidad de capa de transporte más básica, se usará conjuntamente con otros protocolos de capa de aplicación como RTSP para realizar la transmisión de video. A los cortafuegos (de empresas, ISP) no les gustan estos protocolos (a diferencia de TCP, pueden consumir incansablemente un ancho de banda valioso; consulte: Control de congestión de TCP), lo que hace que el tráfico de video transportado sea difícil de atravesar o estrangular.

Para entregar videos, las plataformas adoptan / alquilan Content Delievery Networks (CDN). La mayoría de los servidores CDN (por ejemplo, los de Akamai) se configuraron originalmente y ya para admitir servicios web como su curso principal. Por lo tanto, la transmisión de video a través de HTTP funciona de inmediato sin configurar servidores dedicados, y la mayoría de los firewalls no bloquearán el tráfico HTTP. De hecho, la transmisión dinámica adaptativa sobre HTTP (DASH) se ha convertido en una práctica común. Aunque en teoría HTTP puede encapsular otros protocolos, estos protocolos aún necesitan proporcionar una transferencia confiable (como lo que presume HTTP normal; ver: Protocolo de transferencia de hipertexto), que nuevamente impide UDP. Notablemente, Netflix construye su propio CDN.

TCP proporciona recuperación de errores al solicitar la retransmisión de datos faltantes. Sin recuperación de errores, cada vez que se pierde un paquete durante la transmisión, se produce un error de audio o video en la reproducción. TCP evita esto.

Como todo en informática, existe una compensación. La retransmisión lleva tiempo, sin embargo, esto se enmascara utilizando buffers de audio y video en el dispositivo de reproducción. Estas memorias intermedias proporcionan unos pocos segundos de datos almacenados en caché local que se pueden presentar mientras se realizan retransmisiones. La desventaja de los buffers es que hay un retraso en el audio y el video.

UDP es más apropiado para soluciones de conferencia en tiempo real (por ejemplo, Skype) porque las memorias intermedias de varios segundos no se pueden usar cuando se intenta mantener una conversación con alguien.

No trabajo para Netflix ni sé muchos detalles sobre su arquitectura de servicio de transmisión. Mi respuesta se basa en que soy un suscriptor durante mucho tiempo.

Netflix es un servicio de VoD, es decir, cada consumidor elige un video y lo transmite a su propio ritmo, lo pausa y continúa en momentos aleatorios. Cada usuario hace esto independientemente. Por lo tanto, no es necesario usar UDP, que es mucho más adecuado para transmitir simultáneamente una sola transmisión de video a múltiples usuarios.

Con TCP, es mucho más difícil espiar una secuencia tocando una copia porque el cliente tiene que enviar los acuses de recibo correctos para cada segmento recibido. Dado que está orientado a la conexión, Netflix puede mejorar la autenticación y validación de los clientes.

Netflix usa algo de encriptación para evitar el robo de videos. Es más fácil hacer esto para la transmisión TCP debido a la recepción garantizada de segmentos y en el orden correcto. Con UDP, sospecho que es mucho más difícil hacerlo ya que el conjunto de datos está limitado a cada datagrama. Con la conexión TCP, probablemente sea más fácil señalar los cambios de clave de cifrado a intervalos aproximadamente fijos para garantizar una mejor seguridad.

La razón más sólida para mí para usar TCP es que es bastante fácil monitorear el ancho de banda entre la fuente y el receptor, y adaptar la calidad de la imagen en función de eso, ya que poseen ambas aplicaciones finales. Netflix no permite que un jugador de terceros reproduzca su transmisión; Solo funciona con su aplicación propietaria.

No puedo imaginar un esquema que admita la transmisión simultánea usando UDP que pueda lograr una calidad de reproducción dinámica por receptor.

A un nivel de red más amplio, TCP es mejor para anchos de banda variables que ocurren en Internet porque tiene un mecanismo de auto reloj, impulsado por ACK, para adaptarse al ancho de banda disponible. Todos los enrutadores modernos implementan la evitación de congestión utilizando el algoritmo RED / WRED que realmente funciona bien con TCP para distribuir uniformemente la carga del ancho de banda reducido debido a la congestión entre los miles de flujos en curso para que un solo flujo no vea demasiada degradación. RED y UDP no funcionan bien, que yo sepa.

Estoy seguro de que hay mucho más, pero todos pueden ser secretos comerciales de la compañía, por eso ha sido tan dominante.

Cualquier persona con algún conocimiento interno quiere estar de acuerdo o refutar, son bienvenidos y serán muy apreciados.

UDP es un protocolo catch-as-catch-can. Es decir, si los paquetes se descartan o se reciben fuera de servicio, el protocolo no hace ningún esfuerzo por descartarlos y solicitar una retransmisión de ellos para garantizar que obtenga todos los paquetes y pueda ensamblarlos en el orden correcto. TCP hace exactamente eso. Cuando está viendo Netflix, no desea que se caigan cuadros, congelamientos, distorsión de video, por lo que Netflix usa TCP para garantizar que toda la secuencia de datos necesaria llegue a su dispositivo.

Gran respuesta de #Silvery

Como ya mencionó eso:

La transmisión de video se encuentra con TCP en su naturaleza. Primero, la transmisión de video adopta la búsqueda previa y el almacenamiento en búfer para lograr una reproducción fluida. TCP proporciona dicho búfer (de red), así como la garantía de transmisión confiable para que no se pierda la trama (sin embargo, una trama podría perder la fecha límite de reproducción y descartarse). En segundo lugar, el sondeo de ancho de banda de TCP y el control de congestión intentarán usar todo el ancho de banda disponible entre el servidor y el cliente, obteniendo contenido lo más rápido posible mientras que es amigable con otro tráfico (TCP) en los mismos enlaces.

Estábamos discutiendo este tema en nuestro grupo de investigación en nuestro departamento. Estoy seguro de que Netflix usa una variación de UDP con su propio controlador de conexión de nivel de aplicación. Aunque algunas compañías acusan a Netflix de bloquear el tráfico TCP, Netflix debería haberse movido hacia UDP. De lo contrario no pueden sobrevivir.