linux网卡发送数据包流程,linux内核Ethernet以太网卡驱动收发数据过程
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以太网卡驱动收发数据过程相关推荐
- Linux系统捕获数据包流程
Linux系统捕获数据包流程 为了提高数据包的捕获效率,瓶颈问题是一个需要非常关注的焦点.减少在捕获数据包过程中的瓶颈,就能够提高数据包捕获的整体性能.下面本文将以Linux操作系统为平台,分析捕获数 ...
- Linux内核分析 - 网络[一]:收发数据包的调用
什么是NAPI NAPI是linux一套最新的处理网口数据的API,linux 2.5引入的,所以很多驱动并不支持这种操作方式.简单来说,NAPI是综合中断方式与轮询方式的技术.数据量很低与很高时,N ...
- Linux内核数据调用,Linux内核分析 - 网络[一]:收发数据包的调用
什么是NAPI NAPI是linux一套最新的处理网口数据的API,linux 2.5引入的,所以很多驱动并不支持这种操作方式.简单来说,NAPI是综合中断方式与轮询方式的技术.数据量很低与很高时,N ...
- linux抓网卡数据包命令,Linux抓包命令tcpdump命令图解
原标题:Linux抓包命令tcpdump命令图解 tcpdump命令-->用来将网络中传送的数据包的"头"完全截获下来提供分析,常见的有Wireshark.在Linux中输入 ...
- linux如何查看丢弃数据包,导致Linux服务器丢弃数据包?
我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处 ...
- UDP发送数据包流程
UDP发送数据包的函数是udp_sendmsg,完成从用户地址空间接受数据包然后赋值到内核空间.udp_sendmsg函数主输入参数有四个: (1).kiocb:为了提高对用户地址空间操作效率的数据结 ...
- 负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解
负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解 系列文章: 负载均衡详解第一篇:负载均衡的需求 负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础 负载均衡详解第三篇:服务器负载均衡的基 ...
- Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包
Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包 >>>>>>>>>>>& ...
- 两个站点之间的距离是10000km,信号在媒体上的传播速率为2×108m/s,线路的带宽是10kbps,现在 发送一个3Kb的数据包,那么需要__时间使得接收方收到数据。
两个站点之间的距离是10000km,信号在媒体上的传播速率为2×10^8m/s,线路的带宽是10kbps,现在 发送一个3Kb的数据包,那么需要__时间使得接收方收到数据. 时间 = 发送时延 + 传 ...
最新文章
- 【采用】【风险管理】(第三篇)风险管理报表体系
- 前后端分离开发,日志应该如何进行记录,在出现问题的时候,方便定位问题
- VMware仅主机模式访问外网
- 客户端本地存储的比较及使用window.name数据传输
- jenkins的邮件提醒
- 在Spring Boot中使用 @ConfigurationProperties 注解, @EnableConfigurationProperties
- 《python3网络爬虫开发实战》--Ajax数据爬取
- 安卓编解码的分辨率问题
- maven命令行创建项目,提示java.lang.NoClassDefFoundError: org/apache/maven/shared/invoker/MavenInvocationExcept
- GhostScript 沙箱绕过(命令执行)漏洞 CVE-2019-6116 漏洞复现
- Segmentation-Based Deep-Learning Approach for Surface-Defect Detection-论文阅读笔记
- Mac如何读写外接硬盘?
- 运用css3新属性transform写的盒子嵌套展开动画效果
- 小米无线蓝牙耳机Air2 SE如何连接MacPro
- 【目标检测】FPN(Feature Pyramid Network)
- PPP协议使用同步传输技术传送比特串0110111111111100。试问经过零比特填充后变成怎样的比特串?若接收端收到的PPP帧的数据部分是0001110111110111110110,问删除发送端
- Linux下载安装和使用SQLite
- EasyUI实现表格分页
- 2023武汉纺织大学计算机考研信息汇总
- 雅虎金融 api_使用PHP和Yahoo!获得货币汇率 金融CSV API
热门文章
- BVR、RV、BV电线三者区别
- 互联网成为中国公益活行动的辽阔平台
- 【Linux】打开虚拟机显示“未能对鼠标-键盘-屏幕控制初始化”(VMware)
- ubuntu Android Studio find in files 的快捷键 与搜狗输入法Linux版 简繁体切换快捷键冲突问题的解决办法【ctrl+ shift+F】
- 用计算机怎么算期中成绩呢,绩点计算器有什么用?绩点计算器导出成绩的方法介绍...
- android 几个麦克风,在Android中同时在多个应用中使用麦克风
- 【XShell | Xftp】解决Xshell强制升级
- Penetration experience summary | Network security
- 大数据培训 | 数据仓库构建方法论和实践
- Qt Quick使用简介