<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Netlink</id>
	<title>Netlink - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Netlink"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Netlink&amp;action=history"/>
	<updated>2026-06-30T04:23:48Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Netlink&amp;diff=2105284&amp;oldid=prev</id>
		<title>imported&gt;Ohtashinichiro：​/* 外部链接 */</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Netlink&amp;diff=2105284&amp;oldid=prev"/>
		<updated>2026-04-13T01:39:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;外部链接&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA|G1=IT}}&lt;br /&gt;
{{Proofreader needed|en|Netlink}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Netlink套接字家族&amp;#039;&amp;#039;&amp;#039;（{{langx|en|Netlink socket family}}）是一組Linux核心介面（Linux kernel interfaces），可用於[[行程間通訊]]，Linux内核与[[用户空间]]的进程间、用户进程间的通讯。然而它并不像[[网络套接字]]可以用于主机间通讯，Netlink只能用于同一主机上进程通讯，并通过PID来标识它们。&lt;br /&gt;
&lt;br /&gt;
Netlink被设计为在[[Linux内核]]与用户空间进程传送各种网络信息。网络工具[[iproute2]]利用&lt;br /&gt;
Netlink从用户空间与内核进行通讯。Netlink由一个在用户空间的标准的Socket接口和内核模块&lt;br /&gt;
提供的内核API组成。Netlink的设计比[[ioctl]]更加灵活，Netlink使用了AF_NETLINK Socket&lt;br /&gt;
家族。&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/rfc3549 RFC 3549]{{Wayback|url=http://tools.ietf.org/html/rfc3549 |date=20130331095020 }}详细的描述了Netlink协议。&lt;br /&gt;
&lt;br /&gt;
==历史==&lt;br /&gt;
Netlink用于替代复杂和不够灵活的ioctl通讯方式，ioctl方法主要用设定和取得外部socket，&lt;br /&gt;
为了提供向后兼容，ioctl将一直被Linux内核所支持，用法如下：&lt;br /&gt;
&lt;br /&gt;
 error = ioctl(ip_socket, ioctl_type, &amp;amp;value_result);&lt;br /&gt;
&lt;br /&gt;
Netlink在Linux内核2.0版本中作为字符设备被首次提供使用。这个接口已经过时了，但是作为&lt;br /&gt;
一种ioctl通讯方法，它仍可继续使用。Netlink socket接口从Linux内核2.2开始提供使用。&lt;br /&gt;
&lt;br /&gt;
==包结构==&lt;br /&gt;
不像[[Socket|BSD套接字]]存取互联网协议那样，头信息中的标识和目的地都是自动生成（如[[传输控制协议|TCP]]），&lt;br /&gt;
Netlink消息头（结构体nlmsghdr）必须由发送方准备好，就像socket工作在SOCK_RAW模式下&lt;br /&gt;
一样。尽管SOCK_DGRAM被用于创建它。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;4%&amp;quot;| Bit offset&lt;br /&gt;
! colspan=&amp;quot;16&amp;quot; width=&amp;quot;48%&amp;quot; | 0–15&lt;br /&gt;
! colspan=&amp;quot;16&amp;quot; width=&amp;quot;48%&amp;quot; | 16–31&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| colspan=&amp;quot;32&amp;quot; | Message length&lt;br /&gt;
|-&lt;br /&gt;
! 32&lt;br /&gt;
| colspan=&amp;quot;16&amp;quot; | Type&lt;br /&gt;
| colspan=&amp;quot;16&amp;quot; | Flags&lt;br /&gt;
|-&lt;br /&gt;
! 64&lt;br /&gt;
| colspan=&amp;quot;32&amp;quot; | Sequence number&lt;br /&gt;
|-&lt;br /&gt;
! 96&lt;br /&gt;
| colspan=&amp;quot;32&amp;quot; | PID&lt;br /&gt;
|-&lt;br /&gt;
! 128+&lt;br /&gt;
| colspan=&amp;quot;32&amp;quot; | &amp;amp;nbsp;&amp;lt;br /&amp;gt;Data&amp;lt;br /&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
然而，数据部分可能进一步嵌套其它特定的子消息系统。&lt;br /&gt;
&lt;br /&gt;
==Netlink套接字簇==&lt;br /&gt;
AF_NETLINK协议家族提供了多个子协议。每个接口连接不同的内核组件并且有各自的消息集。&lt;br /&gt;
如：&lt;br /&gt;
&lt;br /&gt;
 int socket(AF_NETLINK, SOCK_DGRAM or SOCK_RAW, protocol)&lt;br /&gt;
&lt;br /&gt;
由于缺少标准，SOCK_DGRAM和SOCK_RAW并不保证在每个Linux发行版（或其它操作系统）被声&lt;br /&gt;
明。有些源码中声明两种都可以使用，[[红帽]]的文档中声明SOCK_RAW一直可以被使用，而&lt;br /&gt;
iproute2交换使用两者。&lt;br /&gt;
&lt;br /&gt;
==Netlink协议==&lt;br /&gt;
Netlink所支持的协议如下（并不完全）：&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_ROUTE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
NETLINK_ROUTE提供路由和连接信息。这些信息主要被用户空间的路由守护进程使用。对于这个&lt;br /&gt;
协议，Linux声明了大量的子消息：&lt;br /&gt;
* 链路层：&amp;#039;&amp;#039;&amp;#039;RTM_NEWLINK, RTM_DELLINK, RTM_GETLINK, RTM_SETLINK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 地址设定：&amp;#039;&amp;#039;&amp;#039;RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 路由表：&amp;#039;&amp;#039;&amp;#039;RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 邻居缓存（Neighbor Cache）：&amp;#039;&amp;#039;&amp;#039;RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 路由规则：&amp;#039;&amp;#039;&amp;#039;RTM_NEWRULE, RTM_DELRULE, RTM_GETRULE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Queuing Discipline Settings: &amp;#039;&amp;#039;&amp;#039;RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Traffic Classes used with Queues: &amp;#039;&amp;#039;&amp;#039;RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 流量过滤：&amp;#039;&amp;#039;&amp;#039;RTM_NEWTFILTER, RTM_DELTFILTER, RTM_GETTFILTER&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 其它：&amp;#039;&amp;#039;&amp;#039;RTM_NEWACTION, RTM_DELACTION, RTM_GETACTION, RTM_NEWPREFIX, RTM_GETPREFIX, RTM_GETMULTICAST, RTM_GETANYCAST, RTM_NEWNEIGHTBL,RTM_GETNEIGHTBL, RTM_SETNEIGHTBL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_FIREWALL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
: NETLINK_FIREWALL提供给用户空间用户程序一个接口，用户空间应用程序利用这个接口可以从[[防火墙]]接收包。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_NFLOG&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
: NETLINK_NFLOG提供了一个iptables和Netfilter间通讯的接口。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_ARPD&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
: NETLINK_ARPD提供了一个接口用于从用户空间来管理ARP表。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_AUDIT&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
: NETLINK_AUDIT只能在Linux内核2.6.6及以后才可以使用，它提供了一个用户审计子系统的接口。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_IPV6_FW&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
: NETLINK_IPV6_FW提供了一个将包从netfilter传送到用户空间的接口。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_ROUTE6&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_TAPBASE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_TCPDIAG&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NETLINK_XFRM&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
: NETLINK_XFRM提供了一个接口用于管理IPSec安全组件(IPSec Security association)和安全策略数据库的接口。主要被密钥管理的守护进程用于[[互联网密钥交换]]（Internet Key Exchange）协议。&lt;br /&gt;
&lt;br /&gt;
===用户自定义的Netlink协议===&lt;br /&gt;
用户也可以在自己的内核中添加自定义的Netlink处理器。这允许其它Netlink协议被开发用于连接新的内核模块。&amp;lt;ref&amp;gt;{{Cite web |url=http://www.linuxjournal.com/article/7356 |title=Why and How to Use Netlink Sockets |accessdate=2013-03-26 |archive-date=2013-03-19 |archive-url=https://web.archive.org/web/20130319110814/http://www.linuxjournal.com/article/7356 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参考资料==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==外部链接==&lt;br /&gt;
* [https://web.archive.org/web/20110902031641/http://1984.lsi.us.es/~pablo/docs/spae.pdf Pablo Neira Ayuso, Rafael M. Gasca, Laurent Lefèvre. Communicating between the kernel and user-space in Linux using Netlink sockets. Software: Practice and Experience, 40(9):797-810, August 2010]&lt;br /&gt;
* [http://www.linuxjournal.com/article/7356 Why and How to Use Netlink Sockets]{{Wayback|url=http://www.linuxjournal.com/article/7356 |date=20130319110814 }}&lt;br /&gt;
* [http://www.ietf.org/rfc/rfc3549.txt RFC 3549]{{Wayback|url=http://www.ietf.org/rfc/rfc3549.txt |date=20120210014421 }}&lt;br /&gt;
* http://netfilter.org/projects/libmnl{{Wayback|url=http://netfilter.org/projects/libmnl |date=20130211140957 }} — “Minimalist Library for Netlink” — userspace library for construction and parsing of Netlink messages&lt;br /&gt;
* http://www.infradead.org/~tgr/libnl{{Wayback|url=http://www.infradead.org/~tgr/libnl |date=20130420145727 }} = &amp;quot;Netlink Protocol Library Suite&amp;quot; - full functional library covering almost all aspects of working with netlink sockets&lt;br /&gt;
* [http://www.linuxjournal.com/article/8498 Manipulating the Networking Environment Using RTNETLINK]{{Wayback|url=http://www.linuxjournal.com/article/8498 |date=20121225105834 }}&lt;br /&gt;
* [https://web.archive.org/web/20130211014547/http://qos.ittc.ku.edu/netlink/html/index.html Netlink Sockets - Overview]&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux内核接口]]&lt;br /&gt;
[[Category:Linux内核功能]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Ohtashinichiro</name></author>
	</entry>
</feed>