文章:计算机网络 30:数据如何经过 Linux 主机,socket、协议栈、队列、软中断与网卡卸载 研究与验证日期:2026-09-24 一手资料核查 1. NAPI — Linux kernel project URL: https://docs.kernel.org/networking/napi.html 版本/日期:Linux Kernel Documentation 在线版本,访问于 2026-09-24。 使用范围:设备事件通常先触发中断并调度 NAPI;NAPI 通常在软件中断上下文运行,也可线程化;poll budget 限制单次 RX 工作。具体设备路径仍取决于驱动和配置。 2. Segmentation Offloads — Linux kernel project URL: https://docs.kernel.org/networking/segmentation-offloads.html 版本/日期:Linux Kernel Documentation 在线版本,访问于 2026-09-24。 使用范围:TSO、GSO、GRO 的内核对象与分段/合并语义。文档没有给出本机性能结论。 3. Checksum Offloads — Linux kernel project URL: https://docs.kernel.org/networking/checksum-offloads.html 版本/日期:Linux Kernel Documentation 在线版本,访问于 2026-09-24。 使用范围:TX checksum offload 通过 skb 元数据请求设备完成校验和。未据此推断当前环境实际启用状态。 4. Interface statistics — Linux kernel project URL: https://docs.kernel.org/networking/statistics.html 版本/日期:Linux Kernel Documentation 在线版本,访问于 2026-09-24。 使用范围:标准接口统计的来源;rtnetlink 为首选,/proc/net/dev 为历史文本接口且会合并部分字段。 5. The proc/net/tcp and proc/net/tcp6 variables — Linux kernel project URL: https://docs.kernel.org/networking/proc_net_tcp.html 版本/日期:Linux Kernel Documentation 在线版本,访问于 2026-09-24。 使用范围:活动 TCP socket、状态、发送和接收队列字段。该接口已弃用,文档建议 tcp_diag;脚本仅作无依赖教学观测。 6. socket(7) — Linux man-pages project URL: https://man7.org/linux/man-pages/man7/socket.7.html 版本/日期:在线手册页,访问于 2026-09-24。 使用范围:Linux socket 层是用户进程和内核协议栈之间的统一接口;缓冲选项是内核 socket 属性。 7. RFC 9293: Transmission Control Protocol — IETF URL: https://www.rfc-editor.org/rfc/rfc9293.html 版本/日期:RFC 9293,2022-08。 使用范围:TCP 序号、确认、状态机和用户接口模型;未把 SEND 调用返回扩大为对端应用处理成功。 8. CaptureSetup/Offloading — Wireshark project URL: https://wiki.wireshark.org/CaptureSetup/Offloading 版本/日期:在线 Wiki,访问于 2026-09-24。 使用范围:发送侧校验和卸载与分段/聚合会造成错误校验和或超 MTU 对象等本机抓包表象。具体线路事实仍需更接近介质的观测点。 运行方法 python3 source/_posts/2026-09-24-计算机网络30-数据如何经过Linux主机/lab.py --help python3 source/_posts/2026-09-24-计算机网络30-数据如何经过Linux主机/lab.py 预期验证条件 - 脚本只绑定 127.0.0.1,不改路由、防火墙、offload 或系统参数。 - sendall 返回后、服务端 recv 前,两端 /proc/net/tcp 条目为 ESTABLISHED。 - 服务端 recv 前的 rx_queue 大于 0。 - 服务端最终收到 65536 字节,SHA-256 与客户端负载一致,并返回 APP_OK。 - loopback 前后字节计数增加。 - 任一必要断言失败时脚本退出码为 1。 验证边界 验证类型:LOCAL_INTEGRATION。 /proc/net/dev、/proc/net/snmp 和 /proc/net/softnet_stat 是共享主机计数,差值不能唯一归因到本进程。loopback 不经过外部物理 NIC。 NOT_RUN:物理 NIC 中断与 RX/TX ring、RSS/RPS/RFS、TSO/GSO/GRO、checksum offload、真实线上分段与校验和、抓包、丢包、吞吐、时延、公网和生产链路。缺少专用物理测试主机、抓包权限和可安全修改 offload 的隔离环境。