# Netlinkソケット
## 定義
Netlink ソケットとは、Linux カーネルとユーザー空間の間(および IPC として異なるユーザー空間プロセス間)での通信を提供するソケットファミリである。データグラム指向のメッセージングシステムとして実装されており、BSD ソケットインフラの上に構築される。Linux 1.3 で Alan Cox が導入し、Linux 2.1 で Alexey Kuznetsov が拡張した。TLV(Type-Length-Value)形式のペイロードにより後方互換を保ちながら拡張でき、ユニキャスト/マルチキャストの 2 通信タイプ、アーキテクチャ可搬性、イベント通知、大規模データ転送の 4 性質を設計として満たす唯一の Linux カーネルインタフェースである。(Source: [[@2010__SPE__Communicating between the kernel and user-space in Linux using Netlink sockets]])
## 横断的知見
- (まだ 1 ソースのみ。2 ソース目以降に追記予定)
## 未解決の問い
- Netlink ソケットと現代の io_uring・eBPF はどのように相互作用するか? 2010 年以降の Linux カーネルバージョンでの変化は?
- GeNetlink の 65520 ファミリ上限は現在の Linux カーネルで枯渇の懸念があるか?
- TLV ペイロードの構築・解析オーバーヘッドは、ioctl の固定構造と比べて実際にどの程度大きいか? 定量評価した研究はあるか?
- Netlink は eBPF のカーネル-ユーザー空間通信(BPF マップ・perf イベント)とどう使い分けられているか?
- conntrack-tools・iproute2・NetworkManager など主要ツールはどのバージョンから Netlink に移行したか?
## 関連
- [[Linuxカーネルインタフェース]] — Netlink を含む Linux カーネル-ユーザー空間通信手段の比較概念
- [[eBPF]] — eBPF もカーネル-ユーザー空間の通信手段を提供するが、プログラマブルなカーネル内処理を主目的とする点で異なる
- [[@2010__SPE__Communicating between the kernel and user-space in Linux using Netlink sockets]] — 主要ソース
## 出典
- [[@2010__SPE__Communicating between the kernel and user-space in Linux using Netlink sockets]]