네트워크 링크
Netlink안정된 릴리스 | 5.19[1] / 2022년 7월 ; 전 ( ) |
---|---|
프리뷰 릴리즈 | 5.19-rc8[2] / 2022년 7월 24일; 전 ) |
운영 체제 | 리눅스 |
플랫폼 | Linux 커널 |
유형 | 응용 프로그램 프로그래밍 인터페이스 |
면허증. | GNU 일반 공중 라이선스 |
웹 사이트 | wiki |
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 통신 방식을 형성하고 있습니다.rtnetlink
Netlink 소켓인터페이스는 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 프로토콜을 개발할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Linux 5.19". 31 July 2022. Retrieved 1 August 2022.
- ^ "Linux 5.19-rc8". 24 July 2022. Retrieved 24 July 2022.
- ^ "netlink(7) - Linux manual page". man7.org.
- ^ "kernel/git/torvalds/linux.git: root/net/core/rtnetlink.c". Linux kernel source tree. kernel.org. Retrieved 2014-05-27.
- ^ 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.
- ^ "Kernel Korner - Why and How to Use Netlink Socket Linux Journal". www.linuxjournal.com.
외부 링크
- 파블로 네이라 아유소, 라파엘 M가스카, 로랑 르페브르.Netlink 소켓을 사용하여 Linux에서 커널과 사용자 공간 간의 통신.소프트웨어: 프랙티스와 익스피리언스, 40(9): 797-810, 2010년 8월
- Netlink 소켓을 사용하는 이유 및 방법
- RFC 3549
- netfilter/filterables 프로젝트 홈페이지 - netfilter.org "libmnl" 프로젝트 – Netlink용 Minimalist Library – Netlink 메시지 구축 및 해석용 사용자 공간 라이브러리
- libnl - Netlink Protocol Library Suite – Netlink Protocol Library Suite – Netlink 소켓 사용의 거의 모든 측면을 망라한 완전한 기능 라이브러리
- RTNETLINK를 사용한 네트워킹 환경 조작
- Netlink 소켓– 개요
- Netlink Protocol Library Suite
- Rami Rosen의 "Linux 커널 네트워킹", Apress 2013: 2장, Netlink 소켓