-10 +

Linux Network Stack 系列 01

从这篇文章开始,我试图写一个系列关于 Linux Network Stack 的文章,看看能不能讲清楚一个网络包从网线到达应用程序的整个过程。 首先我们将这个过程分下类,这个过程主要涉及 Linux Kernel 部分和 User Space 部分。

这篇文章首先尝试解释下 网卡 <—-> 协议栈 边界发生的事情。

网卡/协议栈 边界的读/写数据过程

下面我分别看看这两个过程是怎么回事:

下面我分别看看收包和发包的过程。

数据包的接受过程

上图中我们的收包过程是蓝色线条,数据包的接收,从下往上经过了三层:网卡驱动、系统内核空间,最后到用户态空间的应用。现在来详细解释下:

我现在解释几点:

数据包的发送过程

上图中红色的线条表示发送数据包的过程,和接收数据的路径相反,数据包的发送从上往下也经过了三层:用户态空间的应用、系统内核空间、最后到网卡驱动。

其他问题研究

上面的数据包接受和发送的过程解释中只是理了大概,我现在列出一些其中的细节,我们可以后面写单独的文章具体分析。

第三点的主要目的是熟悉 Kernel 的代码, 配合理解整个过程,这里我们可以使用 systemtap工具来研究, Github 上这样的项目:tcpdive

参考

关于我

85 后程序员, 比较熟悉 Java,JVM,Golang 相关技术栈, 关注 Liunx kernel,目前痴迷于分布式系统的设计和实践。 研究包括但不限于 Docker Kubernetes eBPF 等相关技术。

Blog

Code

Life

Archive