1 pontos por GN⁺ 2024-06-25 | 1 comentários | Compartilhar no WhatsApp

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.
    1. Esvaziar os buffers: detectar filas por meio de controle de congestionamento e reduzir a taxa de transmissão.
    2. Dividir os dados em streams: cada stream é transmitido de forma independente.
    3. 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⁺

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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

 
GN⁺ 2024-06-25
Comentários do Hacker News
  • Problemas do TCP: o TCP tem muitos problemas em ambientes que exigem alta largura de banda e baixa latência. Também é ineficiente em redes de baixa largura de banda e alta latência.
  • Casos de uso de UDP: há uso de UDP para streaming de dados de sensores de alta frequência, e também há casos em que problemas foram resolvidos por meio do QUIC.
  • Terminologia do UDP: é mais apropriado descrever o UDP como "melhor esforço" em vez de "não confiável".
  • Problemas da abstração de stream: a abstração de stream torna os programas mais frágeis, e a recuperação após uma desconexão é lenta. Uma abordagem baseada em datagramas pode ser mais eficiente.
  • Perda de pacotes UDP: em caso de congestionamento de rede, os pacotes UDP são descartados primeiro. Também há menção ao problema de retransmissão do QUIC.
  • Título caça-cliques: uma tentativa de seguir a diretriz do Hacker News de usar no título o texto original do artigo.
  • Diferença entre TCP e UDP: o TCP oferece confiabilidade, enquanto o UDP oferece velocidade e eficiência. É preciso entender as características de cada protocolo e usá-los adequadamente.
  • Casos de uso baseados em datagramas: o uso de datagramas é adequado para descoberta local, broadcast, encapsulamento de pacotes etc.
  • Recomendação de uso de datagramas: conexões baseadas em sessão são comuns, mas usar datagramas também é útil. É uma boa oportunidade para aprender aspectos de baixo nível de redes.