RDMA建链的3次握手和断链的4次挥手流程?
文章目录
- 基础信息
- 建链 3次握手
- 断链4次挥手
- 建联状态
- active端
- passive端
- 报文结构
- 函数关系
- 其他
- 后记
基础信息

- CM: Communication Management 通信管理 连接管理
- SIDR: Service ID Resolution Protocol. 作用: enables users of Unreliable Datagram service to locate Queue Pairs supporting their desired service.
- MAD: Management Datagrams 管理报文
- GSI:General Services Interface 通用服务接口
- QP1:专用与rdma cm建链
- 分为server端和client端,在RDMA中server端叫passive端(被动)、client端叫active端(主动)
建链 3次握手

- req包、rep包、RTU包,rdma中叫做msg
- Request (REQ) message,
- Response (REP) message,
- RTU:Ready To Use。 在内核消息处理中收到该msg之后,会将qp attribute设置RTS和RTR。 read to send ;read to receive
- Queue Pair Number (QPN): QP数字
- EEC: End to End Context 端到端上下文
- req中告诉对端cid、qkey、qpn、guid以及udp的sport
- rep中同样告诉对端cid(communication id 通信id,相当于session回话的id,每次建联有一个id)、qkey、qpn。(相当于也是对req的一个ack,同时携带自己的信息)
- rtu包含了lcid和rcid表示本地和远端的cid,算是以此确认。
- 同样的后面讲的dreq中也会携带lcid和rcid
断链4次挥手
双端都需要发送所以累计四次

建联状态
active端

passive端

报文结构
- 报文结构:BTH | DETH | MAD header| MAD payload | CRC
- 其中MAD payload,根据消息不同,是不同的消息内容:req、rep、mra、rtu等
- BTH:Base Transport Header:基础传输头,主要是opcode(比如write 0x10、send 0x4、ack 0x17)、Partition key和目标QP(cm的目标QP都是1),以及报序号
- DETH:Datagram Extended Transport Header:数据报文扩展传输头。主要是query key和source QP。(BTH中是dst qp,deth中是src qp,有点类似以太的smac和dmac。
- MAD:Management Datagrams 管理报文。主要包含Method(是send recv等)、Attribute ID(属性ID,比如req 0x10、rep 0x13、mra 0x11、rtu 0x14、dreq 0x15、drep 0x16)
- 管理路线:BEM结构 E表示extend,E可以是DETH(数据)、AETH(ack)、RETH(rdma)
- 数据路线:BD结构:BTH头部和Data的数据比如rdma send数据
- BTH找QP与optype、DETH找sq和key、MAD找attid(比如cm req)、MAD payload找具体的cm msg信息(比如cmd id 等)
函数关系
- 内核中处理msg的发包函数都是ib_send_cm_xxx开头,比如ib_send_cm_req、ib_send_cm_rep、ib_send_cm_mra、ib_send_cm_rtu…
- 收包函数都是cm_xxx_handler,比如cm_req_handler、cm_rep_handler、cm_rtu_handler、cm_mar_handler、cm_dreq_handler…
- 内核收包处理流程,是ib_cm.ko中调用ib_register_mad_agent注册cm_recv_handler到mad层进行收包,cm_recv_handler中收到后会启动一个work,然后通过work event发给内核work上下文进行处理,也就是cm_req_xxx这些函数会在work上下文处理,work的入口函数是cm_work_handler。然后cm_work_handler根据event是req、rep等调用到对应的cm_xxx_handler.
- rdma对应的API调用底层关系是 rdma api -> rdma cm文件(infiniband/rdma_cm) -> 发送write dev函数 -> 内核态ucma处理 -> 内核态rdma接口处理 -> 内核态cma(代理)处理 -> 内核态cm处理 -> 内核态mlnx处理 -> 网卡硬件处理
- 比如rdma_acccpt接口实现就是 打开infiniband/rdma_cm文件,封装wirte数据命令 CM_CMD_ACCEPT,通过write发送给内核,内核根据cmd的值在ucma_cmd_table中进行match,匹配后调用对应函数ucma_accept函数,然后调用[k] rdma层的rdma_accept、然后调用cm代理cma层的cma_accept,然后继续往后调用
- rdma_connect会发送req 报文
- rdma_listen会监听,进入rdma_accept后会发送rep报文或者mra,其他报文类似
- ib_send_cm_xxx最后都会调用ib_post_send_mad发送给mad层,然后mad层调用ib_send_mad调用ib_post_send,然后调用到mlx5_ib_post_send异步发送
其他
- 所有的RoCE v2的报文都会经过UDP,可以通过tcp抓包,但是tcp抓包需要指定端口是mlx5的端口,而不是eth口。
后记
更多细节以后逐渐补充。
相关文章:
RDMA建链的3次握手和断链的4次挥手流程?
文章目录 基础信息建链 3次握手断链4次挥手建联状态active端passive端 报文结构函数关系其他后记 基础信息 CM: Communication Management 通信管理 连接管理SIDR: Service ID Resolution Protocol. 作用: enables users of Unreliable Datagram service to locate …...
实验4 图像空间滤波
1. 实验目的 ①掌握图像空间滤波的主要原理与方法; ②掌握图像边缘提取的主要原理和方法; ③了解空间滤波在图像处理和机器学习中的应用。 2. 实验内容 ①调用 Matlab / Python OpenCV中的函数,实现均值滤波、高斯滤波、中值滤波等。 ②调…...
独辟蹊径:我是如何用Java自创一套工作流引擎的(下)
作者:后端小肥肠 创作不易,未经允许严禁转载。 姊妹篇:独辟蹊径:我是如何用Java自创一套工作流引擎的(上)_java工作流引擎-CSDN博客 1. 前言 在上一篇博客中,我们详细介绍了如何利用Java语言从…...
【Python】pycharm常用快捷键操作
目录 一.pycharm自定义修改快捷键 二.pycharm默认常用快捷键 一.pycharm自定义修改快捷键 在file-setting-keymap中可以修改快捷键,建议刚开始没特殊需求就不用修改,先熟悉系统默认的常用快捷键,但是以下情况可以考虑修改: 之前使用其他I…...
es6语法复习一
es6语法 1.var 变量提升 2.let 不存在变量提升,只能定义一次 3.const 先定义再使用,定义好来不能修改 4.解构赋值 [a,b,c][1,2,3],{a,b,c}{a:1,b:2,c:3} 5.模版字符串 let aaa; ${a} is ok 6.对象简化写法 const school{ name, change, improve(){ cons…...
【python入门】自定义函数
文章目录 定义自定义函数的基本语法参数类型示例代码函数作用域匿名函数(Lambda)闭包装饰器 Python中的自定义函数允许你编写一段可重用的代码块,这段代码可以带参数(输入),并可能返回一个值(输…...
ONLYOFFICE 桌面编辑器 8.1 版发布:全面提升文档处理效率的新体验
文章目录 什么是ONLYOFFICE ?ONLYOFFICE 桌面编辑器 8.1 发布:新功能和改进功能强大的 PDF 编辑器幻灯片版式功能从右至左语言支持多媒体功能增强无缝切换工作模式其他改进和优化总结 什么是ONLYOFFICE ? https://www.onlyoffice.com/zh/off…...
ESP32实现UDP连接——micropython版本
代码: import network import socket import timedef wifiInit(name, port):ap network.WLAN(network.AP_IF) # 创建一个热点ap.config(essidname, authmodenetwork.AUTH_OPEN) # 无需密码ap.active(True) # 激活热点ip ap.ifconfig()[0] # 获取ip地址print(…...
Windows Ternimal
Windows Ternimal 安装 Windows 终端概述 | Microsoft Learn wt --help在当前目录打开 lextm/windowsterminal-shell: Install/uninstall scripts for Windows Terminal context menu items 打开指定目录 wt -d %USERPROFILE% ohmyposh 美化 1 安装 2 添加 ohmyposh bin…...
Unity扩展编辑器功能的特性
1.添加分组标题 用于在Unity的Inspector视图中为属性或变量组创建一个自定义的标题或头部,有助于在Inspector中组织和分类不同的属性,使其更易于阅读和管理。 [Header("Common Properties")] public float MouseSensitivity 5; public float…...
API类别 - UI核心
API类别 - UI核心 引言 在当今的数字时代,用户界面(UI)是任何软件或应用成功的关键因素之一。UI核心API作为构建用户界面的基础,提供了丰富的功能和工具,使得开发者能够创建出既美观又实用的用户界面。本文将深入探讨UI核心API的不同类别,以及它们如何影响现代软件开发…...
Redis-主从复制-配置主从关系
文章目录 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录2、修改protected-mode 为no,取消保护模式3、查看redis的进程状态4、配置6380是6379的从机5、配置6381是6379的从机6、查看主机 6379 的主从信息 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录 …...
DigiRL:让 AI 自己学会控制手机
类似于苹果此前发布的Ferret-UI 的安卓开源平替。主要用于在 Android 设备上识别 UI 和执行指令,不同的是它利用了离线到在线强化学习(Offline-to-Online RL),能够快速适应应用更新或 UI 变化。...
04.Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法
文章目录 设置方法配置文件设置Custom xxx配置文件详细的配置方法.xml文件的整体格式基础参数格式value-attributes配置介绍设置属性在服务安装后不可修改设置允许字段为空是否显示配置名称参数类型设置字符串类型PasswordBooleanIntFloatDirectoryDirectoriesContent-多行文本…...
LSTM时间序列基础学习
时间序列 时间序列可以是一维,二维,三维甚至更高维度的数据,在深度学习的世界中常见的是三维时间序列,这三个维度分别是(batch_size,time_step,input_dimensions)。 其中time_step是时间步,它…...
『Z-Workshop』 6月22日线下ALCOVE分享活动
2024 求是创新 ZJUBCA Sponsored by the ALCOVE Community TIME:2024/06/22 ADD:浙江大学紫金港校区 --- Alcove 是 Aptos 公链与 Alibaba Cloud 共同打造的亚洲首个 Move 开发者社区,致力于支持开发者使用 Move 语言构建下一代 Web3 应用&am…...
【机器学习】机器学习重要方法——迁移学习:理论、方法与实践
文章目录 迁移学习:理论、方法与实践引言第一章 迁移学习的基本概念1.1 什么是迁移学习1.2 迁移学习的类型1.3 迁移学习的优势 第二章 迁移学习的核心方法2.1 特征重用(Feature Reuse)2.2 微调(Fine-Tuning)2.3 领域适…...
uniapp, [TypeError] “Failed to fetch dynamically imported module“ 报错解决思路
文章目录 1. 背景2. 报错3. 解决思路4. 思考参考1. 背景 最近基于uniapp开发一款设备参数调试的APP软件,在使用第三方插件的过程中,出现下面的报错。 2. 报错 [plugin:vite:import-analysis] Cannot find module ‘D:/leaning/uniapp/demo/jk-uts-udp示例/uni_modules/uts-…...
四川省高等职业学校大数据技术专业建设暨专业质量监测研讨活动顺利开展
6月21日,省教育评估院在四川邮电职业技术学院组织开展全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动。省教育评估院副院长赖长春,四川邮电职业技术学院党委副书记、校长冯远洪,四川邮电职业技术学院党委委员、副校长程德杰等出席…...
深入解析三大跨平台开发框架:Flutter、React Native 和 uniapp
深入解析三大跨平台开发框架:Flutter、React Native 和 uniapp 在移动开发中,跨平台开发框架已经成为开发者的首选工具。本篇将深入解析三大主流跨平台开发框架:Flutter、React Native 和 uniapp。下面将详细探讨它们的原理、优势和劣势。 …...
【信号处理实战】从原理到代码:手把手实现三次样条插值
1. 三次样条插值:从数学定义到生活场景 想象你正在用一根柔软的弹性尺子连接一组图钉,这些图钉固定在木板上代表你的数据点。这根尺子需要光滑地穿过每一个图钉,同时保持自然的弯曲形态——这就是三次样条插值要解决的问题。作为信号处理中最…...
手把手教你用MintPy处理InSAR时间序列数据(附ISCE/GAMMA兼容配置)
手把手教你用MintPy处理InSAR时间序列数据(附ISCE/GAMMA兼容配置) 在遥感地质监测领域,InSAR时间序列分析正逐渐成为地表形变研究的黄金标准。传统MATLAB工具链(如StaMPS)虽然功能成熟,但面临着闭源生态、扩…...
HRN模型与PID控制结合:实时面部动画调节系统
HRN模型与PID控制结合:实时面部动画调节系统 1. 引言 想象一下,你正在制作一部动画电影,主角的面部表情需要精确到每一帧的微妙变化。传统的手工调整方式耗时耗力,而自动生成的表情又往往缺乏自然流畅的过渡。这就是为什么我们需…...
5G NR Rel16测量上报事件深度解析:从A1到I1的触发机制与应用场景
1. 5G测量上报事件的核心作用 当你用手机刷视频时,有没有想过为什么从客厅走到阳台,视频还能流畅播放不卡顿?这背后其实是5G网络在默默执行"接力赛"——通过基站间的无缝切换保障连续通信。而测量上报事件就是这场接力赛的发令枪&a…...
用Python从零实现一个卡尔曼滤波器(附完整代码与可视化)
用Python从零实现一个卡尔曼滤波器(附完整代码与可视化) 卡尔曼滤波是工程领域最经典的状态估计算法之一,广泛应用于导航、控制、信号处理等领域。但对于初学者而言,面对复杂的矩阵运算和抽象的概率推导常常无从下手。本文将用Pyt…...
终极Emscripten编译缓存策略:加速WebAssembly项目构建的完整指南
终极Emscripten编译缓存策略:加速WebAssembly项目构建的完整指南 【免费下载链接】emscripten Emscripten: An LLVM-to-WebAssembly Compiler 项目地址: https://gitcode.com/gh_mirrors/em/emscripten Emscripten作为一款强大的LLVM-to-WebAssembly编译器&a…...
5分钟完成Windows平台Poppler PDF处理工具完整部署指南
5分钟完成Windows平台Poppler PDF处理工具完整部署指南 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 在Windows系统上快速部署专业的PDF文档处理…...
2026最新!AI论文软件测评:这几款让你写作更高效
2026年真正好用的AI论文软件,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...
Qwen-Image效果实测:对比传统模型,看看它的中文理解强在哪
Qwen-Image效果实测:对比传统模型,看看它的中文理解强在哪 你有没有试过用AI画图,结果被它“气”到哭笑不得?比如,你想画一个“穿着旗袍的女士在江南水乡的乌篷船上喝茶”,结果AI给你生成一个“穿着船在喝…...
MIKE21不同下垫面添加随时空变化净雨过程线
近期很多文章都是关于市政管网方向的,今天小编换个口味,对MIKE21中添加降雨边界文件有了一种新的制作形式。其实这种方法涉及到MIKE SHE一个小工具,不过确实很实用,就让小编给大家介绍下吧。第一步 下垫面转DFS2熟悉MIKE21的同学们…...
