网络包在 Linux 中的处理流程
🧠 总览:
每一个网络包(进/出/本地)都经过 Linux 内核网络协议栈的以下路径:
↓ 接收(Rx)[驱动程序 / 网卡]↓[内核:网络层入口]↓[Netfilter PREROUTING链] ← iptables hook↓[路由查找(本地 or 转发)]↙ ↘
[本地处理] [转发:FORWARD链 → 发送]↓ ↓
[INPUT链] [POSTROUTING链]↓ ↓
[Socket接收] [驱动程序发送]↓ ↓应用处理 网络出口↑发送(Tx)
🔁 一、接收路径(数据包从网卡进入)
1. 网卡驱动接收到数据帧(Ethernet)
-
网卡通过 DMA 将数据放入内存缓冲区(ring buffer)。
-
触发 软中断(NAPI 轮询) 进入协议栈处理。