Skip to content

Commit

Permalink
fix typo
Browse files Browse the repository at this point in the history
  • Loading branch information
isno committed Feb 4, 2025
1 parent 38c61d2 commit d81c975
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 8 deletions.
4 changes: 2 additions & 2 deletions network/linux-kernel-networking.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 3.3 Linux 内核网络框架

Linux 系统处理网络数据包(见图 3-1)看似是一套固定且封闭的机制,实际上并非如此
从 Linux 内核 2.4 版本开始,内核引入了一套通用的过滤框架 —— Netfilter,允许外界对网络数据包在内核协议栈流转过程中进行代码干预
Linux 系统处理网络数据包(见图 3-1)看似是一套固定封闭的机制,实际情况并非如此
从 Linux 内核 2.4 版本开始,内核引入了一套通用的过滤框架 —— Netfilter,使得“外界”可以在数据包流经内核协议栈时进行干预

Linux 系统中的各类网络功能,如地址转换、封包处理、地址伪装、协议连接跟踪、数据包过滤、透明代理、带宽限速和访问控制等,都是基于 Netfilter 提供的代码拦截机制实现的。可以说,Netfilter 是整个 Linux 网络系统最重要(没有之一)的基石。
8 changes: 3 additions & 5 deletions network/netfilter.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# 3.3.1 Netfilter 的 5 个钩子

Netfilter 围绕网络协议栈(主要在网络层)埋下了 5 个钩子(也称 hook)[^1],用来干预 Linux 网络通信。

内核中的其他模块(如 iptables、IPVS 等)向这些钩子注册回调函数。当数据包进入内核网络协议栈并经过这些钩子时,注册的回调函数自动触发,从而对数据包进行相应的干预和处理。
Netfilter 围绕网络协议栈(主要在网络层)“埋下”了 5 个钩子(也称 hook)[^1],用来干预 Linux 网络通信。Linux 内核中的其他模块(如 iptables、IPVS 等)向这些钩子注册回调函数。当数据包进入内核协议栈并经过钩子时,回调函数会自动触发,从而对数据包进行处理。

这 5 个钩子的名称与含义如下:

Expand All @@ -20,6 +18,6 @@ Netfilter 围绕网络协议栈(主要在网络层)埋下了 5 个钩子(
:::


Netfilter 允许同一个钩子处注册多个回调函数,每个回调函数有明确的优先级,确保按照预定顺序触发。一个钩子处的多个回调函数串联起来便形成了一条“回调链”(Chained Callbacks)。这种设计使得基于 Netfilter 构建的上层应用大多带有“链”的概念,如稍后将介绍的 iptables。
Netfilter 允许在同一钩子上注册多个回调函数,每个回调函数都有明确的优先级,以确保按预定顺序触发。这些回调函数串联起来形成了一个“回调链”(Chained Callbacks)。这种设计使得基于 Netfilter 构建的上层应用大多带有“链”的概念,如稍后将介绍的 iptables。

[^1]: hook 设计模式在其他软件系统中随处可见,如本书后面介绍的 eBPF、Kubernetes 等等,Kubernetes 在编排调度、网络、资源定义等通过暴露接口的方式,允许用户根据自己的需求插入自定义代码或逻辑来扩展 Kubernetes 的功能
[^1]: Hook 设计模式在许多软件系统中广泛应用。例如,本书后续将介绍的 eBPFKubernetes。Kubernetes 通过暴露各种接口(hook),使用户能够根据需求插入自定义代码或逻辑,从而扩展其在编排调度、网络和资源定义等方面的功能。
2 changes: 1 addition & 1 deletion network/networking.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@
- 传输层(L4 Transport layer):处理网络地址转换(NAT)、连接跟踪(conntrack)等。
7. 内核协议栈处理完成后,数据包被传递到 socket 接收缓冲区。应用程序利用系统调用(如 Socket API)从缓冲区读取数据。至此,整个收包过程结束。

从上述流程可见,Linux 系统的数据包处理涉及多个网络层协议栈(如数据链路层、网络层、传输层和应用层),需要进行封包/解包操作,并频繁发生上下文切换(Context Switch),都让 Linux 内核的瓶颈不可忽视。在设计网络密集型系统时,优化内核参数是不可或缺的环节。除了优化内核参数,业界还提出了“绕过内核”的解决方案,如图 3-1 所示的 XDP 和 DPDK 技术。笔者将在 3.4 节中详细介绍它们的原理与区别。
从上述流程可见,Linux 系统的数据包处理涉及多个网络层协议栈(如数据链路层、网络层、传输层和应用层),需要进行封包/解包操作,并频繁发生上下文切换(Context Switch)。在设计网络密集型系统时,Linux 内核瓶颈不可忽视,优化内核参数是不可或缺的环节。除了优化内核参数,业界还提出了“绕过内核”的解决方案,如图 3-1 所示的 XDP 和 DPDK 技术。笔者将在 3.4 节中详细介绍它们的原理与区别。

接下来,我们将继续深入 Linux 内核网络模块,研究 Linux 内核是如何过滤、修改和转发数据的。

0 comments on commit d81c975

Please sign in to comment.