# 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]]