Linux内核网络

文章目录

前言

你好,我是醉墨居士,因为Linux内核涉及的内容极多,我们初学者如果一上来就开始深挖细节,很有可能会在Linux内核代码的茫茫大海之中迷失自我。本篇博客希望可以帮助大家先有个全局的视野,剩余的细节内容,根据沿着全局的脉络去学习,可能会有意想不到的效果🫠

网络协议栈

图解
功能

应用层负责为上层应用程序提供用户接口

传输层负责端到端通信,数据的分割与重组,多路复用与解复用

网络层负责路由选择,数据的分组与重组,转发分组报文

链路层负责错误检测与纠正,帧同步,处理物理地址

物理层负责在网络中传输原始的比特流

发送Linux内核网络数据包

图解
流程

1.应用协议栈处理:对用户数据进行封装成应用数据

2.CPU Copy:CPU参与将用户空间的数据拷贝到内核的套接字缓冲区中

3.协议栈处理:将套接字缓冲区中的应用数据送给Linux内核网络协议栈进行封包后放入sk_buff

4.建立DMA映射:表示sk_buff中的数据已经装载完毕,设置sk_buff的地址和长度等

5.DMA Copy:通过DMA方式将sk_buff中的数据通过Rx Ring buffer拷贝到网卡的Rx FIFO

6.发送数据:通过有线或者无线的方式将数据发送到网络中

接收Linux内核网络数据包

图解
流程

1.接收数据:通过有线或者无线的方式接收网络中的数据

2.DMA Copy:通过DMA方式将网卡的Tx FIFO中的数据通过Tx Ring Buffer拷贝到sk_buff

3.硬件中断IRQ:跳转到对应IRQ的中断服务例程(ISR)来处理该事件

4.软中断:驱动程序通过软中断执行对应的软中断处理程序

5.协议栈处理:将sk_buff中的数据通过Linux内核网络协议栈进行拆包放入套接字缓冲区

6.CPU Copy:CPU参与将内核的套接字缓冲区拷贝到用户空间

7.应用协议栈处理:对应用数据解封装成用户数据

最后

我是醉墨居士,这篇博客我们大概梳理了一下Linux网络传输的总体流程😎

如果有问题可以及时通知我,私聊,评论都行哈🤗

相关推荐
不会写程序的未来程序员2 分钟前
nvm 安装教程:Node.js 版本管理全攻略 (Win/Mac/Linux) + .nvmrc 实战
linux·macos·node.js·前端开发·环境配置·nvm
黄焖鸡能干四碗3 分钟前
网络安全风险评估报告(WORD版本)
大数据·运维·网络·人工智能·制造
跨境麦香鱼10 分钟前
2026自动化抢鞋机器人:如何通过高并发代理提高成功率?
运维·网络·自动化
互联科技报11 分钟前
好用稳定的5G网络仿真软件如何选?— 深度对比与选型指南
网络·arm开发·5g
路由侠内网穿透16 分钟前
本地部署开源发票管理系统 Invoice Ninja 并实现外部访问
运维·服务器·数据库·物联网·开源
小红的布丁22 分钟前
IP、子网、私有地址、ARP 与 Ping 通信全过程
网络·网络协议·tcp/ip
Hello 0 124 分钟前
“机房学生认证系统”与批量自动化部署方案
运维·自动化
KKKlucifer26 分钟前
4A 平台合规自动化:从策略配置到审计追溯的全链路技术实现
运维·网络·自动化
zbtlink29 分钟前
5G CPE和光纤宽带,谁才是未来?
网络·5g·智能路由器
爱研究的小梁29 分钟前
浅析适配应急与关键场景的三类聚合终端
大数据·网络