目录

Linux 收包处理流程概览

Linux Kernel TCP/IP Stack — L1 Layer — NIC Controller — 收包处理流程_SDN/NFV 网络技术专栏

  1. 数据帧到达 NIC。
  2. NIC Controller 中的 DMA Controller 模块,主动将数据帧写入 RAM。
  3. NIC 给 CPU 的相关引脚上触发一个电压变化,以此触发 CPU 的硬中断,通知 CPU 执行硬中断处理程序。
  4. CPU 的硬中断处理函数的作用就是调用 NIC Controller Registered 的中断处理函数,该函数的作用就是发出软中断请求,然后释放 CPU。
  5. ksoftirqd 内核线程在监测到 NIC 的软中断请求后,会通过调用 poll() I/O 函数,开始轮询收包。poll() I/O 函数是多路复用 I/O 函数,所以收包期间不需要 CPU 的参与。
  6. 数据 Ready 之后,数据帧会被保存为 SKB 实例,然后交由各级协议栈处理。例如:对于 UDP 报文段而言,就会被放到用户 Socket 的接收