Nunca use datagrams.
TCP vs UDP
- Ao desenvolver aplicações para a internet, é preciso escolher entre TCP e UDP.
- TCP: garante transmissão confiável de dados.
- UDP: oferece transmissão de dados não confiável.
- Quase nunca há necessidade de transmissão não confiável.
Propriedades
- A engenharia de software se apoia em várias camadas de abstração.
- Cada camada fornece propriedades específicas para que os desenvolvedores não precisem reconstruir tudo do zero.
- Os desenvolvedores precisam escolher qual camada usar.
"Não confiável"
- Em uma reunião para projetar um protocolo de vídeo em tempo real, houve a opinião de que SUBSCRIBE deveria ser não confiável.
- O que de fato é necessário é timeliness.
- Em vídeo em tempo real, é importante entregar os dados mais recentes com prioridade.
Datagrams
- Um datagram (pacote IP) é a unidade de dados transmitida de um endereço de origem para um endereço de destino.
- Datagrams podem ser perdidos ou chegar fora de ordem.
- O motivo para usar datagrams é que, em caso de congestionamento da rede, descartar pacotes pode ser a melhor escolha.
Filas na internet
- Quando a rede está congestionada, descartar pacotes é algo comum.
- Colocar pacotes em fila para entregá-los depois pode causar o problema de bufferbloat.
- O bufferbloat faz com que todos os pacotes se acumulem em filas, prejudicando a timeliness.
Você, desenvolvedor de aplicações
- Ao usar UDP diretamente, você pode enfrentar vários problemas.
- Para construir seu próprio protocolo de transporte sobre UDP, é preciso implementar retransmissão, controle de congestionamento e mais.
- Usar uma biblioteca QUIC é uma escolha melhor.
Timeliness
- É possível usar QUIC para alcançar timeliness.
- Esvaziar os buffers: detectar filas por meio de controle de congestionamento e reduzir a taxa de transmissão.
- Dividir os dados em streams: cada stream é transmitido de forma independente.
- Priorizar streams: entregar primeiro os streams mais importantes.
Em defesa dos datagrams
- QUIC e MoQ oferecem suporte a datagrams.
- O suporte a datagrams é importante para permitir experimentação.
- No entanto, usar datagrams pode ser uma armadilha.
Conclusão
- Não se deve projetar aplicações sobre datagrams.
- Em vez de criar mais um protocolo de vídeo sobre UDP, é melhor participar do Media over QUIC.
Opinião do GN⁺
- Importância da timeliness: em aplicações em tempo real, a entrega no momento certo é extremamente importante. UDP pode ser mais adequado que TCP, mas exige considerações adicionais, como controle de congestionamento.
- Vantagens do QUIC: o QUIC compensa as desvantagens do UDP e ainda oferece alto desempenho. Ele é especialmente adequado para streaming de vídeo em tempo real.
- Problema do bufferbloat: em caso de congestionamento da rede, acumular pacotes em filas pode prejudicar a timeliness. Para evitar isso, é necessário controle de congestionamento.
- Limitações dos datagrams: datagrams são adequados para transmissão em tempo real, mas quando confiabilidade e garantia de ordem são necessárias, protocolos como QUIC são uma escolha melhor.
- Importância da escolha tecnológica: é essencial escolher o protocolo de transporte adequado às necessidades da aplicação. Uma escolha errada pode causar queda de desempenho e piorar a experiência do usuário.
1 comentários
Comentários do Hacker News