内核接收网络包的大致过程

256 阅读1分钟

内核接收网络包的大致过程

接收网络包.png

  1. 网络中的数据帧被网卡(网络适配器,这里使用简称)接收。
  2. 网卡判断目标地址是否为本机;不是,则抛弃接收的数据帧。
  3. 是,则通过PCIe总线(可以理解为硬件层面上的高速公路)以DMA的方式将数据帧复制到内存RingBuffer数据结构。
  4. 在复制后,网卡发送硬中断通知CPU。
  5. CPU在接收到硬中断后发送请求通知网络设备驱动(后简称驱动)。
  6. 驱动响应请求,向ksoftirqd线程发送软中断请求,并释放CPU硬中断。
  7. ksoftirqd线程调用poll函数进行收包。
  8. RingBuffer的数据帧被处理为SocketBuffer(后简称skb)的形式。
  9. skb向上贯穿网络层和运输层。
  10. 通过socket库接口将数据送至应用层。