一、介绍
对于调试linux网卡驱动或者wifi驱动性能,或者排查网络数据丢包的时候,需要对内核处理包要与基本的了解,从而排查出丢包出现在哪个环节,这里给出大致流程和常用排查方法

二、基本框架
1、硬件连接
1)以太网口
网线通过变压器接PHY芯片、PHY芯片通过MII接MAC芯片、MAC芯片接PCI总线
PHY芯片主要负责:CSMA/CD、模数转换、编解码、串并转换
MAC芯片主要负责:
比特流和帧的转换:7字节的前导码Preamble和1字节的帧首定界符SFD
CRC校验

2)LTE/5G

3)wifi

三、流程
网卡收到数据包,DMA到内核内存,中断通知内核数据有了,内核按轮次处理消耗数据包,一轮处理完成后,开启硬中断

1、网卡收到数据包。
2、将数据包从网卡硬件缓存转移内存中。
3、通知内核处理。
4、经过TCP/IP协议逐层处理。
5、应用程序通过read()从socket buffer读取数据

1、网卡收到数据包。
网卡本身是有4K以上的内存,用于发送和接收,收到网络信号后,将高低电平转换为数据存于网卡本身的fifo

2、将数据包从网卡硬件缓存转移内存中。
1)网卡申请ring buffer的描述,根据描述找到具体的物理地址,从fifo队列物理网卡会使用DMA将数据包写到skb_buffer
2)NIC触发一个硬中断,每一个硬件中断会对应一个中断号,且指定一个vCPU来处理,NAPI触发软中断,触发napi系统
3)硬件中断的中断处理程序调用驱动程序:
a.禁用网卡硬中断,通知NIC,再来数据不用触发硬中断了,把数据DMA拷入系统内存即可
b.NAPI触发软中断,触发napi系统,消耗ringbuffer指向的skb_buffer,NAPI循环处理ringbuffer数据,处理完成
c.启动网络硬件中断,有数据来时候就可以继续触发硬件中断,继续通知CPU来消耗数据包.

linux网络数据包流程相关推荐

  1. Linux网络 - 数据包的接收过程

    Linux网络 - 数据包的接收过程 嵌入式Linux中文站 嵌入式Linux中文站 微信号 emblinux 功能介绍 嵌入式Linux中文站提供专业嵌入式Linux开发技术资讯 Table of ...

  2. Linux网络数据包的揭秘以及常见的调优方式总结

    Linux网络数据包的揭秘以及常见的调优方式总结 (网易游戏运维平台) 关注我们,获一手游戏运维方案 lott 网易游戏业务 SRE, 专注于业务运维的质量和效率 , 喜欢研究 Linux 系统原理. ...

  3. Linux: 网络数据收发流程简析

    文章目录 1. 前言 2. 背景 3. 网卡数据收发流程 3.1 网络数据接收流程 3.1.1 网卡数据接收流程 3.1.2 网卡数据向上传递给L3,L4的流程 3.2 网卡数据发送流程 1. 前言 ...

  4. Linux网络数据包接收处理过程

    因为要对百万.千万.甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化.而很多时候,如果你对Linux底 ...

  5. linux接收网络数据并存存储,linux网络数据包数据结构 Socket Buffer

    Linux网络核心数据结构是套接字缓存(socket buffer),简称skb.它代表一个要发送或处理的报文,并贯穿于整个协议栈.1.套接字缓存skb由两部分组成:(1)报文数据:它保存了实际在网络 ...

  6. Linux网络-数据包的接收流程(基于RTL8139网卡驱动程序)

    本文将介绍Linux系统中,基于RTL8139网卡驱动程序,是如何一步一步将接收到的数据包传送到内核的网络协议栈的. 下图展示了数据包(packet)如何进入内存,并被内核的网络模块开始处理: +-- ...

  7. linux receive函数,Linux网络 - 数据包的接收过程

    的方式写入到指定的内存地址,该地址由网卡驱动分配并初始化.注: 老的网卡可能不支持DMA,不过新的网卡一般都支持. 3: 网卡通过硬件中断(IRQ)通知CPU,告诉它有数据来了 4: CPU根据中断表 ...

  8. linux网络数据发送流程

    网络套接字如何将数据发生出去的呢?这个需要从网络协议初始化开始分析. 网络协议初始化: 所在文件net/ipv4/af_inet.c static int __init inet_init(void) ...

  9. Linux网络 - 数据包的发送过程

    继上一篇介绍了数据包的接收过程后,本文将介绍在Linux系统中,数据包是如何一步一步从应用程序到网卡并最终发送出去的. 如果英文没有问题,强烈建议阅读后面参考里的文章,里面介绍的更详细. 本文只讨论以 ...

最新文章

  1. agv调度matlab程序,一种分布式AGV调度方法及调度系统与流程
  2. 卸载阿里云服务器的mysql_阿里云服务器入门教程
  3. browsersync php,用browserSync吞下4个php
  4. 【C/C++】main函数之参数argc和argv含义及用法
  5. java 循环依赖_java – 如何在Gradle中解决循环依赖
  6. 【leetcode】Search for a Range
  7. Git的基本概念/常用命令及实例
  8. 《MATLAB信号处理超级学习手册》——2.7 本章小结
  9. BZOJ3172 TJOI2013 单词 AC自动机
  10. python 自动化发送邮件_干货 | 解放双手,用Python实现自动发送邮件
  11. 2021-06-19表单,内嵌框架
  12. c语言函数调用及应用举例
  13. 调用Windows远程桌面应用
  14. C语言使用栈和队列实现停车场管理
  15. 自动驾驶系列(七)——聊聊人机交互中的DMS驾驶员监控系统
  16. 2023 诚通网盘在线解析无广告高速下载网站源码
  17. 在B站,没有什么是不能搞CP的
  18. 电脑连接打印机并共享及其他打印机连接
  19. 机器学习笔记(吴恩达老师)
  20. 银行业大数据分析:如何用大数据技术优化ATM运营

热门文章

  1. 七麦科技CTO王东:后数据时代创业团队如何打造数据价值
  2. me shy是什么歌 抖音make_抖音shy是什么音乐
  3. Ubuntu出现依赖关系问题 - 仍未被配置问题
  4. 设备dp信号测试软件,DP接口测试视频信号图形产生器 Model 2235
  5. 简单粗暴PyTorch之nn网络层(卷积、池化、线性、激活)
  6. linux进去mysql数据库的命令_linux登录数据库mysql 常用命令
  7. 工作中突然被转岗是什么体验?
  8. linux下载命令wget命令详解
  9. SaltStack(4)——SaltStack目录中有多个sls文件的执行顺序
  10. 纯CSS卡通狮子样式代码