stringtranslate.com

Enlace de red

Netlink es una familia de sockets que se utiliza para la comunicación entre procesos (IPC) tanto entre los procesos del núcleo como del espacio de usuario , y entre diferentes procesos del espacio de usuario, de forma similar a los sockets de dominio Unix disponibles en ciertos sistemas operativos similares a Unix , incluida su encarnación original como una interfaz del núcleo de Linux , así como en la forma de una implementación posterior en FreeBSD . [2] De manera similar a los sockets de dominio Unix , y a diferencia de los sockets INET , la comunicación Netlink no puede atravesar los límites del host. Sin embargo, mientras que los sockets de dominio Unix utilizan el espacio de nombres del sistema de archivos , los sockets Netlink suelen direccionarse mediante identificadores de proceso (PID). [3]

Netlink está diseñado y se utiliza para transferir información de red diversa entre los procesos del espacio del núcleo y del espacio del usuario. Las utilidades de red, como la familia iproute2 y las utilidades utilizadas para configurar controladores inalámbricos basados ​​en mac80211 , utilizan Netlink para comunicarse con el núcleo de Linux desde el espacio del usuario. Netlink proporciona una interfaz estándar basada en socket para los procesos del espacio del usuario y una API del lado del núcleo para uso interno de los módulos del núcleo . Originalmente, Netlink utilizaba la AF_NETLINKfamilia socket.

Netlink está diseñado para ser un sucesor más flexible de ioctl ; RFC 3549 describe el protocolo en detalle.

Historia

Netlink fue creado por Alexey Kuznetsov [4] como una alternativa más flexible al sofisticado pero complicado ioctlmétodo de comunicación utilizado para configurar y obtener opciones de sockets externos. El núcleo de Linux sigue siendo compatible ioctlcon versiones anteriores.

Netlink se proporcionó por primera vez en la serie 2.0 del kernel de Linux, implementado como un dispositivo de caracteres . Para 2013, esta interfaz quedó obsoleta, pero aún forma un método de comunicación ioctl ; compare el uso de rtnetlink. [5] La interfaz de socket Netlink apareció en la serie 2.2 del kernel de Linux.

En 2022, se agregó soporte experimental para el protocolo Netlink a FreeBSD. Inicialmente, solo se admitía un subconjunto de la familia NETLINK_ROUTE y NETLINK_GENERIC. [2]

Estructura del paquete

A diferencia de los sockets BSD que utilizan protocolos de Internet como TCP , donde los encabezados de los mensajes se generan automáticamente, el encabezado del mensaje Netlink (disponible como struct nlmsghdr) debe ser preparado por el autor de la llamada. El socket Netlink generalmente funciona en un SOCK_RAWmodo similar a , incluso si SOCK_DGRAMse utilizó para crearlo.

La parte de datos contiene entonces un mensaje específico del subsistema que puede estar aún más anidado.

Familias de conectores Netlink

La AF_NETLINKfamilia ofrece múltiples subconjuntos de protocolos. Cada uno interactúa con un componente de kernel diferente y tiene un subconjunto de mensajería diferente. El subconjunto se referencia mediante el campo de protocolo en la llamada de socket:

int socket(AF_NETLINK, SOCK_DGRAM o SOCK_RAW, protocolo )

No existe un estándar SOCK_DGRAMy SOCK_RAWno se garantiza su implementación en una versión determinada de Linux (u otro sistema operativo). Algunas fuentes afirman que ambas opciones son legítimas y la referencia a continuación de Red Hat indica que SOCK_RAWsiempre es el parámetro. Sin embargo, iproute2 usa ambos indistintamente.

Protocolos Netlink

A continuación se muestra una lista no exhaustiva de las entradas de protocolo admitidas :

RUTA DE ENLACE DE RED

NETLINK_ROUTEProporciona información de enrutamiento y enlaces. Esta información se utiliza principalmente para los daemons de enrutamiento del espacio de usuario. Linux implementa un gran subconjunto de mensajes:

CORTAFUEGOS DE ENLACE DE RED

NETLINK_FIREWALLproporciona una interfaz para que una aplicación de espacio de usuario reciba paquetes del firewall .

Enlace de red_NFLOG

NETLINK_NFLOGProporciona una interfaz utilizada para comunicarse entre Netfilter e iptables .

Enlace de red ARPD

NETLINK_ARPDProporciona una interfaz para administrar la tabla ARP desde el espacio de usuario.

AUDITORÍA DE ENLACE DE RED

NETLINK_AUDITProporciona una interfaz al subsistema de auditoría que se encuentra en las versiones del kernel de Linux 2.6.6 y posteriores.

Enlace de red IP6

NETLINK_IP6_FWProporciona una interfaz para transportar paquetes desde netfilter al espacio del usuario.

RUTA DE ENLACE DE RED6
BASE DE ENLACE DE RED
FILTRO DE RED DE ENLACE DE RED
Enlace de red TCPDIAG
Enlace de red XFRM

NETLINK_XFRMProporciona una interfaz para administrar la asociación de seguridad IPsec y las bases de datos de políticas de seguridad, utilizadas principalmente por daemons administradores de claves que utilizan el protocolo de intercambio de claves de Internet .

ENLACE DE RED_OBJETO_UEVENT

NETLINK_KOBJECT_UEVENTproporciona la interfaz en la que el núcleo transmite uevents, normalmente consumidos por udev .

NETLINK_GENÉRICO

Una de las desventajas del protocolo Netlink es que el número de familias de protocolos está limitado a 32 ( MAX_LINKS). Esta es una de las principales razones por las que se creó la familia Netlink genérica: para brindar soporte para agregar una mayor cantidad de familias. Actúa como un multiplexor Netlink y funciona con una sola familia Netlink NETLINK_GENERIC. El protocolo Netlink genérico se basa en el protocolo Netlink y utiliza su API.

Protocolo Netlink definido por el usuario

Los usuarios pueden agregar un controlador Netlink en sus propias rutinas del núcleo. Esto permite el desarrollo de protocolos Netlink adicionales para abordar nuevos módulos del núcleo. [6]

Véase también

Referencias

  1. ^ Greg Kroah-Hartman (22 de octubre de 2024). «Linux 6.11.5» . Consultado el 22 de octubre de 2024 .
  2. ^ ab "netlink: agregar soporte para netlink".
  3. ^ "netlink(7) - Página del manual de Linux". man7.org .
  4. ^ "kernel/git/torvalds/linux.git: root/net/core/rtnetlink.c". Árbol de código fuente del kernel de Linux . kernel.org . Consultado el 27 de mayo de 2014 .
  5. ^ Crowcroft, Jon ; Phillips, Iain, eds. (2002). Implementación del protocolo TCP/IP y Linux: código de sistemas para Internet Linux. Serie del Consejo de Redes de Wiley. Wiley . p. 624. ISBN 9780471408826. Recuperado el 21 de mayo de 2013. Todos los mensajes rtnetlink constan de un encabezado de mensaje netlink y atributos adjuntos.
  6. ^ "Kernel Korner - Por qué y cómo utilizar Netlink Socket | Linux Journal". www.linuxjournal.com .

Enlaces externos