1. 网卡处理数据包流程
网卡处理网络数据流程图:

图片来自参考链接1
上图中虚线步骤的解释:
1 DMA 将 NIC 接收的数据包逐个写入 sk_buff ,一个数据包可能占用多个 sk_buff , sk_buff 读写顺序遵循FIFO(先入先出)原则。
2 DMA 读完数据之后,NIC 会通过 NIC Interrupt Handler 触发 IRQ (中断请求)。
3 NIC driver 注册 poll 函数。
4 poll 函数对数据进行检查,例如将几个 sk_buff 合并,因为可能同一个数据可能被分散放在多个 sk_buff 中。
5 poll 函数将 sk_buff 交付上层网络栈处理。
完整流程:
1 系统启动时 NIC (network interface card) 进行初始化,系统分配内存空间给 Ring Buffer 。
2 初始状态下,Ring Buffer 队列每个槽中存放的 Packet Descriptor 指向 sk_buff ,状态均为 ready。
3 DMA 将 NIC 接收的数据包逐个写入 sk_buff ,一个数据包可能占用多个 sk_buff ,sk_buff 读写顺序遵循FIFO(先入先出)原则。4 被写入数据的 sk_buff 变为 used 状态。
5 DMA 读完数据之后,NIC 会通过 NIC Interrupt Handler 触发 IRQ (中断请求)。
6 NIC driver 注册 poll 函数。
7 poll 函数对数据进行检查,例如将几个 sk_buff 合并,因为可能同一个数据可能被分散放在多个 sk_buff 中。8 poll 函数将

2415

被折叠的 条评论
为什么被折叠?



