linux内核Ethernet以太网卡驱动收发数据过程

linux内核Ethernet以太网卡驱动收发数据过程

下图简单描述了网卡驱动与Linux内核之间的联系:

关于上图的一些说明:

系统初始化:

1. 协议模块调用 dev_add_pack() 来注册协议处理函数到链表 &ptype_base;

2. __init br_init() 用于初始化桥接相关的操作;

3. __init net_dev_init() 初始化了两个软中断;

网卡驱动初始化:

1. 网卡驱动在其 probe() 函数里面初始化 net_device 结构体,用来描述网卡,以及提供操作网卡的接口;

配置网卡:

1. 当我们通过ifconfig来配置网卡时,会调用到net_device->open(),该函数最主要的是注册了一个中断(当网卡接收到数据或数据发送完成会触发中断);

数据的发送与接收:

1. 当我们需要发送数据时,最终调用的是网卡驱动提供的函数:net_device->hard_start_xmit();

2. 当我们接收到数据时,会触发中断,中断处理函数调用会调用内核函数来接收数据,最终由驱动程序调用内核函数netif_receive_skb(),把报文送入协议栈(接下来的代码硬件无关,与具体报文处理协议相关,比如:ARP协议,IPv4协议,IPv6协议等)。

3. 网卡的中断处理函数在调用内核函数接收数据时又分为非NAPI/NAPI两种方式;

4. NAPI方式涉及到中断的下半部处理的概念以及软中断。

5. 报文通过netif_receive_skb()送入协议栈之后,首先判断需不需要进行桥接处理;

6. 如果报文没有被桥接代码处理,再调用协议处理函数来处理;

linux内核Ethernet以太网卡驱动收发数据过程相关教程

linux网卡发送数据包流程,linux内核Ethernet以太网卡驱动收发数据过程相关推荐

  1. Linux系统捕获数据包流程

    Linux系统捕获数据包流程 为了提高数据包的捕获效率,瓶颈问题是一个需要非常关注的焦点.减少在捕获数据包过程中的瓶颈,就能够提高数据包捕获的整体性能.下面本文将以Linux操作系统为平台,分析捕获数 ...

  2. Linux内核分析 - 网络[一]:收发数据包的调用

    什么是NAPI NAPI是linux一套最新的处理网口数据的API,linux 2.5引入的,所以很多驱动并不支持这种操作方式.简单来说,NAPI是综合中断方式与轮询方式的技术.数据量很低与很高时,N ...

  3. Linux内核数据调用,Linux内核分析 - 网络[一]:收发数据包的调用

    什么是NAPI NAPI是linux一套最新的处理网口数据的API,linux 2.5引入的,所以很多驱动并不支持这种操作方式.简单来说,NAPI是综合中断方式与轮询方式的技术.数据量很低与很高时,N ...

  4. linux抓网卡数据包命令,Linux抓包命令tcpdump命令图解

    原标题:Linux抓包命令tcpdump命令图解 tcpdump命令-->用来将网络中传送的数据包的"头"完全截获下来提供分析,常见的有Wireshark.在Linux中输入 ...

  5. linux如何查看丢弃数据包,导致Linux服务器丢弃数据包?

    我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处 ...

  6. UDP发送数据包流程

    UDP发送数据包的函数是udp_sendmsg,完成从用户地址空间接受数据包然后赋值到内核空间.udp_sendmsg函数主输入参数有四个: (1).kiocb:为了提高对用户地址空间操作效率的数据结 ...

  7. 负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解

    负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解 系列文章: 负载均衡详解第一篇:负载均衡的需求 负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础 负载均衡详解第三篇:服务器负载均衡的基 ...

  8. Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包

    Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包 >>>>>>>>>>>& ...

  9. 两个站点之间的距离是10000km,信号在媒体上的传播速率为2×108m/s,线路的带宽是10kbps,现在 发送一个3Kb的数据包,那么需要__时间使得接收方收到数据。

    两个站点之间的距离是10000km,信号在媒体上的传播速率为2×10^8m/s,线路的带宽是10kbps,现在 发送一个3Kb的数据包,那么需要__时间使得接收方收到数据. 时间 = 发送时延 + 传 ...

最新文章

  1. 【采用】【风险管理】(第三篇)风险管理报表体系
  2. 前后端分离开发,日志应该如何进行记录,在出现问题的时候,方便定位问题
  3. VMware仅主机模式访问外网
  4. 客户端本地存储的比较及使用window.name数据传输
  5. jenkins的邮件提醒
  6. 在Spring Boot中使用 @ConfigurationProperties 注解, @EnableConfigurationProperties
  7. 《python3网络爬虫开发实战》--Ajax数据爬取
  8. 安卓编解码的分辨率问题
  9. maven命令行创建项目,提示java.lang.NoClassDefFoundError: org/apache/maven/shared/invoker/MavenInvocationExcept
  10. GhostScript 沙箱绕过(命令执行)漏洞 CVE-2019-6116 漏洞复现
  11. Segmentation-Based Deep-Learning Approach for Surface-Defect Detection-论文阅读笔记
  12. Mac如何读写外接硬盘?
  13. 运用css3新属性transform写的盒子嵌套展开动画效果
  14. 小米无线蓝牙耳机Air2 SE如何连接MacPro
  15. 【目标检测】FPN(Feature Pyramid Network)
  16. PPP协议使用同步传输技术传送比特串0110111111111100。试问经过零比特填充后变成怎样的比特串?若接收端收到的PPP帧的数据部分是0001110111110111110110,问删除发送端
  17. Linux下载安装和使用SQLite
  18. EasyUI实现表格分页
  19. 2023武汉纺织大学计算机考研信息汇总
  20. 雅虎金融 api_使用PHP和Yahoo!获得货币汇率 金融CSV API

热门文章

  1. BVR、RV、BV电线三者区别
  2. 互联网成为中国公益活行动的辽阔平台
  3. 【Linux】打开虚拟机显示“未能对鼠标-键盘-屏幕控制初始化”(VMware)
  4. ubuntu Android Studio find in files 的快捷键 与搜狗输入法Linux版 简繁体切换快捷键冲突问题的解决办法【ctrl+ shift+F】
  5. 用计算机怎么算期中成绩呢,绩点计算器有什么用?绩点计算器导出成绩的方法介绍...
  6. android 几个麦克风,在Android中同时在多个应用中使用麦克风
  7. 【XShell | Xftp】解决Xshell强制升级
  8. Penetration experience summary | Network security
  9. 大数据培训 | 数据仓库构建方法论和实践
  10. Qt Quick使用简介