0
(0)

XDP (o Express Data Path) es una utilidad de red disponible en el kernel de Linux. XDP se usa en muchas empresas populares para resolver algunos problemas de red graves que enfrentan mientras manejan millones de solicitudes por segundo. Este es un programa de código abierto con licencia MIT fusionado en el kernel de Linux desde la versión 4.8.

XDP es un procesador de paquetes de datos de red programable y de rendimiento. Nace para mitigar algunos problemas graves del lado del servidor, como los ataques DDoS (Distributed Denial-of-Service) o como equilibrador de carga.

Necesidad de XDP

La necesidad de una ruta de datos de red de alto rendimiento siempre es una característica requerida para los servidores Linux. Pero la programabilidad de esas rutas de datos también debería estar allí para que los desarrolladores hagan algo utilizable. Aunque XDP tiene un camino de aprendizaje bastante empinado, debido al desarrollo reciente de muchas herramientas y marcos, escribir código XDP es bastante accesible hoy en día.

La gran ventaja de XDP es su velocidad. La funcionalidad principal de XDP es que los desarrolladores pueden crear una nueva funcionalidad para filtrar paquetes sin modificar el propio núcleo.

Hay algunos escenarios en los que no es necesario que un paquete tenga que viajar a través de toda la pila de la red para decidir simplemente reenviar o descartar el paquete. Debe hacerse en la primera capa de la pila de redes colocando algunos filtros. Estos filtros deben programarse de tal manera que puedan reconocer fácilmente un paquete malicioso y colocarlo justo al comienzo de la pila. Esto puede ahorrar mucho tiempo y potencia de procesamiento.

Con XDP, esta filtración es posible justo al frente de la pila de redes.

Ahora, al usar XDP, el desarrollador puede filtrar cualquier paquete que pueda enviar cualquier pirata informático para realizar un ataque DDoS. Esto puede reducir gran parte de la sobrecarga en la pila de red normal del kernel. Cloudflare demostró recientemente esta característica en su demostración de protección DDoS.

xdp 1

Algunas características notables de XDP son las siguientes:

  1. No requiere ningún hardware especializado: XDP puede ejecutar cualquier hardware que le presente. Sí, la velocidad puede verse comprometida si no tiene el dispositivo optimizado o sus controladores, pero para fines de prueba, no necesita ningún hardware especializado.
  2. No requiere la omisión del kernel: XDP se ejecuta antes de que el paquete llegue a la pila de redes del kernel. Se activa una función de devolución de llamada cuando se recibe un paquete y XDP lo procesa lo más rápido posible.
  3. No reemplaza la pila TCP/IP: XDP está presente en el nivel más bajo de la pila de red. Cuando pasa el paquete, el paquete ingresa a la pila de redes del núcleo normal que incluye la pila TCP/IP.
  4. Funciona junto con TCP/IP con todas las características de BPF (Berkeley Packet Filter): XDP no reemplaza nada. Incluso utiliza eBPF para procesar paquetes y facilitar al desarrollador la escritura de código.

Por qué XDP es muy rápido

XDP es una ruta de datos de red programable de alto rendimiento basada en eBPF en el kernel de Linux. La ganancia de rendimiento de XDP se debe al procesamiento de paquetes bare metal en el nivel más bajo de la pila de software. Significa que el paquete de datos proveniente de la red llega primero al XDP antes que a cualquier otro proceso del kernel.

Por lo tanto, los ingenieros pueden programar el XDP para optimizarlo para varios casos de uso. Desde la protección DDoS hasta el balanceador de carga.

XDP se carga directamente en la pila de red. Cuando la pila de red recibe un paquete, recibe una devolución de llamada y procesa los paquetes lo más rápido posible. XDP puede descargar 26 millones de paquetes por segundo por núcleo en hardware básico.

La razón principal por la que XDP es muy rápido es que el usuario puede leer directamente o realizar cambios en los datos del paquete de red y tomar decisiones sobre cómo manejar el paquete en una etapa anterior. Esto requiere una sobrecarga de proceso muy inferior y, como resultado, una mejor velocidad.

Conecte la pila de redes con XDP

Puede conectarse a la red con XDP por varios medios, pero aquí menciono algunos métodos populares.

  1. XDP genérico: En este proceso, XDP se carga en el núcleo, pero obtiene muy pocos beneficios de rendimiento. Esta es la manera fácil de ejecutar un programa XDP sin ningún soporte del hardware.
  2. XDP nativo: Native XDP es cargado por el propio controlador de red. Requiere el soporte del controlador de la tarjeta de red.

Tipos de operaciones que realiza XDP

Algunas de las operaciones que XDP puede realizar una vez que la interfaz de red recibe un paquete son:

  1. XDP_DROP: Deja caer los paquetes y no los procesa. Usando un programa eBPF para analizar el patrón de tráfico y puede descartar paquetes en tiempo real.
  2. XDP_PASS: Reenvía los paquetes a la pila de red para su posterior procesamiento. Puede modificar el contenido del paquete antes de que suceda.
  3. XDP_ABORTED: descarta el paquete de datos de red, dejando una excepción de punto de seguimiento.
  4. XDP_TX: reenvía los paquetes a la misma interfaz de red que los recibe. Los paquetes se pueden modificar o no modificar.
  5. XDP_REDIRECTO: redirigir el paquete a otro NIC (controlador de interfaz de red).

xdp 2 1

XDP y eBPF

eBPF es la versión extendida de Berkeley Packet Filter. Es como una máquina virtual abstraída que se ejecuta dentro del kernel de Linux. eBPF se utiliza para ejecutar un programa definido por el usuario dentro de un entorno de espacio aislado en el kernel de Linux. Generalmente, se utiliza para ejecutar herramientas de redes y monitoreo en servidores Linux para garantizar un rendimiento óptimo.

XDP es un marco utilizado para escribir procesamiento de paquetes de muy alta velocidad en aplicaciones BPF. Para hacerlo aún más rápido, XDP ejecuta BPF inmediatamente después de que la pila de red recibe un paquete.

XDP tiene una curva de aprendizaje muy pronunciada. Por lo tanto, los desarrolladores están creando herramientas y marcos para facilitar la programación usando eBPF. Hace que sea muy fácil escribir código para procesar procesamiento de red de muy alta frecuencia usando XDP y eBPF. La principal ventaja de XDP es que no requiere que modifique el kernel, lo que fue un gran dolor de cabeza para los ingenieros.

Pero como decía la gente, un gran poder conlleva una gran responsabilidad. Como XDP ejecuta eBPF tan pronto como sea posible antes de que el núcleo mismo analice los paquetes, los programas eBPF tienen que hacer todo el análisis por sí mismos y no pueden confiar en que el núcleo haga nada por ellos.

Como programador, la mayor parte de su tiempo está trabajando con la terminal. Esta es una guía para decorar el indicador de su terminal. Compruébalo.

Casos de uso comunes de XDP y eBPF

  1. ataque DDoS: El caso de uso principal de XDP es la protección DDoS (Distributed Denial of Service). Durante el ataque DDoS, el atacante intenta utilizar tantos recursos del servidor como sea posible sin dejar ningún proceso para el usuario final. Al usar XDP como la capa muy rápida de la pila de red, no hay costos de procesamiento asociados con la eliminación de un paquete de datos de red. Después del filtrado XDP, el paquete pasa por todos los demás métodos de filtrado que proporciona el kernel de Linux.
  2. equilibrador de carga: XDP también se usa como equilibrador de carga para manejar una gran cantidad de tráfico hacia el servidor. Incluyendo a Facebook, muchas empresas tecnológicas gigantes utilizan esta tecnología. Anteriormente, los ingenieros usaban un servidor dedicado como equilibrador de carga. Lo cual es muy difícil de administrar y tiene que funcionar muy bien para atender a millones de clientes. Pero imagine usar la capa XDP como un balanceador de carga sin un servidor central, como resultado, sin un punto único de falla.
  3. cortafuegos: XDP con eBPF se puede usar para escribir varias reglas de firewall para proteger el sistema con una sobrecarga mínima.

Preguntas frecuentes

¿Qué es BCC es eBPF?

BCC se basa en eBPF. Es un conjunto de herramientas o marco para programas de seguimiento y manipulación del kernel que viene con una interfaz de línea de comandos muy útil. BCC ayuda a escribir la instrucción Kernal en C. También incluye un contenedor alrededor de LLVM.

¿Qué es libBPF?

LibBPF es un conjunto alternativo de herramientas para hacer una aplicación BPF. Está escrito en el lenguaje de programación C.

¿Le ha parecido útil este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.