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