네트워크 링크

Netlink
네트워크 링크
안정된 릴리스
5.19[1] / 2022년 7월 31일; 4일 전 (2022년 7월 31일)
프리뷰 릴리즈
5.19-rc8[2] / 2022년 7월 24일; 11일 (2022년 7월 24일)
운영 체제리눅스
플랫폼Linux 커널
유형응용 프로그램 프로그래밍 인터페이스
면허증.GNU 일반 공중 라이선스
웹 사이트wiki.linuxfoundation.org/networking/generic_netlink_howto

Netlink 소켓패밀리는 Unix 도메인소켓과 유사한 방법으로 커널 프로세스와 사용자 공간 프로세스 간의 프로세스 간 통신(IPC)에 사용되는 Linux 커널 인터페이스입니다.UNIX 도메인 소켓과 마찬가지로 INET 소켓과 달리 Netlink 통신은 호스트 경계를 통과할 수 없습니다.단, Unix 도메인 소켓은 파일시스템 네임스페이스를 사용하는 반면 Netlink 프로세스는 보통 프로세스 식별자(PID)[3]의해 처리됩니다.

Netlink는 커널 공간과 사용자 공간 프로세스 간에 기타 네트워킹 정보를 전송하기 위해 설계 및 사용됩니다.iproute2 패밀리나 mac80211 베이스의 무선 드라이버의 설정에 사용되는 유틸리티등의 네트워크 유틸리티는, Netlink 를 사용해 유저 스페이스로부터 Linux 커널과 통신합니다.Netlink는 사용자 공간 프로세스를 위한 표준 소켓 기반 인터페이스와 커널 모듈내부적으로 사용하는 커널 측 API를 제공합니다.원래 Netlink는AF_NETLINK소켓 패밀리

Netlink는 ioctl의 보다 유연한 후계자 역할을 하도록 설계되어 있습니다.RFC 3549는 이 프로토콜을 상세하게 기술하고 있습니다.

역사

Netlink는 Alexey Kuznetsov가[4] 외부 소켓 옵션 설정 및 취득에 사용되는 정교하지만 어색한 통신 방법을 대체하는 보다 유연한 방법으로 개발했습니다.Linux 커널은 계속해서ioctl이전 버전과의 호환성을 위해.

Netlink는 문자 장치로 구현된 Linux 커널의 2.0 시리즈에서 처음 제공되었습니다.2013년까지 이 인터페이스는 구식이지만 여전히 ioctl 통신 방식을 형성하고 있습니다.rtnetlinkNetlink 소켓인터페이스는 Linux 커널의 2.2 시리즈에 등장했습니다.[5]

패킷 구조

비트 오프셋 0–15 16–31
0 메시지 길이
32 유형 플래그
64 시퀀스 번호
96 PID
128+
데이터.

메시지 헤더가 자동으로 생성되는 TCP 의 인터넷 프로토콜을 사용하는 BSD 소켓과는 달리 Netlink 메시지헤더는 다음과 같이 사용할 수 있습니다.struct nlmsghdr)는, 발신자가 준비할 필요가 있습니다.Netlink 소켓은 일반적으로SOCK_RAW- like 모드, 예를 들어SOCK_DGRAM를 사용하여 작성했습니다.

그런 다음 데이터 부분에는 하위 시스템 고유의 메시지가 포함되어 추가 중첩될 수 있습니다.

넷링크 소켓 패밀리

AF_NETLINK패밀리는 여러 프로토콜 서브셋을 제공합니다.각 인터페이스는 서로 다른 커널컴포넌트에 접속하여 서로 다른 메시징 서브셋을 가집니다.서브셋은 소켓콜의 protocol 필드에 의해 참조됩니다.

int 소켓(AF_NETLINK, SOCK_DGRAM 또는 SOCK_RAW, 프로토콜)

기준이 결여되어 있다.SOCK_DGRAM그리고.SOCK_RAW는 특정 Linux (또는 기타 OS)릴리즈에 실장되는 것을 보증하지 않습니다.일부 소스에서는 두 옵션이 모두 합법적이라고 기술하고 있으며 Red Hat에서 아래 참조를 통해 다음과 같이 기술되어 있습니다.SOCK_RAW는 항상 파라미터입니다.단, iproute2는 양쪽을 서로 교환하여 사용합니다.

Netlink 프로토콜

지원되는 프로토콜 항목 목록은 다음과 같습니다.

NETLINK_ROUTE

NETLINK_ROUTE에 라우팅 및 링크 정보를 나타냅니다.이 정보는 주로 사용자 공간 라우팅 데몬에 사용됩니다.Linux는 다음과 같은 대규모 메시지 서브셋을 구현합니다.

  • 링크층: RTM_NEWLINK, RTM_DELLINK, RTM_GETLINK, RTM_SETLINK
  • 주소 설정: RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR
  • 라우팅 테이블: RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE
  • 네이버 캐시: RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH
  • 라우팅 규칙: RTM_NEWRULE, RTM_DELRULE, RTM_GETRULE
  • 큐잉 부문 설정: RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC
  • 큐에서 사용되는 트래픽클래스: RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS
  • 트래픽 필터: RTM_NEWTFILTER, RTM_DELTFILTER, RTM_GETTFILTER
  • 기타: RTM_NEWACTION, RTM_DELACTION, RTM_GETPREFIX, RTM_GETMULTICAST, RTM_GETANYCAST, RTM_NEWLIGHT
NETLINK_방화벽

NETLINK_FIREWALL는 사용자 공간 어플리케이션이 방화벽에서 패킷을 수신하기 위한 인터페이스를 제공합니다.

네트워크 링크_NFLOG

NETLINK_NFLOG에, Netfilter iptables 사이의 통신에 사용하는 인터페이스를 나타냅니다.

NETLINK_ARPD

NETLINK_ARPD는 사용자 공간에서 ARP 테이블을 관리하는 인터페이스를 제공합니다.

NETLINK_Audit

NETLINK_AUDIT에 Linux 커널버전 2.6.6 이후에 있는 감사 서브시스템에 대한 인터페이스를 나타냅니다.

NETLINK_IP6_전원

NETLINK_IP6_FW는 넷필터에서 사용자 공간으로 패킷을 전송하는 인터페이스를 제공합니다.

NETLINK_ROUTE6
NETLINK_TAPBASE
NETLINK_NETFILTER
NETLINK_TCPDIAG
NETLINK_XFRM

NETLINK_XFRM IPsec 보안 어소시에이션 및 보안 정책 데이터베이스를 관리하는 인터페이스를 제공합니다.이 데이터베이스는 주로 인터넷키 익스체인지 프로토콜을 사용하는 키 매니저 데몬에 의해 사용됩니다.

NETLINK_KOBJECT_UEVENT

NETLINK_KOBJECT_UEVENT는 커널이 이벤트를 브로드캐스트하는 인터페이스를 제공합니다.일반적으로 udev에 의해 소비됩니다.

NETLINK_GENERIC

Netlink 프로토콜의 단점 중 하나는 프로토콜 패밀리의 수가 32개로 제한된다는 것입니다.MAX_LINKS이것이 범용 Netlink 패밀리가 작성된 주요 이유 중 하나입니다.이것은, 보다 많은 패밀리를 추가할 수 있도록 서포트하기 위해서입니다.Netlink 멀티플렉서로서 기능해, 1개의 Netlink 패밀리와 연동합니다.NETLINK_GENERIC일반적인 Netlink 프로토콜은 Netlink 프로토콜을 기반으로 하며 API를 사용합니다.

사용자 정의 Netlink 프로토콜

사용자는 자신의 커널 루틴에 Netlink 핸들러를 추가할 수 있습니다.이를 통해 새로운 커널 [6]모듈을 다루기 위한 추가 Netlink 프로토콜을 개발할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Linux 5.19". 31 July 2022. Retrieved 1 August 2022.
  2. ^ "Linux 5.19-rc8". 24 July 2022. Retrieved 24 July 2022.
  3. ^ "netlink(7) - Linux manual page". man7.org.
  4. ^ "kernel/git/torvalds/linux.git: root/net/core/rtnetlink.c". Linux kernel source tree. kernel.org. Retrieved 2014-05-27.
  5. ^ Crowcroft, Jon; Phillips, Iain, eds. (2002). TCP/IP and Linux protocol implementation: systems code for the Linux Internet. Wiley Networking Council series. Wiley. p. 624. ISBN 9780471408826. Retrieved 2013-05-21. All rtnetlink messages consist of a netlink message header and appended attributes.
  6. ^ "Kernel Korner - Why and How to Use Netlink Socket Linux Journal". www.linuxjournal.com.

외부 링크