
Como mitigar spam rapidamente com QUIC: tudo o que você precisa saber sobre Solana e QUIC
Sobre o que é este artigo?
A Solana é a blockchain mais rápida e escalável atualmente disponível no mercado. Ela é conhecida pela velocidade de suas transações, o que a torna a rede ideal para vários casos de uso. Apesar dessas conquistas, a rede da Solana tem sido alvo de medo, incerteza e dúvida (conhecidos informalmente pela sigla FUD) em relação à indisponibilidade. Embora esse FUD tenha sido uma preocupação legítima no passado, atualmente ele é injustificado. Por quê? Os engenheiros da Solana Labs trabalharam em várias atualizações da rede ao longo do último ano. A principal delas foi substituir o protocolo personalizado da Solana, baseado em UDP bruto e usado para receber transações, pelo QUIC.
Neste artigo, examinaremos o funcionamento dos protocolos de rede TCP e UDP e veremos como o QUIC aprimora ambos. Em seguida, voltaremos nossa atenção para a Solana e discutiremos suas vantagens específicas. O objetivo deste artigo é oferecer uma compreensão abrangente de por que essa atualização da rede representa um marco técnico importante para a Solana.
Atualizações da rede Solana
Em 13 de dezembro de 2022, a Solana Foundation publicou um artigo intitulado “Atualizações da rede Solana”. Nele, foram apresentadas várias atualizações que estavam sendo implementadas na rede, além do progresso de cada uma. As atualizações são as seguintes:
QUIC
- Atualmente ativo na Mainnet-beta
QoS ponderada por stake
- Atualmente ativa na Mainnet-beta
Mercados de taxas
- Atualmente ativos na Mainnet-beta, com suporte de RPC e carteiras em breve
- Você pode acompanhar o progresso aqui
Aumento do tamanho das transações
- Atualmente em desenvolvimento
Estado de voto compacto
- Atualmente ativo na Testnet
Um dos principais motivos pelos quais a Solana enfrentou períodos de indisponibilidade no passado foi o spam. Alguns exemplos incluem:
- Spam da IDO da Grape em 14 de setembro de 2021
- Ataques DDoS ocorridos de 6 a 12 de janeiro de 2022
- Spam de mint de NFT ocorrido entre 30 de abril e 1º de maio de 2022
Desde a implementação do QUIC, não houve nenhum caso relatado de indisponibilidade da Solana relacionado a spam. Isso torna o QUIC um marco na melhoria do tráfego de rede e da ingestão de dados da Solana. Antes de conhecermos o QUIC, precisamos explorar o funcionamento dos protocolos de rede. Compreender melhor os fundamentos de rede nos permite reconhecer o verdadeiro impacto do QUIC na rede da Solana.
O que é um protocolo de rede?
Um protocolo de rede é um conjunto estabelecido de regras que define como os dados são enviados entre dispositivos na mesma rede. Os protocolos de rede permitem que dispositivos conectados se comuniquem facilmente entre si, independentemente de seus componentes internos, estrutura ou design.
Imagine que você está sentado em frente a um amigo em um restaurante em Paris. Vocês decidem conversar em francês e, como resultado, a conversa flui sem problemas. A decisão conjunta de falar francês representa um acordo sobre um conjunto de regras gramaticais, vocabulário e pronúncia que ambas as partes entendem.
Os protocolos de rede funcionam de maneira semelhante para dispositivos conectados, assim como o francês serve de “protocolo” para sua conversa em um restaurante parisiense. A decisão de usar TCP, UDP ou QUIC é uma decisão de aceitar um conjunto estabelecido de regras e convenções para trocar informações. Seguir um protocolo de rede específico garante que os dispositivos conectados possam se entender sem confusão.
O que é TCP?
O Transmission Control Protocol (TCP) é uma interface de comunicação padronizada para enviar fluxos de dados entre dois endpoints em uma rede. Vint Cerf e Bob Kahn criaram o Transmission Control Program, um protocolo monolítico que foi dividido em uma arquitetura modular formada pelo TCP e pelo Internet Protocol (IP). O conjunto completo é chamado de TCP/IP. Neste artigo, quando uso a abreviação TCP, refiro-me ao Transmission Control Protocol, e não ao conjunto completo.
O TCP é orientado à conexão: ele exige que uma conexão entre o cliente e o servidor seja estabelecida antes do envio dos dados. O TCP usa um handshake de três etapas para estabelecer uma conexão: sincronizar (SYN), sincronizar-confirmar (SYN-ACK) e confirmar (ACK). Você pode pensar em SYN como estender a mão para cumprimentar alguém e perguntar se essa pessoa está pronta para conversar; em SYN-ACK como a outra pessoa apertar sua mão, dizer que está pronta e perguntar se você quer continuar; e em ACK como você retribuir o aperto de mão e dizer que deseja continuar conversando. Nesse momento, uma sessão é estabelecida. Ambas as partes sabem que estão conectadas e concordam que estão prontas para compartilhar informações.
O TCP divide os dados em pacotes, que são enviados pela rede. Pequenas quantidades de dados são adicionadas a cada pacote. Esses dados adicionais incluem um número de sequência, usado para detectar pacotes perdidos ou fora de ordem, e uma soma de verificação, que permite detectar erros dentro de um pacote.
Quando uma conversa é interrompida, pedimos que a outra pessoa repita o que disse para termos certeza de que ouvimos corretamente. O TCP lida com interrupções de forma semelhante por meio da Automatic Repeat Request (ARQ). Quando ocorre um problema, a ARQ instrui o remetente a reenviar o pacote danificado ou perdido. Em seguida, o TCP informa ao usuário que ele deve reduzir a taxa de transmissão de dados e limita o número de pacotes não confirmados que podem estar em trânsito. Depois que o erro é resolvido, o TCP usa mecanismos para evitar congestionamentos e aumenta gradualmente sua velocidade.
O TCP não é o protocolo certo para todos os casos de uso, pois ele ordena todo o tráfego. Portanto, se uma parte dos dados for perdida ou danificada, tudo o que vier depois desse pacote precisará esperar. Mas e se não fosse necessário esperar?
O que é UDP?
O User Datagram Protocol (UDP) é uma interface de comunicação padronizada usada para transmitir dados por uma rede. Diferentemente do TCP, o UDP não é orientado à conexão e não garante a entrega, a ordenação nem a ausência de duplicação dos pacotes de dados. O UDP não realiza nenhum diálogo de handshake, o que deixa a transmissão de dados vulnerável a qualquer instabilidade da rede subjacente. Isso torna o UDP mais rápido que outros protocolos, pois ele não gasta tempo estabelecendo uma conexão com o destino. No entanto, isso também faz com que algumas pessoas se refiram a ele como “Unreliable Datagram Protocol”.
O UDP funciona enviando datagramas pela rede. Datagramas são conjuntos de dados mais autossuficientes, com informações usadas para o roteamento da origem ao destino. Graças a essas informações, um datagrama não depende de outros datagramas para ser roteado. Esses datagramas são formados por um cabeçalho e dados. O cabeçalho tem quatro campos, todos com 16 bits: uma porta de origem opcional, uma porta de destino, um comprimento e uma soma de verificação opcional. O processo de envio ocorre da seguinte forma:
- A aplicação remetente cria um socket UDP
- A aplicação remetente insere os dados que deseja enviar em um datagrama UDP, com um cabeçalho que contém a porta de destino e outras informações relevantes
- O datagrama é enviado à camada IP para roteamento e entrega
- A camada IP recebe o datagrama, transfere-o para a camada UDP e remove seu cabeçalho
- O datagrama é enviado à aplicação que está escutando na porta especificada
Pense no UDP como falar com alguém do outro lado de uma sala movimentada. Você grita para essa pessoa sem se preocupar se ela ouviu nem esperar uma resposta. Nesse caso, você quer transmitir sua mensagem rapidamente, sem manter uma conversa prolongada. É arriscado, pois a pessoa pode não ter ouvido tudo o que você disse, mas pode ser muito eficaz.
Por que usar um protocolo de comunicação sem conexão como o UDP quando existe algo mais confiável, como o TCP? O UDP é extremamente útil para aplicações sensíveis ao tempo ou para situações em que alguma perda de dados é aceitável. Perder alguns quadros enquanto você joga videogame com amigos é infinitamente melhor do que sofrer com pausas e buffering constantes. O UDP também é usado em chamadas VoIP, consultas ao Domain Name System (DNS), monitoramento e registro de logs.
QUIC: equilibrando eficiência e confiabilidade
QUIC é um protocolo moderno da camada de transporte projetado por Jim Roskind, no Google, em 2013. Ele combina a confiabilidade do TCP com os benefícios de baixa latência do UDP, criando um ambiente otimizado para comunicação assíncrona rápida e segura. O QUIC se diferencia ao incorporar sessões seguras e estratégias avançadas de controle de fluxo, características do TCP, à estrutura mais flexível e rápida oferecida pelo UDP.
No QUIC, o estabelecimento da conexão é simplificado pela integração da troca de chaves criptográficas e dos detalhes do protocolo ao handshake inicial, que é sempre criptografado com segurança por meio do Transport Layer Security (TLS). O protocolo permite conexões multiplexadas via UDP, possibilitando que vários fluxos de dados independentes cheguem aos seus endpoints sem afetar uns aos outros. O QUIC controla o fluxo de cada stream de forma independente, garantindo que um erro em um stream não prejudique os demais. Isso ajuda a evitar o bloqueio de início de fila (ou seja, quando uma fila de pacotes fica parada por causa do primeiro pacote), um problema que afeta com frequência as conexões TCP.
Se um pacote for perdido ou danificado, o QUIC retransmite os dados de forma inteligente, preservando a integridade e a continuidade da comunicação. Além disso, o QUIC é resiliente a mudanças no ambiente de rede. Cada pacote carrega um identificador de conexão que identifica de maneira única a conexão com o servidor, independentemente da origem. Assim, a conexão pode ser restabelecida pelo envio de outro pacote, pois todos os pacotes contêm esse ID, o que significa que a conexão original continua válida. Em termos metafóricos, isso significa que, se você mudar de sala, sua conversa não será interrompida e continuará sem problemas.
Imagine que você está novamente naquela sala movimentada, tentando conversar com seu amigo. Desta vez, vocês têm walkie-talkies criptografados, o que permite uma conversa clara e segura. À medida que a conversa passa por vários assuntos, seu amigo confirma cada mensagem fazendo um sinal de positivo. Uma expressão confusa indica que você deve repetir qualquer mensagem que não tenha sido compreendida, garantindo que nada se perca na comunicação. E, se você ou seu amigo mudar de sala, o diálogo continuará sem interrupções. Essa é a essência do QUIC: uma comunicação robusta, adaptável e eficiente.
Como a Solana implementa o QUIC
O QUIC oferece várias vantagens à Solana, entre elas:
- Redução do tempo de estabelecimento da conexão: ao otimizar o processo de handshake, o QUIC minimiza a latência
- Multiplexação e gerenciamento eficiente de pacotes: a capacidade do QUIC de processar vários fluxos de dados simultaneamente, sem bloqueio de início de fila, melhora a capacidade de processamento e a eficiência das transações
- Adaptabilidade e resiliência: o protocolo foi projetado para se adaptar às mudanças nas condições da rede, um requisito essencial para um sistema distribuído e descentralizado como a Solana
- Personalização para otimização da rede: a flexibilidade do QUIC permite implementações personalizadas, como a da Solana, para atender a metas específicas de desempenho e segurança da rede
O QUIC foi adicionado às portas que recebem as transações dos usuários. Isso permite impor limites ao tráfego de um agente para que a rede possa se concentrar no processamento de transações legítimas. O QUIC está ativo na Solana e foi adotado integralmente na Mainnet-beta com a versão 1.13.4. Após sua integração, a rede apresentou melhorias significativas em estabilidade e capacidade de processamento.
Apesar desses avanços, o recente congestionamento da rede gerou discussões sobre a eficiência computacional do QUIC em comparação com a implementação anterior de UDP da Solana. Os críticos afirmam que a abordagem de UDP bruto permitia que os validadores se concentrassem exclusivamente no processamento de transações, em vez de gerenciar spam de handshakes e criptografia. Além disso, a troca e a verificação de chaves não fazem parte do handshake inicial na implementação da Solana. A Solana usa a opção do QUIC de enviar um “pacote de desafio” para verificar endereços IP. O objetivo desse desafio é evitar a verificação do certificado na primeira etapa do handshake e realizá-la na segunda parte, após a validação do IP. Ainda é discutível se a Solana sofreu indisponibilidade relacionada a spam ou ataques DDoS, pois a recente interrupção da rede Solana em fevereiro pode ser considerada uma negação de serviço.
Com a evolução da rede, é importante revisar e aprimorar continuamente as implementações feitas nela. O QUIC busca resolver muitos dos problemas do TCP e do UDP, mas, em retrospecto, sua eficácia é discutível. Um aspecto importante é considerar como uma solução funcionaria em hardware. Devido à sua simplicidade, o TCP funciona muito melhor em hardware do que o QUIC. É possível argumentar facilmente que, com um conjunto de instruções AES, um protocolo baseado em TCP teria maior capacidade de processamento que o QUIC e seria mais eficiente em termos de TPS.
Vale destacar que a equipe da Jump Crypto está ampliando os limites do QUIC. A equipe criou sua própria implementação robusta e escalável durante o desenvolvimento do Firedancer, um novo cliente validador para a Solana. A rede do Firedancer foi projetada do zero para aproveitar o escalonamento do lado do receptor, um tipo de balanceamento de carga acelerado por hardware. Essa arquitetura paralela permite que cada núcleo da CPU processe com eficiência um segmento do tráfego recebido. A equipe publicou no X que:
Uma demonstração e uma thread sobre o marco técnico do QUIC no Firedancer podem ser encontradas aqui.
Conclusão
Parabéns! Neste artigo, exploramos os fundamentos dos protocolos de rede, com foco nas funções do TCP e do UDP e em sua evolução para o QUIC. Também examinamos a implementação do QUIC pela Solana, destacando seu papel crucial no aprimoramento da rede. Embora a resiliência da rede Solana contra spam e ataques DDoS tenha melhorado com o QUIC, o crescimento da rede revelou desafios e discussões relacionados à sua eficiência computacional e aos detalhes de sua implementação.
O QUIC representa o objetivo central da Solana de viabilizar uma rede com alta capacidade de processamento e baixa latência. Seus recursos de multiplexação e recuperação de perda de pacotes colocam a Solana na vanguarda das discussões sobre desempenho e escalabilidade. A implementação da equipe do Firedancer demonstra a adaptabilidade do QUIC e destaca o potencial de otimizações personalizadas para atender às mudanças nas demandas da rede.
Compreender o QUIC como desenvolvedor da Solana ajuda você a tomar decisões mais bem fundamentadas sobre temas que vão desde arquiteturas de aplicações até erros de transação. A Solana está em constante evolução, assim como o QUIC. Acompanhar as mudanças mais recentes na rede é a melhor maneira de criar aplicações de alto desempenho sobre a Solana. Mesmo que você não seja desenvolvedor, uma compreensão mais técnica do QUIC pode ajudar a entender por que a Solana é uma blockchain de alto desempenho, conhecida por sua velocidade e escalabilidade.
Se você leu até aqui, anon, muito obrigado! Insira seu endereço de e-mail abaixo para não perder nenhuma novidade sobre a Solana. Quer se aprofundar? Confira os artigos mais recentes no blog da Helius e continue hoje mesmo sua jornada pela Solana.
Recursos adicionais e outras leituras
Artigos relacionados
Assine a Helius
Acompanhe as novidades mais recentes do desenvolvimento Solana e receba atualizações quando publicarmos


