趣谈 Linux 操作系统
刘超
前网易杭州研究院云计算技术部首席架构师
85459 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 72 讲
趣谈 Linux 操作系统
15
15
1.0x
00:00/00:00
登录|注册

47 | 接收网络包(上):如何搞明白合作伙伴让我们做什么?

Ring Buffer读取数据到内核struct sk_buff
ixgb_clean_rx_irq
tcp_v4_rcv
napi_poll
TCP层处理
NET_RX_SOFTIRQ软中断处理函数
ip_local_deliver
iptables规则处理
VLAN处理
软中断触发
IP层处理
二层逻辑处理
中断处理函数
网卡驱动程序注册中断处理函数
Ring Buffer
DMA技术
内核网络协议栈处理
中断通知CPU
硬件网卡接收
接收网络包的过程

该思维导图由 AI 生成,仅供参考

前面两节,我们分析了发送网络包的整个过程。这一节,我们来解析接收网络包的过程。
如果说网络包的发送是从应用层开始,层层调用,一直到网卡驱动程序的话,网络包的结束过程,就是一个反过来的过程,我们不能从应用层的读取开始,而应该从网卡接收到一个网络包开始。我们用两节来解析这个过程,这一节我们从硬件网卡解析到 IP 层,下一节,我们从 IP 层解析到 Socket 层。

设备驱动层

网卡作为一个硬件,接收到网络包,应该怎么通知操作系统,这个网络包到达了呢?咱们学习过输入输出设备和中断。没错,我们可以触发一个中断。但是这里有个问题,就是网络包的到来,往往是很难预期的。网络吞吐量比较大的时候,网络包的到达会十分频繁。这个时候,如果非常频繁地去触发中断,想想就觉得是个灾难。
比如说,CPU 正在做某个事情,一些网络包来了,触发了中断,CPU 停下手里的事情,去处理这些网络包,处理完毕按照中断处理的逻辑,应该回去继续处理其他事情。这个时候,另一些网络包又来了,又触发了中断,CPU 手里的事情还没捂热,又要停下来去处理网络包。能不能大家要来的一起来,把网络包好好处理一把,然后再回去集中处理其他事情呢?
网络包能不能一起来,这个我们没法儿控制,但是我们可以有一种机制,就是当一些网络包到来触发了中断,内核处理完这些网络包之后,我们可以先进入主动轮询 poll 网卡的方式,主动去接收到来的网络包。如果一直有,就一直处理,等处理告一段落,就返回干其他的事情。当再有下一批网络包到来的时候,再中断,再轮询 poll。这样就会大大减少中断的数量,提升网络处理的效率,这种处理方式我们称为 NAPI
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入分析了网络包的接收过程,从硬件网卡到IP层的复杂处理过程。通过讲解设备驱动层的中断处理、NAPI机制的应用,以及网络协议栈的二层逻辑和IP层处理过程,详细解释了网络包接收的全过程。文章涉及硬件通知操作系统、中断处理、NAPI机制等技术细节,适合对网络包接收过程感兴趣的读者阅读。文章内容技术性强,对于网络包接收过程有着深入的剖析和解释,适合对网络技术感兴趣的读者深入学习。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • likun
    老师 一直有个疑问 网络报数据从进入内存后在cpu的参与下进行了几次内存拷贝呢? 目前我的理解是两次:DMA将数据从网卡接收到内存的网卡环形缓冲区后,cpu进行第一次的内存数据拷贝,生成sk_buff, 内核处理完成后交给应用层,cpu又会经过一次拷贝,获取到用户空间表示的数据。同理,发送的时候,cpu将用户空间数据拷贝到内核空间分配sk_buff,后续设备驱动层cpu将sk_buff的数据拷贝到网卡的环形发送缓冲区,然后发起dma传输指令,dma将数据从内存发送到网卡。不知道这个过程我理解的对不对,请老师指正。以前总是理解为一次的用户空间和内核空间的数据拷贝,后续cpu发起d ma传输指令,dma直接将sk_buff的数据发送到网卡,现在根据老师讲解,这样似乎有问题。

    作者回复: 对的

    2020-05-17
    3
    7
  • 羊仔爸比
    老师我想问一下,因为我看网络发送和接收两章iptables规则都是在内核中IP层生效的,像配置和端口相关的iptables规则是在哪里生效的?

    作者回复: 也是在这里的

    2019-09-10
    1
  • 莫名
    流程图很赞

    作者回复: 谢谢

    2019-08-11
  • 追风筝的人
    好复杂呀 头疼

    作者回复: 再看一遍,对着图

    2019-08-05
    3
  • 许童童
    VLAN 的原理有些忘了,希望老师可以在答疑中给我们答疑一下。

    作者回复: VLAN网络协议里面有讲

    2019-07-15
  • Cyril
    老师能否详细写一点关于 smp 相关的知识,比如多 cpu 如何处理网卡过来的中断,多 cpu 如何进程调度,多 cpu 又是如何解决共享变量访问冲突的问题,对这一部分知识点一直比较模糊
    2019-07-15
    14
  • 奔跑的码仔
    https://baijiahao.baidu.com/s?id=1628398215665219628&wfr=spider&for=pc该文章很好的讲解了VLAN的基本原理和各种使用方式,推荐给大家。
    2019-10-18
    8
  • 啦啦啦
    我好像听到了错了重新读,哈哈,这么逗比的吗
    2019-09-27
    1
    5
  • 安排
    2019-07-15
    2
  • Penn
    和Cyril提到的问题一样,老师能否介绍下smp,网卡多队列的收包后,进入内核的处理流程
    2019-07-15
    1
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部