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

从零读懂RDMA的钥匙机制:硬件如何用L_Key/R_Key保护你的内存

在RDMA传输过程中,数据从一端传递到另一端,CPU全程不插手。但这带来一个致命问题:没有CPU把关,网卡怎么知道哪个内存能读、哪个能写?万一恶意程序指着一块内核内存让网卡去DMA,岂不是直接崩了整个系统?

而这就是L_Key和R_Key要解决的核心问题——给每块注册过的内存配一把“硬件级的门禁卡”。网卡在访问内存之前,必须先刷卡验证,通不过就拒绝。关键是,这个验证过程完全由网卡硬件完成,不需要CPU参与,也不依赖操作系统。

一、L_Key和R_Key长什么样?

IB规范明确定义了L_Key和R_Key的格式:高24位是索引,低8位是标签(key)。或者换一个角度:这两把钥匙其实是同一把锁的不同副本,它们的高24位索引都是指向同一个MPT条目的“门牌号”,而低8位标签是校验码。这两把“钥匙”在内核/硬件眼中仅有使用场景的不同:L_Key用于本端操作,R_Key用于远端操作。

以Mellanox的网卡为例,L_Key和R_Key实际取值完全相同,那为什么IB规范还要区分两把钥匙?答案是语义区分,便于上层协议做差异化访问控制——某些场景下,你可能希望本地操作比远程操作拥有更多权限(比如本地可写、远程只读),虽然底层钥匙值相同,但在MPT中可以通过不同的权限掩码来实现这种区分。

二、MPT:硬件的“内存登记册”

所有已注册的内存区域,都在网卡硬件的MPT(内存保护表)里有一条记录。MPT的本质是网卡内部(或主机内存中)的一张数组,每个条目(通常叫MKey Context)存放着某块MR的完整信息:

  1. 内存的起始虚拟地址(VA)和长度;
  2. 访问权限(本地读/写、远程读/写、原子操作等);
  3. 指向MTT(内存翻译表)的指针;
  4. 其他元数据;

当应用程序调用ibv_reg_mr时,驱动锁页、构建MTT,然后向硬件发送命令。硬件在MPT中分配一个新条目,填入上述信息,然后生成L_Key和R_Key——高24位就是这个条目的索引(数组下标),低8位由硬件填充一个随机或递增的标签。最后硬件把这两把钥匙返回给驱动,驱动再交给应用程序。

三、L_Key和R_Key如何使用

1、场景1:本端发送数据(需要L_Key)

应用程序调用ibv_post_send,在SGE(散播收集条目)中填入:缓冲区的虚拟地址、长度、以及L_Key。驱动把这些信息打包成WQE,写进SQ,然后敲门通知网卡。

网卡硬件从SQ取出WQE后,立即用L_Key的高24位作为索引,到MPT中定位对应的条目。取到条目后,硬件做三件事:

  1. 校验标签:对比L_Key的低8位是否和MPT条目中存储的标签一致。不一致→拒绝操作。、
  2. 校验权限:当前操作是“本地读”(发送数据时需要从本地缓冲区读数据),MPT条目中必须允许本地读操作。不允许→拒绝。
  3. 校验地址范围:WQE中的虚拟地址和长度必须在MPT条目的合法范围内。超出→拒绝。

全部通过后,硬件拿着MPT条目中指向MTT的指针,去查地址翻译表,把虚拟地址转成物理地址,然后发起DMA从内存中取数据,封装成包发出去。

2、场景2:远端发起RDMA Write(需要R_Key)

远端节点发来一个RDMA Write请求包,包里包含了:目标虚拟地址、要写入的数据、以及R_Key。本端网卡收到包后,同样用R_Key的高24位作为索引去查MPT。校验流程和本地操作几乎一样,只是权限检查改成了“远程写”。校验通过后,网卡根据MPT条目找到MTT,翻译地址,然后把数据DMA写入对应的物理内存。

关键区别:L_Key和R_Key校验的是“同一张MPT表”的不同权限掩码。本地操作走本地权限位,远程操作走远程权限位。这就是为什么同一把钥匙值可以同时用于L_Key和R_Key——硬件根据请求来源(本地WQE还是网络包)来判断该检查哪一组权限。

四、为什么R_Key能防止非法访问?

1、钥匙本身不可伪造。R_Key的低8位标签由硬件随机生成,且每次注册不同。应用程序通过socket或CM交换R_Key时,交换的是这个随机数。攻击者即使截获了虚拟地址和QPN,没有正确的R_Key,网卡直接拒绝。

2、索引+标签双重校验。R_Key的高24位索引指向MPT中的某一行。即使攻击者猜中了索引(比如遍历0~16M),低8位的标签有256种可能,且MPT中该条目的标签只有正确的那一个才匹配——硬件在每次请求时都会做标签比对,不匹配直接丢弃包。

3、硬件级不可覆盖。所有这些校验都在网卡芯片内部完成,不经过CPU,也不依赖操作系统。即使攻击者拿到了服务器的root权限,也无法绕过网卡的硬件校验逻辑——MPT表存储在网卡可访问的内存中,但其访问完全由硬件控制,内核无法篡改。

4、PD隔离。除了钥匙校验,RDMA还提供了保护域(PD)机制:QP和MR必须属于同一个PD才能互相访问。这意味着即使攻击者拿到了某个MR的R_Key,如果没有一个和该MR同PD的QP,也无法发起有效的RDMA操作。

五、总结

L_Key和R_Key的本质,是把“哪块内存能用”的决策权从CPU转移到了网卡硬件。24位索引负责定位,8位标签负责防伪,MPT负责存储规则。当网卡收到一个内存访问请求时,它拿着钥匙自己去查表、校验、决定允许还是拒绝——全程不需要CPU帮忙,也不给攻击者留后门。这在追求“CPU零参与”性能的同时,还给RDMA提供了硬件级的安全底座

http://www.jsqmd.com/news/831655/

相关文章:

  • PyWxDump:从微信数据管理工具到开源合规的深刻教训
  • 从零做了一个 AI 面试陪练工具,聊聊全过程
  • AI Agent在科学研究中的辅助作用
  • 【python基础】使用python下载二进制文件
  • LSM6DS3TR-C与磁力计九轴融合:嵌入式姿态解算算法实现与优化
  • AI如何学习科学品味:从论文评估到智能文献筛选的实践路径
  • 基于PIR传感器与HalloWing的自动惊吓陷阱:嵌入式系统交互实践
  • Rider对非商业用途免费全球最受喜爱的 .NET 和游戏开发 IDE
  • 动画性能监控:打造流畅的用户体验
  • 3分钟解决iPhone在Windows无法上网的终极方案:苹果USB网络共享驱动一键安装指南
  • codex features
  • 降AI率软件越便宜越好吗?实测5个主流降AI工具,首选嘎嘎降!
  • Solon框架解析:轻量级Java应用开发新范式与云原生实践
  • AWorksLP嵌入式开发:基于FatFs的SD卡文件系统操作全解析
  • 2026年当下,长治整屋定制优选平台深度解析与联系指南 - 2026年企业推荐榜
  • Arm Cortex-A处理器缓存与TLB架构深度解析
  • 2026 首发|GEO 全域运营经典案例:公域引流到私域转化全链路完整复盘
  • HAProxy 如何实现 TCP 模式下的 MySQL 数据库负载均衡
  • 基于NLP的文本逻辑分析工具:思考词汇识别与可视化实践
  • 4.AI大模型-幻觉、记忆、参数-大模型底层运行机制
  • 【mv】戏剧结构为什么要设计幕 起承转合 这种设计
  • Harness 中的请求标识染色:端到端追踪
  • 2026年5月河南桥梁护栏项目优选供应商实力解析 - 2026年企业推荐榜
  • 51_《智能体微服务架构企业级实战教程》智能助手主应用服务之保存攻略节点
  • 芯片制程数字背后的真相:从摩尔定律到营销节点的演进
  • 硬件版【Cursor】?aily blockly IDE尝鲜封神,实战硬伤尽显
  • BookGet完整指南:一键下载全球50+图书馆古籍资源的终极工具
  • 2026年5月中国流量仪表厂家十大排名榜推荐:10家专业评测助夜间巡检防计量失真 - 品牌推荐
  • 2026年,天津这家玻璃贴膜服务商性价比超高,不了解就亏大啦!
  • GitHub Profile美化指南:从Markdown到动态组件打造专业开发者名片