Quick UDP Internet Connections (QUIC) é um protocolo de camada de transporte de uso geral projetado para substituir o Transmission Control Protocol (TCP) por meio de sua flexibilidade, segurança integrada, menos problemas de desempenho e taxa de adoção mais rápida. Originalmente desenvolvido pelo Google, o QUIC usa o User Datagram Protocol (UDP) como mecanismo de transporte de baixo nível para mover pacotes entre cliente e servidor. Notavelmente, o QUIC também incorpora o Transport Layer Security (TLS) como um componente integral, não como uma camada adicional como HTTP/1.1 e HTTP/2.

HTTP/3, baseado no QUIC, é a terceira versão principal do Hypertext Transfer Protocol (HTTP) e foi adotado como um padrão IETF em 2022. QUIC+HTTP/3 foram criados para resolver limitações inerentes ao TCP que limitam o desempenho e a experiência do usuário.

Como as APIs funcionam?

As APIs são a “face pública” dos aplicativos, revelando as funções que eles desempenham e as informações que podem fornecer, além de definir o formato adequado das solicitações. Quando um desenvolvedor cria e expõe a API de um aplicativo, ele permite que outros aplicativos se comuniquem com ele.

Em muitos casos, as APIs economizam um tempo valioso do desenvolvedor porque tornam funções comumente usadas prontamente disponíveis. Em vez de duplicar a funcionalidade de um aplicativo existente, os desenvolvedores podem integrar a funcionalidade em seus aplicativos fazendo chamadas para a API do aplicativo existente.

Diagrama HTTP

Visão geral de alto nível das pilhas de transporte HTTP

Noções básicas de QUIC+HTTP/3

O objetivo do QUIC é fornecer um protocolo de transporte de alto desempenho, alta confiabilidade e alta segurança para HTTP/3 (embora o QUIC também seja adequado para tráfego não HTTP).

Se o QUIC é uma novidade para você, recomendamos assistir ao vídeo introdutório abaixo.

UDP, TCP e TLS

UDP é um protocolo simples e leve que não precisa de um handshake triplo complexo como o TCP para estabelecer a primeira conexão. Essa simplicidade torna o UDP rápido e sem conexão, mas também significa que ele não possui os recursos essenciais para uma comunicação confiável e segura quando comparado ao TCP.

O QUIC é único porque combina os benefícios dos protocolos UDP e TCP. Embora seja sem conexão e aproveite o UDP para o protocolo de transporte de baixo nível para reduzir os atrasos de conexão e transporte, ele é orientado à conexão nas camadas superiores devido à sua reimplementação dos recursos de estabelecimento de conexão e detecção de perda do TCP, que garantem a entrega de pacotes. Ele lida com as tarefas de identificar dados perdidos e concluir retransmissões para garantir uma experiência perfeita ao usuário.

O QUIC também incorpora o TLS como um componente integral, não como uma camada adicional, como é o caso do HTTP/1.1 e HTTP/2. Essa incorporação garante que as mensagens sejam criptografadas por padrão.

Visão geral de uma rede QUIC

O diagrama abaixo descreve a anatomia básica de uma rede QUIC. Conforme visto no diagrama, os objetos lógicos que contêm solicitações HTTP/3, respostas ou quaisquer dados de aplicativo são fluxos QUIC. Para transmissão entre pontos de extremidade da rede, os fluxos QUIC são encapsulados dentro de várias camadas lógicas.

Diagrama de anatomia de rede do QUIC

Anatomia de um fluxo QUIC

Começando de fora para dentro, as camadas e objetos lógicos são:

  • Datagrama UDP – Contém um cabeçalho especificando as portas de origem e destino (junto com dados de comprimento e soma de verificação), seguido por um ou mais pacotes QUIC. O datagrama é a unidade de informação transmitida do cliente para o servidor através da rede.
  • Pacote QUIC – Contém um cabeçalho QUIC e um ou mais quadros QUIC.
  • Cabeçalho QUIC – Contém metadados sobre o pacote. Existem dois tipos de cabeçalho:
    • O cabeçalho longo, usado durante o estabelecimento da conexão.
    • O cabeçalho curto, usado depois que a conexão é estabelecida. Ele contém (entre outros dados) o ID da conexão, o número do pacote e a fase da chave (usada para rastrear quais chaves foram usadas para criptografar o pacote, em suporte à rotação de chaves). Os números de pacotes são únicos (e sempre aumentam) para uma conexão e fase-chave específicas.
  • Quadro – Contém o tipo, ID do fluxo, deslocamento e dados do fluxo. Os dados de fluxo são distribuídos em vários quadros, mas podem ser reunidos usando o ID de conexão, o ID de fluxo e o deslocamento, que são usados para apresentar os blocos de dados na ordem correta.
  • Fluxo – Um fluxo unidirecional ou bidirecional de dados dentro de uma única conexão QUIC. Cada conexão QUIC pode suportar múltiplos fluxos independentes, cada um com seu próprio ID de fluxo. Se um pacote QUIC contendo alguns fluxos for perdido, isso não afeta o progresso de nenhum fluxo não contido no pacote ausente (isso é crítico para evitar o bloqueio de cabeça de linha experimentado pelo HTTP/2). Os fluxos podem ser bidirecionais e criados por qualquer ponto de extremidade.
Como o QUIC funciona com um handshake TLS

Um handshake TLS fornece uma conexão segura entre cliente e servidor. A criptografia fornecida pelo QUIC requer TLS v1.3 . Conforme visto no diagrama abaixo, o QUIC mantém a “Camada de Conteúdo” TLS que fornece as chaves criptográficas, mas substitui a “Camada de Registro” por seu próprio mecanismo de transporte.

O QUIC também depende do TLS para autenticação e negociação de parâmetros essenciais para segurança e desempenho. Em vez de uma estratificação estrita, os dois protocolos cooperam: O QUIC usa o handshake TLS para estabelecer uma conexão segura, enquanto o TLS usa a confiabilidade, a entrega ordenada e a camada de registro fornecidas pelo QUIC.

Em um nível alto, há duas interações principais entre os componentes TLS e QUIC:

  • O componente TLS envia e recebe mensagens por meio do componente QUIC, com o QUIC fornecendo uma abstração de fluxo confiável para o TLS.
  • O componente TLS fornece uma série de atualizações para o componente QUIC, incluindo (a) novas chaves de proteção de pacotes para instalar e (b) alterações de estado, como conclusão de handshake, certificado do servidor, etc.

Opções de suporte HTTP/3 para QUIC TLS

QUIC TLS é uma variante do TLS projetada especificamente para o protocolo QUIC. Atualmente, há duas opções para usuários que buscam suporte a HTTP/3 no QUIC TLS:

  • Implementação do QUIC do OpenSSL – O OpenSSL está atualmente trabalhando na implementação de uma pilha QUIC completa por conta própria. Este desenvolvimento encapsulará todas as funcionalidades do QUIC dentro da implementação, tornando muito mais fácil para usuários do HTTP/3 usarem a API OpenSSL TLS sem se preocupar com a funcionalidade específica do QUIC.
  • Bibliotecas que suportam BoringSSL QUIC API – Várias bibliotecas SSL como BoringSSL, quicTLS e LibreSSL (que começou como um fork do OpenSSL) agora fornecem funcionalidade QUIC TLS implementando a BoringSSL QUIC API. Esta é atualmente a única opção para usuários que desejam usar HTTP/3 porque a implementação OpenSSL QUIC TLS ainda não está pronta.
Vantagens do QUIC+HTTP/3

QUIC+HTTP/3 visa melhorar o desempenho de aplicativos web reduzindo a latência e melhorando a entrega de dados em redes não confiáveis. Suas vantagens incluem:

  • Latência reduzida – Protocolos tradicionais como o TCP sofrem com latência devido ao seu processo de configuração de conexão. Os recursos de multiplexação do QUIC+HTTP/3 permitem que eles estabeleçam conexões de forma mais eficiente, resultando em menor latência para estabelecer conexões e transmitir dados.
  • Estabelecimento de conexão mais rápido – QUIC+HTTP/3 combina o handshake TLS e a configuração de criptografia em uma única etapa, reduzindo o número de viagens de ida e volta necessárias para estabelecer uma conexão segura.
  • Multiplexação – Ao manipular vários fluxos de dados em uma única conexão, o QUIC+HTTP/3 permite um uso mais eficiente dos recursos de rede e ajuda a evitar o problema de bloqueio de linha de frente, onde um fluxo lento pode atrasar outros em conexões TCP tradicionais.
  • Correção de erros aprimorada – O QUIC incorpora técnicas de correção de erros de encaminhamento, que podem ajudar a recuperar pacotes perdidos sem a necessidade de retransmissões, reduzindo o impacto da perda de pacotes no desempenho.
  • Impacto reduzido na perda de pacotes – O UDP não tem conexão e permite uma transmissão mais rápida sem a necessidade da rigorosa verificação de erros do TCP. Isso é particularmente vantajoso em cenários onde as condições de rede são menos estáveis.
  • Controle de congestionamento adaptável – QUIC+HTTP/3 são projetados para serem mais eficientes e responsivos do que o controle de congestionamento do TCP, levando a um melhor desempenho em ambientes de rede variados.
  • Suporte à migração – QUIC+HTTP/3 pode fazer a transição perfeitamente entre diferentes conexões de rede (por exemplo, alternando de Wi-Fi para celular) sem interromper o desempenho do aplicativo.
  • Segurança aprimorada – QUIC+HTTP/3 integra criptografia por padrão, aumentando a segurança e a privacidade para transmissão de dados. Essa criptografia impede a espionagem e a adulteração dos dados em trânsito.
  • Travessia de NAT – O uso de UDP pelo QUIC+HTTP/3 pode ajudar na travessia de Network Address Translation (NAT), tornando mais simples estabelecer conexões em cenários onde conexões TCP tradicionais podem enfrentar problemas.
  • Evolução constante – Como QUIC+HTTP/3 foram projetados para serem implementados e atualizados por software em vez de exigir mudanças na infraestrutura de rede subjacente, eles podem ser atualizados e melhorados mais rapidamente para se adaptarem às mudanças nas condições da rede e às preocupações com a segurança.
Aprenda sobre o uso do QUIC+HTTP/3 com NGINX

Explore os recursos abaixo para saber mais sobre a implementação QUIC+HTTP/3 do NGINX e outras maneiras de usar QUIC+HTTP/3 para uma comunicação mais rápida e eficiente.