Linux内核网络

本文详细介绍了Linux内核中网络数据包的发送和接收流程,从应用层封装、CPU拷贝、协议栈处理、DMA操作到硬件中断和应用层解封装,为初学者提供全局视角。
摘要由CSDN通过智能技术生成

前言

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

网络协议栈

图解

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/00c1ab74129f491bb39a893c339fe2fc.png

功能

应用层负责为上层应用程序提供用户接口
传输层负责端到端通信,数据的分割与重组,多路复用与解复用
网络层负责路由选择,数据的分组与重组,转发分组报文
链路层负责错误检测与纠正,帧同步,处理物理地址
物理层负责在网络中传输原始的比特流

发送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网络传输的总体流程😎
如果有问题可以及时通知我,私聊,评论都行哈🤗

  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

醉墨居士

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

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

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

打赏作者

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

抵扣说明:

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

余额充值