专栏定位

本专栏聚焦 Linux 网络协议栈与 IO 的内核实现与工程实践,目标读者是希望跨越”会用 API”与”理解底层”两个层次的后端工程师和系统工程师。

网络 IO 是现代服务端程序的核心瓶颈——一个 Nginx 每秒处理 10 万个请求,一个 Kafka Broker 每秒吞吐 1GB 数据,背后是 Linux 内核中数十年持续演进的网络子系统在默默支撑。理解这个系统,才能真正看懂性能问题的根源,写出真正高效的网络程序。


专栏目录

序号文章标题核心内容
0101 网络 IO 的本质——从 socket() 到网卡 DMA系统调用链路、内核网络栈分层、DMA 与中断
02IP 协议栈内核实现——sk_buff、协议层与连接状态机sk_buff 结构、协议层 hook、TCP 状态机
0303 Socket 内核深度解析——struct sock、接收缓冲区与发送缓冲区struct sock/socket、收发缓冲区、阻塞与非阻塞
0404 epoll 深度解析——事件驱动 IO 的内核实现select/poll 缺陷、epoll 红黑树+就绪链表、LT vs ET
0505 零拷贝技术全景——sendfile、splice 与 DMA gather传统拷贝的 4 次开销、sendfile、splice、mmap+write
0606 TCP 性能调优——拥塞控制、Nagle 与缓冲区优化拥塞窗口、BBR、Nagle 算法、TCP buffer 调优
0707 Linux 网络包的完整收发路径——软中断、NAPI 与 XDP硬中断→软中断→NAPI poll、XDP bypass
0808 高性能网络编程——io_uring 网络、SO_REUSEPORT 与多队列 NICio_uring 异步网络、端口复用、RSS/RPS/RFS
0909 容器网络原理——veth、bridge、iptables 与 eBPFNetwork Namespace、veth pair、CNI、eBPF/XDP
10eBPF 的全套工具链ss/netstat、tcpdump、perf net、BCC 工具集

知识地图


graph TD
    classDef app fill:#ffb86c,stroke:#ff79c6,color:#282a36
    classDef sock fill:#6272a4,stroke:#bd93f9,color:#f8f8f2
    classDef proto fill:#bd93f9,stroke:#ff79c6,color:#f8f8f2
    classDef driver fill:#50fa7b,stroke:#69ff47,color:#282a36
    classDef hw fill:#ff5555,stroke:#ff5555,color:#f8f8f2

    APP["用户程序</br>socket/send/recv/epoll"]:::app
    SOCK["Socket 层</br>struct socket / struct sock"]:::sock
    TCP["TCP/IP 协议栈</br>sk_buff / 状态机 / 拥塞控制"]:::proto
    DRIVER["网卡驱动</br>NAPI / 软中断 / XDP"]:::driver
    HW["物理网卡</br>DMA / 硬中断 / 多队列"]:::hw

    APP --> SOCK
    SOCK --> TCP
    TCP --> DRIVER
    DRIVER --> HW

阅读建议

  • 01-03:夯实基础,理解网络 IO 从用户态到内核态的完整路径
  • 04-05:掌握高性能服务器的两个核心技术:事件驱动 + 零拷贝
  • 06:针对 TCP 的生产调优,适合有实际调优需求的读者
  • 07:深入网卡驱动层,理解数据包如何进入内核
  • 08-09:前沿高性能技术与容器网络,适合进阶读者
  • 10:工具链,建议配合实际问题排查时参考

关联专栏

  • 性能优化专栏:网络 sysctl 参数调优、基准测试方法论
  • Netty:基于 epoll 的 Java NIO 高性能网络框架
  • Go 并发编程:Go netpoller 基于 epoll 实现
  • K8s 网络专栏:容器网络基于 Linux Network Namespace、veth、bridge
  • 服务网格专栏:iptables 流量劫持与 Envoy 代理的网络原理
  • Kafka:零拷贝(sendfile)是 Kafka 高吞吐的关键技术