Empresa NGINX sobre o início dos testes dos protocolos QUIC e HTTP/3 no servidor HTTP e proxy nginx. A implementação é baseada no da especificação IETF-QUIC e está disponível através de , ramificado da versão 1.19.0. O código é distribuído sob a licença BSD e não se sobrepõe à do HTTP/3 para nginx pela Cloudflare, que é um projeto separado.
O suporte ao HTTP/3 no nginx é marcado como experimental, pois do protocolo estão implementados. Enquanto isso, o nginx já pode ser usado para enviar respostas a solicitações simples HTTP/3 sobre QUIC e transferir/baixar grandes arquivos. Entre os recursos ainda ausentes do protocolo estão os mecanismos de negociação de versão do protocolo, ECN e controle de congestionamento, logs estruturados, modo de recuperação (QUIC recovery, gerência de fluxo e congestionamento), Rebinding de NAT, endereços móveis, Server push, anexo de dados (trailer). Além disso, foi proposta apenas uma suporte básico para o tratamento de pacotes ACK e controle de fluxo, o que requer melhorias. Nem todos os requisitos da norma foram atendidos.
Para ativar o HTTP/3, é necessário compilar o nginx com o módulo http_v3_module e adicionar uma diretiva adicional
«listen» com a flag «http3″ para criar um socket UDP de escuta. Por exemplo:
server {
listen 443 ssl; # socket TCP para HTTP/1.1
listen 443 http3 reuseport; # socket UDP para QUIC+HTTP/3
ssl_protocols TLSv1.3; # TLS 1.3 é obrigatório no QUIC
ssl_certificate ssl/www.example.com.crt;
ssl_certificate_key ssl/www.example.com.key;
add_header Alt-Svc ‘quic=»:443″‘; # sinal de disponibilidade do QUIC
add_header QUIC-Status $quic; # Cabeçalho com o status do uso do QUIC
}
Vale lembrar que o HTTP/3 padroniza o uso do protocolo QUIC como transporte para o HTTP/2. O protocolo (Quick UDP Internet Connections) está sendo desenvolvido pela Google desde 2013 como uma alternativa ao conjunto TCP+TLS para a Web, resolvendo problemas com o longo tempo de conexão e negociação em TCP e eliminando latências durante a perda de pacotes no processo de transmissão de dados. O QUIC é uma camada sobre o protocolo UDP, suportando multiplexação de várias conexões e fornecendo métodos de criptografia equivalentes ao TLS/SSL. Do lado do cliente, o suporte experimental ao HTTP/3 já foi adicionado ao , e .
Principais QUIC:
- Alta segurança, equivalente ao TLS (na verdade, o QUIC fornece a capacidade de usar TLS 1.3 sobre UDP);
- Controle da integridade do fluxo, prevenindo a perda de pacotes;
- Capacidade de estabelecer uma conexão instantaneamente (0-RTT, em cerca de 75% dos casos, os dados podem ser transmitidos imediatamente após o envio do pacote de configuração da conexão) e garantir latências mínimas entre o envio da solicitação e o recebimento da resposta (RTT, Round Trip Time);
- Não reutilizar o mesmo número de sequência ao retransmitir um pacote, o que ajuda a evitar ambiguidades na identificação dos pacotes recebidos e elimina timeouts;
- A perda de um pacote afeta apenas a entrega do fluxo relacionado e não interrompe a entrega de dados em fluxos paralelos transmitidos através da conexão atual;
- Mecanismos de correção de erros que minimizam atrasos devido à retransmissão de pacotes perdidos. Uso de códigos especiais de correção de erros em nível de pacote para reduzir situações que exigem a retransmissão de dados de pacotes perdidos.
- Os limites dos blocos criptográficos estão alinhados com os limites dos pacotes QUIC, o que diminui o impacto da perda de pacotes na decodificação do conteúdo dos pacotes subsequentes.
- Ausência de problemas de bloqueio de fila TCP.
- Suporte a identificadores de conexão, permitindo reduzir o tempo de estabelecimento de novas conexões para clientes móveis.
- Capacidade de conectar mecanismos avançados de controle de congestionamento.
- Uso de técnicas de previsão de largura de banda em cada direção para garantir a intensidade ideal de envio de pacotes, evitando um estado de sobrecarga em que ocorre a perda de pacotes.
- Notável de desempenho e capacidade em comparação ao TCP. Para serviços de vídeo, como o YouTube, a aplicação do QUIC demonstrou uma redução de 30% nas operações de buffering durante a reprodução de vídeos.
Fonte: opennet.ru
