勇者の小栈

内核如何接收网络包

深入分析 Linux 内核接收网络包的完整流程,从网卡 RingBuffer、硬中断/软中断、ksoftirqd 内核线程到协议栈处理,涵盖多队列网卡、tcpdump 抓包原理、iptables/netfilter 以及 DPDK 高性能方案。

同步阻塞 IO(BIO)

系列文章: 1. 2. 3. 4. 5. 6. 7. 在上一部分中讲述了网络包是如何从网卡送到协议栈的(详见),接下来内核还有一项重要的工作,就是在协议栈接收处理完输入包后要通知到用户进程,如何用户进程接收到并处理这些数据。 进程与内核配合有多种方案,这里我们这分析两种典型的: 1. 同步阻塞方案(…

IO 多路复用(epoll)

从内核层面深入分析 Linux epoll IO 多路复用机制,介绍 epoll 相比阻塞 IO 和轮询的优势,详解 epoll_create、epoll_ctl、epoll_wait 三个核心系统调用及 eventpoll 内核对象的工作原理。

内核如何发送网络包

深入分析 Linux 内核发送网络包的完整流程,涵盖系统调用、内存拷贝、协议栈处理、网卡驱动 RingBuffer、实际发送与中断通知等环节,同时介绍零拷贝技术以及 Kafka 高性能网络的原理。

本机网络 IO

系列文章: 1. 2. 3. 4. 5. 6. 7. 前面的章节深度分析了网络包的接收,也拆分了网络包的发送,总之收发流程算是闭环了。不过还有一种特殊的情况没有讨论,那就是接收和发送都在本机进行。而且实践中这种本机网络IO出现的场景还不少,而且还有越来越多的趋势。例如LNMP技术栈中的nginx和p…

TCP 三次握手源码详解

系列文章: 1. 2. 3. 4. 5. 6. 7. 一、相关实际问题 1. 为什么服务端程序都需要先listen一下 2. 半连接队列和全连接队列长度如何确定 3. “Cannot assign requested address”这个报错是怎么回事 4. 一个客户端端口可以同时用在两条连接上吗 …

TCP 连接的内存开销

深入分析 Linux 内核中 TCP 连接的内存开销,包括 SLAB/SLUB 内存管理机制、ESTABLISHED 和 TIME_WAIT 状态连接的内存消耗,以及 UMA 与 NUMA 内存架构的演进。

TCP 三次握手与四次挥手

从 Linux 内核源码层面详解 TCP 三次握手与四次挥手的完整流程,包括 connect 系统调用、Socket 状态转换、端口绑定、SYN 包构造、重传定时器、半连接队列与全连接队列的处理。

虚拟内存管理

介绍操作系统虚拟内存管理机制,包括为什么需要虚拟内存(地址空间隔离、内存使用效率、地址确定性),逻辑地址、线性地址与物理地址的区别,以及 x86 架构下的分段和分页地址转换过程。

集线器、交换机与路由器

介绍网络互联设备——中继器、集线器、网桥、交换机、路由器和网关,解析它们在 OSI 各层的工作原理、物理互联与协议互联的区别,以及冲突域和广播域的概念。