1.一文搞懂Linux内核网络设备驱动(白嫖小知识~)
2.十年码农内功:网络篇
3.linux 测试网络速率
一文搞懂Linux内核网络设备驱动(白嫖小知识~)
介绍数据包收包过程,码解有助于我们了解Linux内核网络设备在数据收包过程中的码解位置。数据包从被网卡接收到进入socket接收队列的码解整个过程,首先涉及网络设备初始化。码解以Intel I网卡的码解驱动ibg为例,驱动会在加载时调用初始化函数。码解兔子星球源码pci_register_driver函数用于将驱动的码解各种回调方法注册到一个struct pci_driver变量中。通过PCI ID识别设备后,码解内核为设备选择合适的码解驱动。许多驱动需要大量代码使得设备就绪,码解如设置net_device_ops变量,码解注册ethtool函数,码解以及配置软中断。码解
网络设备启动过程中,码解私有网盘 源码igb_probe函数完成设备初始化工作,码解包括PCI相关的操作和通用网络功能。结构net_device_ops变量包含了网络设备相关的操作函数,例如开启网络设备(ndo_open)时会调用对应的方法。在使用DMA将数据直接写入内存后,实现这一功能的数据结构为ring buffer。预留内存区域给网卡使用,实现数据包的接收。网卡支持接收侧扩展(RSS)或多队列技术,以利用多个CPU并行处理数据包。Intel I网卡支持多队列,其驱动在启用时调用igb_setup_all_rx_resources函数管理DMA内存。
启用NAPI(New API)接收数据包,彩虹羊病毒源码通过调用napi_enable函数设置NAPI变量中的启用标志位。对于igb驱动,当网卡被启用或通过ethtool修改队列数量或大小时,会启用每个q_vector的NAPI变量。注册中断处理函数,不同驱动实现因硬件而异,一般优先考虑MSI-X中断方式,以实现更高效的数据处理。最后,打开硬中断,网卡便可以接收数据包。
监控网络设备有多种方式,从最粗粒度的从0学源码ethtool -S查看网卡统计信息,到sysfs中获取接收端数据包的详细类型统计。sysfs提供统计信息,但驱动决定何时以及如何更新这些计数。/proc/net/dev提供了更高层级的网卡统计,适合作为常规参考。如果对数据的准确度有高要求,必须查看内核源码、驱动源码和驱动手册,以完全理解每个字段的实际含义。
本文仅介绍了Linux内核网络设备驱动的基本概述,未来将深入探讨更详细的内容,欢迎关注后续文章。
十年码农内功:网络篇
十年码农修炼内功,辅助源码注入器全新篇章《程序员进阶之路:缓存、网络、内存与案例》已升级发布。本书不仅修正了前作的错误,还扩充了网络部分,特别针对服务器端开发者,旨在提升专业技能,打破“CRUD boy”标签。深入剖析TCP/IP协议栈,从网络接口层的以太网开始,讲解理论与实践,包括MTU、MSS等概念。
网络分层讲解中,OSI七层模型和TCP/IP四层结构对比,详述IP与ICMP的作用,展示Linux中IP和ICMP头部结构,以及抓包实例。接着探讨传输层的TCP和UDP,包括套接字编程,如bind、listen、accept等函数的实战应用和阻塞/非阻塞模式的设置。
虚拟网卡(Tun/Tap)的使用,如网络层的Tun和接口层的Tap,以及创建和配置方法,以及网络抓包工具tcpdump和Wireshark的使用技巧,包括过滤规则和复杂抓包组合。此外,还介绍了网络工具如ethtool、ifconfig和伪文件的使用,以及网络调优的高级策略,如Ring Buffer优化和RSS/RPS/RFS/aRFS等技术。
网络收发过程的深入解析,包括数据包接收的多个阶段,以及丢包排查和eBPF技术的实践。最后,文章提供了丰富的参考资料,涵盖了Linux源码、网络编程实战教程和专业博客等内容,旨在为读者提供全面的网络编程学习路径。
linux 测试网络速率
ethtool是一个强大的网卡配置工具,几乎覆盖了phy芯片手册寄存器配置选项,常用于嵌入式调试。通过命令行可以查看大量信息,包括支持的端口、链接模式、自适应网络功能、工作模式(全双工、半双工)以及速率等。举例来说,Speed: Mb/s 显示了phy芯片的最大速率可达Mb/s,但在实际使用中还需进一步测试。
为了直观测试网络速率,ethtool能提供重要数据参考,但实际的传输速率仍需验证。例如,当结果显示为Speed: Mb/s,表示该设备处于base模式,但实际速率可能会略有不同。
使用iperf测试网络速率
iperf是一种专门设计用于实测网络速率的工具,它包含客户端和服务器端,通过它们之间的数据交互来实时计算并打印出网络速率。要注意的是,iperf可能在某些系统的文件系统中无法直接找到,需要下载源码进行编译安装。
使用iperf的原理类似于手动编写网络程序。通过计算1秒内接收的字节数量,就能得出当前网络的速率。与iperf测试方法一致,这同样能提供准确的网络速率评估。