一句话总结
Linux 收发网络包就是在“网卡↔驱动↔协议栈↔Socket 接口”这条生产线中,网卡收到的比特流被不断“拆箱、分拣、贴标签”,最终交给应用;应用要发包时,则逆向“打包、贴邮编、装车”,通过网卡送向网络。
详细解析
下面我们把 Linux 内核看作一个“网络快递中心”,分两大流程说明——“收件流程”(Receive)和“发件流程”(Transmit)。
1. 收件流程:网卡收包 → 应用收包
物理介质 ──▶ 网卡硬件 ──▶ 驱动层 ──▶ NAPI/SoftIRQ ──▶ 协议栈(L2/L3/L4)
│ ↓
└────── sk_buff ──────▶ Socket 缓冲区 ──▶ 用户进程
- 网卡硬件接收
- 网卡上电路收到电/光/无线信号,经过物理层解调,写入环形 RX DMA 缓冲区。
- 类比:快递员骑车把包裹放到快递中心的收货传送带上。
- 网卡驱动
- 驱动打开 NAPI(New API)模式,定时或由中断触发,轮询 RX DMA,针对每个到达的数据块alloc_skb()并拷入sk_buff。
- 类比:收货员把传送带上的包裹装进统一的快递箱(sk_buff),准备内部分拣。
- 软中断(SoftIRQ)/NAPI 调度
- 驱动调用netif_receive_skb()或napi_gro_receive(),将 skb 推给网络层。
- 软中断上下文处理,不占用应用进程时间。
- 类比:分拣员下发“快递箱”到不同区的分拣线(软中断工位),不用打扰收货员继续卸货。
- 协议栈分层处理
- L2 层(Ethernet):解 Ethernet 头,做 VLAN、MAC 过滤、bridge/ebtables、netfilterPREROUTING钩子。
- L3 层(IP):解 IP 头,IPv4 执行路由查表、IP 校验、NetfilterINPUT钩子;IPv6 类似。
- L4 层(TCP/UDP):根据协议字段分发到tcp_v4_rcv()/udp_rcv(),做端口对接、校验和、TCP 重组、流控、NetfilterLOCAL_IN。
- 类比:分拣员按照包裹标签(MAC、IP、端口),一路传送带分拣到“HTTP 区”“DNS 区”“SSH 区”……
- 交付 Socket
- 最终 skb 被放入对应套接字的接收队列 (sk_receive_queue),等待应用调用recv()时拷贝到用户空间。
- 类比:快递小哥把分拣好的包裹送到你家门口的储物柜,等你来取。
2. 发件流程:应用发包 → 网卡发包
用户进程 send()
└▶ Socket 层 ─▶ 协议栈(L4/L3/L2) ─▶ sk_buff 分配 ─▶ 驱动层 ─▶ 网卡硬件 ─▶ 物理介质
- 用户态调用 send()/sendto()
- 应用把数据写入 Socket 缓冲区,调用系统调用进入内核。
- 类比:你到快递柜前填写寄件单,把包裹放入柜子。
- 传输层封装
- 内核 TCP/UDP 实现:UDP:直接加 UDP 头、计算校验和,调用ip_queue_xmit()TCP:走tcp_sendmsg()→ 拆包、滑窗、拥塞控制 →ip_send_skb()
- 类比:小哥给包裹贴上“目的套房号(端口)+序列号”,决定挂号或平邮。
- 网络层封装
- ip_queue_xmit()给 skb 加 IP 头(源/目的 IP、TTL、协议号),查路由表(fib_lookup()),找到下一跳;
- 如果需要 ARP/NDP,发送 ARP 请求或查询邻居缓存;
- 类比:邮局给包裹贴“省/市/邮编(源/目的 IP)”,并打电话问前台“收件人门锁码(MAC)”。
- 链路层封装
- neigh_output()拿到 MAC,调用dev_queue_xmit()拉入设备队列;视情况使用 Qdisc 排队、流量整形、tc 等;
- 驱动的ndo_start_xmit()从 skb 中读头部,写入 TX DMA 环;
- 类比:快递中心分装进入“局部派送网袋”(帧队列),排队等车辆装货。
- 网卡硬件发送
- DMA 从 skb 拷贝帧到网卡 TX ring,触发网卡发送中断,将比特流推到物理介质;
- skb 最终由dev_consume_skb()释放。
- 类比:货车司机装好后出发,将包裹送上高速公路。
难点生动比喻
- sk_buff:就是“快递箱”,不仅装数据,还挂着各种“标签”(指针、状态、校验和、协议类型等元信息)。
- NAPI:类似“分批卸货”机制,把中断式抢资源改成定时叫号,防止一窝蜂卸货时挤爆产线。
- SoftIRQ:把原本硬中断的分拣工作,转移到专门的“软中断工位”,让收货和分拣并行不相互打断。
- Netfilter/IPtables:就是“快递检查站”,每个层次(PREROUTING/INPUT/FORWARD/OUTPUT/POSTROUTING)都能加安检规则。
- Qdisc/TC:相当于“发货排队闸机”,按优先级、队列长度、速率限制等策略放行包裹
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...




