引言
在 Linux 内核的网络子系统中,传统的 TCP/IP 协议栈负责处理基础的网络通信,而 eBPF(Extended Berkeley Packet Filter)和 XDP(eXpress Data Path)等技术则是近年来引入的可编程扩展。本文将从普通 TCP 通信的实现出发,探讨内核核心功能与可编程扩展的关系,并解析为何这些扩展并非 TCP 通信的必需品,而是为特定场景提供的高性能或灵活性增强。
一、传统 TCP 通信的核心实现
Linux 内核的 TCP/IP 协议栈是一套高度优化的自包含实现,其核心逻辑完全独立于 eBPF 或 XDP。以下是其关键流程:
-
连接管理
-
通过三次握手(
SYN
/SYN-ACK
/ACK
)建立连接,由net/ipv4/tcp.c
中的状态机实现。 -
通过四次挥手(
FIN
/ACK
)终止连接,依赖内核的定时器和队列管理。
-
-
数据传输
-
数据通过
send()
/recv()
-