Kernel과 Userspace 간의 통신을 위한 양방향 IPC(Inter-Process Communication)
socket 인터페이스를 통해 데이터를 주고 받음
fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_GENERIC);
- 기존 TCP/UDP 소켓하고 인터페이스는 동일하나 용도가 다름
- TCP/UDP socket : data packet 전달
- Netlink socket : controll packet 전달
왜 사용하냐?
사실 유저스페이스에서 커널로 요청을 보낼 때, ioctl
, sysctl
와 같은 시스템콜을 사용하는 것이 일반적이지만, 커널 네트워크 스택에 보낼 요청들을 ioctl로 정의해서 보내기엔 너무나 많은 context와 동기화가 어려움
커널 네트워크 스택이 관리하는 것들
- 라우팅 테이블 변경
- ARP table update
- 인터페이스 관리