当前位置: 首页 > news >正文

每日一题--网络包如何唤醒WiFi路由器的CPU

记录时间:2026年04月15日 星期三 21时30分


一、问题

你的 WiFi 路由器,收到一个网络包后,CPU 是被谁叫醒的?

这个问题听起来简单,但它是理解WiFi 驱动开发、中断处理、内核调度的起点。


二、核心结论

硬中断负责通知,软中断负责搬运,队列负责中转。


三、整体流程梳理

3.1 基础要求

  • 该设备有 WiFi 模块,且能够正常联网。

3.2 大体流程(概括版)

  1. 数据包 A 发向设备,被 WiFi 模块拦截。
  2. WiFi 模块拦截后,唤醒 CPU。
  3. CPU 唤醒后,解析数据包。
  4. 获得对应进程的端口号,触发中断,告知该进程。
  5. 进程接收到对应数据,进行处理。

3.3 详细流程(五步拆解)

第一步:硬件敲门(硬中断)
  • WiFi 模块收到完整数据包,通过中断控制器向 CPU 发送硬件中断信号。
  • CPU 执行网卡驱动中预先注册好的中断处理函数
    • 屏蔽网卡的中断(表示"已收到")。
    • 通过 DMA 将数据包从网卡硬件缓冲区,拷贝到内核sk_buff缓冲区。
  • 函数结束,CPU 还给内核调度。
第二步:内核"分拣"(软中断与 NAPI)
  • 硬中断相当于给内核留下一张待办便条
  • 内核在适当时机(如系统调用返回、中断处理结束),触发软中断NET_RX_SOFTIRQ
  • NAPI 机制:驱动通过napi_schedule()把自己的 poll 函数挂到软中断处理队列中。
第三步:批量搬运(驱动轮询)
  • 软中断处理线程ksoftirqd被唤醒,调用驱动的 poll 函数。
  • poll 函数按内核预算,循环从 Ring Buffer 取出数据包,送往协议栈。
第四步:协议栈拆包与数据交付
  • 网络层:解析 IP 头,判断是发给本机还是转发。
  • 传输层:解析 TCP/UDP 头,根据端口号找到对应的struct sock
  • Socket 层:数据被放入该 Socket 的接收队列
第五步:应用取件,唤醒进程
  • 进程调用read()recv()等阻塞函数等待数据。
  • 数据进入接收队列后,进程通过系统调用,将内核态数据拷贝到用户态内存中。

四、关键名词记录

名词说明
硬中断硬件控制器发出的信号,需立即处理
软中断OS 模拟的信号,通过内核调度管理
中断处理函数网卡驱动预先注册的处理函数
DMA直接内存访问
sk_buff内核中的数据包缓冲区结构
NAPILinux 用于避免高流量下大量中断的机制
struct sock内核中的套接字结构
接收队列Socket 中存放接收数据的队列

五、套接字结构struct sock的核心组成

5.1 状态区(协议规范)

  • sk_state:TCP 连接状态(LISTEN / ESTABLISHED / CLOSE_WAIT 等)。
  • sk_prot:函数指针表,实现协议多态。
    • TCP 执行tcp_sendmsg()(复杂流量控制)。
    • UDP 执行udp_sendmsg()(简单发包)。

5.2 队列区(数据中转站)

  • sk_receive_queue:接收队列链表头,存放sk_buff
    • 每个 Socket 有独立的struct sock,只接收属于自己的数据。
  • sk_write_queue:发送队列,数据发出前在此排队。

5.3 资源管理区(性能与限制)

  • sk_rcvbuf/sk_sndbuf:接收/发送缓冲区大小限制。
    • 内核参数net.core.rmem_default即调整此值。
  • sk_wq:等待队列头。
    • 队列为空时,调用recv的进程挂在此处休眠。
    • 数据到达后,内核唤醒等待的进程。

六、一个补充理解

网卡硬件有其私有内存,"从硬件拷贝到内核态"意味着:数据从网卡硬件的私有内存,搬运到内核程序可以访问和管理的内存区域。


七、写在最后

对我来说,从软中断到应用获得数据包这一段流程最为重要,硬件相关的细节可后续再深入。

http://www.jsqmd.com/news/654281/

相关文章:

  • 第一个cesium应用
  • Qwen3-ASR-0.6B模型压缩与量化教程:进一步降低部署资源需求
  • 面试官:聊聊Spring是如何解决解决循环依赖的?
  • 生成式AI服务发现必须绕开的6个RFC陷阱(附CNCF官方未公开的兼容性测试报告)
  • 深入解析Rockchip RK3588 Linux SDK的构建系统:从build.sh脚本到多系统镜像生成
  • 告别固定分辨率!用Qwen2-VL的‘动态分辨率’技术,让你的AI看清图片里的每一个像素
  • Java程序员如何快速掌握高并发系统架构设计核心技术?
  • baidu-wangpan-parse:突破百度网盘限速的Python直链解析方案
  • 2026年比较好的新型墙体建材生产厂家推荐几家 - 行业平台推荐
  • 龙泽科技新能源充电设备仿真教学软件|技术解析+职教落地指南
  • Premiere Pro(pr)2026版最新详细安装教程
  • Kaggle数据集下载全攻略:从注册到本地存储的完整指南
  • 在旧货市场买东西需要避哪些坑?
  • TongWeb部署实战:从Domain创建到应用隔离,手把手教你规划生产环境(含冲突应用处理方案)
  • Pi0机器人控制模型优化建议:提升Web界面响应速度的方法
  • 2026年靠谱的钢铁冲压皮膜剂/高分子皮膜剂厂家综合实力对比 - 品牌宣传支持者
  • 2026年3月,最好的外墙材料150500搭配技能分享,仿石外墙瓷砖/外立面福字瓷砖壁画,外墙材料供应商推荐 - 品牌推荐师
  • 如何快速掌握暗黑破坏神2存档编辑器:新手完整使用指南
  • 2026年AI学习平台怎么选?深度对比5家主流平台,创业者必看
  • 2026年质量好的儿童洗鼻器/生理盐水洗鼻器值得信赖的生产厂家 - 行业平台推荐
  • 高速CAN、低速容错CAN傻傻分不清?一文讲透ISO11898与ISO11519-2标准差异及选型避坑
  • all-MiniLM-L6-v2部署教程:使用systemd守护进程保障Embedding服务稳定性
  • 2026年热门的实验室低温冷却液循环泵/DLSB 系列低温冷却液循环泵/低温冷却液循环泵制冷机组生产厂家推荐 - 行业平台推荐
  • AgentCPM-Report落地实践:像素史诗终端在高校科研中的应用案例
  • 全境封锁2 d3dx11_43.dll 丢失 一键修复:手把手教程与工具推荐
  • FlowState Lab 模型API接口详解与调用实战
  • 2026年评价高的5052铝卷/彩涂铝卷公司口碑哪家靠谱 - 品牌宣传支持者
  • 智慧树自动刷课插件:5分钟快速安装完整指南
  • MedGemma Medical Vision Lab服务医院信息科:轻量级本地化AI影像辅助教学系统落地案例
  • 2026年比较好的铁路道口拦门/铁路道口远程控制/铁路道口视频预警系统/铁路道口集中控制口碑好的厂家推荐 - 品牌宣传支持者