47 | 接收网络包(上):如何搞明白合作伙伴让我们做什么?
刘超
该思维导图由 AI 生成,仅供参考
前面两节,我们分析了发送网络包的整个过程。这一节,我们来解析接收网络包的过程。
如果说网络包的发送是从应用层开始,层层调用,一直到网卡驱动程序的话,网络包的结束过程,就是一个反过来的过程,我们不能从应用层的读取开始,而应该从网卡接收到一个网络包开始。我们用两节来解析这个过程,这一节我们从硬件网卡解析到 IP 层,下一节,我们从 IP 层解析到 Socket 层。
设备驱动层
网卡作为一个硬件,接收到网络包,应该怎么通知操作系统,这个网络包到达了呢?咱们学习过输入输出设备和中断。没错,我们可以触发一个中断。但是这里有个问题,就是网络包的到来,往往是很难预期的。网络吞吐量比较大的时候,网络包的到达会十分频繁。这个时候,如果非常频繁地去触发中断,想想就觉得是个灾难。
比如说,CPU 正在做某个事情,一些网络包来了,触发了中断,CPU 停下手里的事情,去处理这些网络包,处理完毕按照中断处理的逻辑,应该回去继续处理其他事情。这个时候,另一些网络包又来了,又触发了中断,CPU 手里的事情还没捂热,又要停下来去处理网络包。能不能大家要来的一起来,把网络包好好处理一把,然后再回去集中处理其他事情呢?
网络包能不能一起来,这个我们没法儿控制,但是我们可以有一种机制,就是当一些网络包到来触发了中断,内核处理完这些网络包之后,我们可以先进入主动轮询 poll 网卡的方式,主动去接收到来的网络包。如果一直有,就一直处理,等处理告一段落,就返回干其他的事情。当再有下一批网络包到来的时候,再中断,再轮询 poll。这样就会大大减少中断的数量,提升网络处理的效率,这种处理方式我们称为 NAPI。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入分析了网络包的接收过程,从硬件网卡到IP层的复杂处理过程。通过讲解设备驱动层的中断处理、NAPI机制的应用,以及网络协议栈的二层逻辑和IP层处理过程,详细解释了网络包接收的全过程。文章涉及硬件通知操作系统、中断处理、NAPI机制等技术细节,适合对网络包接收过程感兴趣的读者阅读。文章内容技术性强,对于网络包接收过程有着深入的剖析和解释,适合对网络技术感兴趣的读者深入学习。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》,新⼈⾸单¥68
《趣谈 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-1737 - 羊仔爸比老师我想问一下,因为我看网络发送和接收两章iptables规则都是在内核中IP层生效的,像配置和端口相关的iptables规则是在哪里生效的?
作者回复: 也是在这里的
2019-09-101 - 莫名流程图很赞
作者回复: 谢谢
2019-08-11 - 追风筝的人好复杂呀 头疼
作者回复: 再看一遍,对着图
2019-08-053 - 许童童VLAN 的原理有些忘了,希望老师可以在答疑中给我们答疑一下。
作者回复: VLAN网络协议里面有讲
2019-07-15 - Cyril老师能否详细写一点关于 smp 相关的知识,比如多 cpu 如何处理网卡过来的中断,多 cpu 如何进程调度,多 cpu 又是如何解决共享变量访问冲突的问题,对这一部分知识点一直比较模糊2019-07-1514
- 奔跑的码仔https://baijiahao.baidu.com/s?id=1628398215665219628&wfr=spider&for=pc该文章很好的讲解了VLAN的基本原理和各种使用方式,推荐给大家。2019-10-188
- 啦啦啦我好像听到了错了重新读,哈哈,这么逗比的吗2019-09-2715
- 安排牛2019-07-152
- Penn和Cyril提到的问题一样,老师能否介绍下smp,网卡多队列的收包后,进入内核的处理流程2019-07-151
收起评论