网卡的 Ring Buffer 详解

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 函数将

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rocky006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值