谁首先捕获数据包 - 内核还是驱动程序?

Ano*_*non 1 networking kernel network-programming driver

我正在尝试使用tcpreplay和tcpdump将数据包从一台机器发送到另一台机器.

如果我写一个驱动程序直接从NIC捕获数据包,将遵循哪条路径?

1)N/W包---->网卡----> app(没有内核的作用)

2)N/W包----->内核----->网卡---> app

谢谢

Nik*_*sov 6

它通常按此顺序排列:

  • NIC硬件获取电信号,硬件更新其一些寄存器和缓冲区,这些寄存器和缓冲区通常映射到计算机物理内存中
  • 硬件激活IRQ线
  • 内核陷入中断处理例程并调用驱动程序IRQ处理函数
  • 驱动程序确定这是用于RX还是TX
  • 对于RX,驱动程序将NIC从NIC硬件缓冲区设置为为网络缓冲区保留的内核内存
  • 驱动程序通知上层内核网络堆栈输入可用
  • 网络堆栈输入例程计算出协议,可选地进行过滤,以及是否有对此输入感兴趣的应用程序,如果是,则缓冲数据包以进行应用程序处理,如果进程被阻塞等待输入,则内核将其标记为可运行
  • 在某些时候,内核调度程序将该进程放在CPU上并恢复,应用程序消耗网络输入

然后存在与此模型的偏差,但这些是特定硬件/ OS的特殊情况.一个供应用户土地直接硬件的供应商是Solarflare,还有其他供应商.