当前位置: 首页 > news >正文

Linux 中 NIC(网络接口卡)和协议栈的区别以及DPDK

对比维度NIC (网络接口卡)协议栈 (Protocol Stack)
本质硬件设备(物理网卡或虚拟网卡)软件实现,是内核中一系列网络协议和代码的集合
主要功能负责物理信号与数字信号的转换、数据帧的收发、直接内存访问(DMA)负责数据包的封装/解封装、路由寻址、建立连接、提供应用编程接口(如Socket)
所在层级主要工作在物理层数据链路层(处理帧和MAC地址)跨越数据链路层网络层传输层,直至应用层
交互对象物理网络介质(如网线、无线电波)、计算机总线(如PCIe)操作系统内核、应用程序(通过Socket API)
具体形态服务器上的物理网卡芯片,或 eth0wlan0 等网络接口内核中的一系列函数和数据结构,如处理IP协议的代码、TCP状态机等

简单来说,NIC相当于快递公司,负责把数据包装好,规划对接发货路径,数据到了以后入库到菜鸟驿站;协议栈相当于菜鸟驿站,数据到站后,把数据分类好,校验好,交付给用户完整的业务数据。

DPDK是干嘛的呢,是快递公司直接送货上门+用户实时取货,不走菜鸟驿站,数据交付最快

特性对比传统内核网络协议栈 (像“菜鸟驿站”)DPDK (像“快递直送”)
路径数据包必须经过内核协议栈“中转”绕过内核,数据包直接从网卡到应用
处理方式中断驱动:来一个包通知一次CPU,效率低轮询模式:CPU主动检查网卡,避免中断开销
数据拷贝需要从内核空间拷贝到用户空间零拷贝,数据直接放入用户态内存
控制权由内核“驿站”统一调度,通用但慢应用“住户”完全掌控,为高速处理定制

掌握了总体逻辑,下面看下技术细节:

🔧 DPDK如何实现“直送”

DPDK为了实现这种极致的“直送”速度,用了几项关键技术:

  • 用户态驱动与轮询:DPDK的驱动运行在用户空间,采用轮询模式。这意味着CPU会持续、主动地检查网卡是否有新数据到达,而不是被动等待网卡中断通知。这消除了中断处理带来的延迟和上下文切换开销。
  • 内核旁路与零拷贝:这是实现“直送”的关键。DPDK通过重载网卡驱动,让数据包在到达网卡后,不进入内核协议栈的复杂流程,而是通过DMA(直接内存访问)方式直接放入预先分配好的、应用程序能直接访问的用户空间内存区域。这样就避免了数据在内核和用户空间之间的来回拷贝。
  • 精细的内存与队列管理:DPDK使用大页内存来减少内存页表查找的开销,并利用无锁环形队列在多核间高效传递数据包。这些优化确保了数据在“最后一段路”上也能畅通无阻。

📦 DPDK数据经过NIC吗?

是的,不仅经过,而且DPDK与NIC(网卡)的协作比传统方式更为紧密和直接。

您可以这样理解:DPDK更像是让应用程序“架空”了内核,自己亲自下场高效管理NIC。它接管了网卡的数据收发队列,直接指挥网卡将数据包放到指定的内存位置。所以,数据流的路径是:物理网络 -> NIC(网卡) -> DPDK用户态驱动 -> 用户态应用程序。网卡依然是数据进出的大门,但DPDK赋予了应用程序直接管理这扇大门的钥匙。

💡 为何需要DPDK及它的另一面

DPDK主要解决的是在x86等通用服务器上处理高速网络数据流时的性能瓶颈问题,尤其适用于网络功能虚拟化(NFV)、软件定义网络(SDN)、高频交易等场景。一些项目(如OVS)移植到DPDK后性能提升显著。

然而,这种极致的性能也带来了一些代价:

  • 失去内核网络栈:应用程序需要自己实现或集成用户态的TCP/IP等协议栈来处理复杂的网络逻辑。
  • 独占CPU核心:轮询模式会持续占用CPU核心,可能导致空转消耗。
  • 增加开发复杂性:开发者需要学习新的编程模型和关注底层细节。

为了兼顾灵活性与性能,DPDK还提供了KNI这样的接口,允许数据包在需要时再“回到”内核协议栈进行处理,实现了某种程度上的“可进可退”。

http://www.dtcms.com/a/577073.html

相关文章:

  • MATLAB实现贝叶斯回归预测
  • ZYNQ介绍
  • 【Python】-- 趣味代码 - Piano游戏
  • 解决使用EasyExcel导出带公式的excel,公式不自动计算问题
  • 展示型网站多少钱建设大型网站的公司
  • 前端FAQ: 描述⼀下你最近使⽤过的前端框架,并解释为何选择它们?
  • [特殊字符] 微前端部署实战:Nginx 配置 HTTPS 与 CORS 跨域解决方案(示例版)
  • 短视频矩阵系统搭建指南:源码部署与全流程解析
  • 李沐动手学深度学习笔记(1)
  • 做网站云服务器选择多大带宽北京网站建设有哪些公司好
  • 第8章 模块系统
  • GraphRAG在Windows环境下离线部署
  • Spring Boot 实战:企业级接口限流与熔断机制设计
  • 二十一、二进制文件部署高可用集群
  • 窗口dp|组合数学
  • 【linux国庆练习】
  • 织梦cms怎么做双语网站wordpress网页小特效
  • 我的世界做壁纸的网站移动互联网开发心得体会
  • CST对电路板与地面平面耦合的电磁模拟
  • Apple授权登录开发流程
  • 告别手动导出:一键将思源笔记自动同步到 Git 仓库
  • OPPO 后端校招面试,过于简单了!
  • element表格的行列动态合并
  • C++ 零基础入门与冒泡排序深度实现
  • 鸿蒙harmony将注册的数据包装成json发送到后端的细节及过程
  • JavaWeb(后端进阶)
  • VOC浓度快速测定仪在厂界预警中的实战应用:PID传感器技术与数据分析
  • 【SRE】安装Grafana实践
  • 在 PHP 中打印数据(调试、输出内容)
  • 网站运营有什么用做公司网站需要了解哪些东西