O que é XDP (Express Data Path) no Linux

Starship Prompt (1)
⏱️ 8 min read

XDP (ou Express Data Path) é um utilitário de rede disponível no kernel do Linux. O XDP é usado em muitas empresas populares para resolver alguns problemas sérios de rede que enfrentam ao lidar com milhões de solicitações por segundo. Este é um programa de código aberto licenciado pelo MIT mesclado no kernel Linux da versão 4.8.

Como Corrigir O Erro “Este Acess...
Como Corrigir O Erro “Este Acessório Pode Não Ser Compatível” No IPhone

O XDP é um processador de pacotes de dados de rede programável e de desempenho. Ele existe para mitigar alguns problemas sérios do lado do servidor, como ataques DDoS (Distributed Denial-of-Service) ou como um balanceador de carga.

Necessidade de XDP

A necessidade de um caminho de dados de rede de alto desempenho é sempre um recurso necessário para servidores Linux. Mas a programabilidade desses caminhos de dados também deve estar lá para que os desenvolvedores façam algo utilizável com isso. Embora o XDP tenha um caminho de aprendizado bastante íngreme, devido ao recente desenvolvimento de muitas ferramentas e frameworks, escrever código XDP é bastante acessível hoje em dia.

A grande vantagem do XDP é sua velocidade. A principal funcionalidade do XDP é que os desenvolvedores podem criar novas funcionalidades para filtrar pacotes sem modificar o próprio kernel.

Existem alguns cenários em que algum pacote não precisa percorrer toda a pilha da rede para decidir apenas encaminhar ou descartar o pacote. Isso deve ser feito na primeira camada da pilha de rede, colocando alguns filtros. Esses filtros devem ser programados de forma que possam reconhecer facilmente um pacote malicioso e soltá-lo logo no início da pilha. Isso pode economizar muito tempo e poder de processamento.

Com o XDP, essa filtragem é possível bem na frente da pilha de rede.

Agora usando o XDP, o desenvolvedor pode filtrar quaisquer pacotes que possam ser enviados por qualquer hacker para fazer um ataque DDoS. Isso pode reduzir muito da sobrecarga na pilha de rede do kernel normal. Esse recurso foi demonstrado recentemente pela Cloudflare em sua demonstração de proteção contra DDoS.

Xdp 1

Algumas características notáveis ​​do XDP são as seguintes:

  1. Não requer nenhum hardware especializado: o XDP pode executar qualquer hardware que você usar. Sim, a velocidade pode ser comprometida se você não tiver o dispositivo otimizado ou seus drivers, mas para fins de teste, você não precisa de nenhum hardware especializado.
  2. Não requer desvio do kernel: o XDP é executado antes que o pacote atinja a pilha de rede do kernel. Uma função de retorno de chamada é acionada quando um pacote é recebido e o XDP o processa o mais rápido possível.
  3. Ele não substitui a pilha TCP/IP: o XDP está presente no nível mais baixo da pilha de rede. Quando ele passa o pacote, o pacote entra na pilha de rede do kernel normal, que inclui a pilha TCP/IP.
  4. Funciona em conjunto com o TCP/IP com todas as funcionalidades do BPF (Berkeley Packet Filter): XDP não substitui nada. Ele ainda usa eBPF para processar pacotes e dar ao desenvolvedor mais facilidade para escrever código.

Por que o XDP é muito rápido

O XDP é um caminho de dados de rede programável e de alto desempenho baseado em eBPF no kernel Linux. O ganho de desempenho do XDP é devido ao processamento de pacotes bare metal no nível mais baixo da pilha de software. Isso significa que o pacote de dados vindo da rede atingiu o XDP primeiro antes de qualquer outro processo do kernel.

Portanto, os engenheiros podem programar o XDP para otimizá-lo para vários casos de uso. Da proteção DDoS ao balanceador de carga.

O XDP é carregado diretamente na pilha de rede. Quando um pacote é recebido pela pilha de rede, ele recebe um retorno de chamada e processa os pacotes o mais rápido possível. O XDP pode descartar 26 milhões de pacotes por segundo por núcleo em hardware comum.

A principal razão pela qual o XDP é muito rápido é que o usuário pode ler diretamente ou fazer alterações nos dados do pacote de rede e tomar decisões sobre como lidar com o pacote em um estágio anterior. Isso requer uma sobrecarga de processo muito menor, resultando em melhor velocidade.

Conecte a pilha de rede com o XDP

Você pode se conectar à rede com o XDP por vários meios, mas estou mencionando alguns métodos populares aqui.

  1. XDP Genérico: Nesse processo, o XDP é carregado no kernel, mas obtém muito pouco benefício de desempenho. Esta é a maneira fácil de executar um programa XDP sem qualquer suporte do hardware.
  2. XDP nativo: O XDP nativo é carregado pelo próprio driver de rede. Requer o suporte do driver da placa de rede.

Tipos de operação que o XDP executa

Algumas das operações que o XDP pode realizar quando um pacote é recebido pela interface de rede são:

  1. XDP_DROP: Ele descarta os pacotes e não os processa. Usando um programa eBPF para analisar o padrão de tráfego e pode descartar pacotes em tempo real.
  2. XDP_PASS: Encaminha os pacotes para a pilha de rede para processamento adicional. Ele pode modificar o conteúdo do pacote antes que isso aconteça.
  3. XDP_ABORTED: Ele descarta o pacote de dados da rede, deixando uma exceção de ponto de rastreamento.
  4. XDP_TX: encaminhe os pacotes para a mesma interface de rede que os recebe. Os pacotes podem ser modificados em não modificados.
  5. XDP_REDIRECT: Redirecionar o pacote para outro NIC (controlador de interface de rede).
Xdp 2 1

XDP e eBPF

eBPF é a versão estendida do Berkeley Packet Filter. É como uma máquina virtual abstrata rodando dentro do kernel do Linux. O eBPF é usado para executar um programa definido pelo usuário dentro de um ambiente sandbox no kernel Linux. Geralmente, é usado para executar ferramentas de rede e monitoramento em servidores Linux para garantir o desempenho ideal.

XDP é uma estrutura usada para escrever processamento de pacotes de alta velocidade em aplicativos BPF. Para torná-lo ainda mais rápido, o XDP executa o BPF imediatamente após o recebimento de um pacote pela pilha de rede.

O XDP tem uma curva de aprendizado muito íngreme. Portanto, os desenvolvedores estão criando ferramentas e frameworks para facilitar a programação usando o eBPF. Torna muito fácil escrever código para processar processamento de rede de alta frequência usando XDP e eBPF. A principal vantagem do XDP é que ele não exige que você modifique o kernel, o que era uma grande dor de cabeça para os engenheiros.

Mas como as pessoas disseram, grande poder vem com grande responsabilidade. Como o XDP executa o eBPF o mais cedo possível antes que os pacotes sejam analisados ​​pelo próprio kernel, os programas eBPF precisam fazer toda a análise e não podem depender do kernel para fazer nada por eles.

Como programador, na maior parte do tempo você está trabalhando com terminal. Este é um guia para decorar o prompt do seu terminal. Confira.

Casos de uso comuns de XDP e eBPF

  1. Ataque DDoS: O principal caso de uso do XDP é a proteção DDoS (Distributed Denial of Service). Durante o ataque DDoS, o invasor tenta usar o máximo possível de recursos do servidor, não deixando nenhum processo para o usuário final. Usando o XDP como a camada muito rápida da pilha de rede, não há custo de processamento associado ao descarte de um pacote de dados de rede. Após a filtragem XDP, o pacote passa por todos os outros métodos de filtragem que o kernel do Linux fornece.
  2. Balanceador de carga: O XDP também é usado como balanceador de carga para lidar com uma enorme quantidade de tráfego para o servidor. Incluindo o Facebook, muitas empresas gigantes de tecnologia usam essa tecnologia. Anteriormente, os engenheiros usavam um servidor dedicado como balanceador de carga. Que é muito difícil de gerenciar e tem que ter um desempenho muito bom para atender milhões de clientes. Mas imagine usar a camada XDP como um balanceador de carga sem servidor central, como resultado, sem ponto único de falha.
  3. Firewall: XDP com eBPF pode ser usado para escrever várias regras de firewall para proteger o sistema com sobrecarga mínima.

perguntas frequentes

O que é BCC é eBPF?

BCC é construído sobre eBPF. É um kit de ferramentas ou estrutura para programas de rastreamento e manipulação de kernel que vem com uma interface de linha de comando muito útil. BCC ajuda a escrever instruções Kernal em C. Também inclui um wrapper em torno do LLVM.

O que é libBPF?

LibBPF é um conjunto alternativo de ferramentas para fazer um aplicativo BPF. Está escrito na linguagem de programação C.

Join our Newsletter and receive offers and updates! ✅

0 0 votes
Article Rating
Avatar of Routech

Routech

Routech is a website that provides technology news, reviews and tips. It covers a wide range of topics including smartphones, laptops, tablets, gaming, gadgets, software, internet and more. The website is updated daily with new articles and videos, and also has a forum where users can discuss technology-related topics.

Você pode gostar...

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x