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

Networking 谁先捕获数据包-内核还是驱动程序?,networking,network-programming,kernel,driver,Networking,Network Programming,Kernel,Driver,我正在尝试使用tcpreplay和tcpdump将数据包从一台机器发送到另一台机器 如果我编写一个直接从NIC捕获数据包的驱动程序,将遵循哪个路径 1) N/w数据包-->NIC卡-->app(无内核角色) 2) N/w数据包------->内核------->NIC卡------->应用程序 谢谢驱动程序是一段直接与硬件交互的代码。因此,这是看到数据包的第一段代码 然而,驱动程序在内核空间中运行;它本身就是内核的一部分。而且它肯定会依赖内核设施(例如内存管理)来完成它的工作。所以“内核没有角色

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

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

1) N/w数据包-->NIC卡-->app(无内核角色)

2) N/w数据包------->内核------->NIC卡------->应用程序


谢谢

驱动程序是一段直接与硬件交互的代码。因此,这是看到数据包的第一段代码


然而,驱动程序在内核空间中运行;它本身就是内核的一部分。而且它肯定会依赖内核设施(例如内存管理)来完成它的工作。所以“内核没有角色”是不正确的。

驱动程序是一段直接与硬件交互的代码。因此,这是看到数据包的第一段代码


然而,驱动程序在内核空间中运行;它本身就是内核的一部分。而且它肯定会依赖内核设施(例如内存管理)来完成它的工作。所以“没有内核角色”是不正确的。

通常是这样的顺序:

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

还有一些与此模型的偏差,但这些都是特定硬件/操作系统的特殊情况。用户直接登录硬件的一个供应商是,还有其他供应商。

通常按以下顺序:

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

还有一些与此模型的偏差,但这些都是特定硬件/操作系统的特殊情况。有一家供应商让用户直接接触到硬件,那就是,还有其他供应商。

什么操作系统?而且,你的问题形式不正确;驱动程序是内核的一部分,就像内核中的其他任何东西一样。@Nemo你关于驱动程序是内核的一部分的评论是我想到这个问题的原因。我想指出同样的缺陷。什么操作系统?而且,你的问题形式不正确;驱动程序是内核的一部分,就像内核中的其他任何东西一样。@Nemo你关于驱动程序是内核的一部分的评论是我想到这个问题的原因。我想指出同样的缺陷。谢谢你抽出时间回答这个不太清楚的问题。你的解释很详细。你是否知道任何我可以阅读更多的资源/教程(不要因为问这样的问题而感到尴尬?)。所有关于操作系统内部和网络的书籍(尤其是史蒂文斯)都有帮助。如果你喜欢Linux,你可能会发现“Linux设备驱动程序”(Linux Device Drivers)非常有教育意义。感谢你抽出时间回答这个不太清楚的问题。你的解释很详细。你是否知道任何我可以阅读更多的资源/教程(不要因为问这样的问题而感到尴尬?)。所有关于操作系统内部和网络的书籍(尤其是史蒂文斯)都有帮助。如果你喜欢Linux,你可能会发现“Linux设备驱动程序”(LinuxDeviceDrivers)很有教育意义。谢谢。是的,我的问题不太清楚,我同意,对不起,我希望我知道如何正确地表达。谢谢。是的,我的问题不太清楚,我同意,对不起,我希望我知道如何正确地表达它。