从零学习 InfiniBand-network架构(十) —— IB协议中全局ID

news2024/12/24 2:31:42

从零学习 InfiniBand-network架构(十) —— IB协议中全局ID


🔈声明:
😃博主主页:王_嘻嘻的CSDN主页
🔑未经作者允许,禁止转载
🚩本专题部分内容源于《InfiniBand-network architecture》,侵权必删

   专题内的上一文章谈到的是子网内ID的意义和作用,而本文要介绍的全局ID将用在两个不同子网下的Packet传输。本章介绍IBA中全局ID的作用,IPv6地址及单播、多播规则;并描述如何为子网中的每个端口分配相同的子网ID以及一个或多个GUID



全局ID的意义

  Local ID进行寻址需要保证两个Port建立在同一子网的前提下,如果Port不在同一子网下,Packet需要提供目标Port的子网地址和本地地址。所以,一个以另一个子网中的端口为目标的数据包,除了LRH之外,还必须包含一个全局路由头(GRH),GRH包含源全局ID (SGID)和目的全局ID (DGID)。

以下是一个子网间Packet传输的例子:

  1. 当TCA端口将Packet发送至链路时,需要设置:SLID、DLID、SGID、DGID;
  2. 根据DLID,前两个交换机中的转发表将包中继到该子网内的目的端口;
  3. 当到达第一个路由器上的目标端口时,路由器入口端口将解码DLID并检查它是否是这个子网内的包的目标,路由器会执行以下操作:
    • 如果目标子网不在路由器端口,那么需要查表得到,前往目标子网得路径需要经过得端口,并对packet更新LID;
    • 如果子网匹配成功,路由表会继续查找LID;
    • 在packet从选择的端口发送之前,还需要对SLID和DLID进行相应修改,甚至可以修改SL和VL项;重新计算VCRC等
  4. 后续重复上述1-3步骤,直到Packet到达目标子网;

IPv6地址及单播规则

  因为Ipv4由32-bits组成,限制了地址的分配,所以诞生了Ipv6,其由128-bits组成。IBA的全局ID符合Ipv6的规范,高64-bits用来表示端口所在的子网ID;低64-bits作为端口的全局标识GUID,总体格式如下图所示。




  IBA架构还在GID上定义了单播地址限制和多播地址限制:

  • 当需要使用单播全局地址从任何其他IBA或非IBA子网中的任何端口通用寻址时,所有地址的前三位中带有001‘b的128位地址都被保留下来作为无限制单播全局地址分配。

  除了无限制单播地址外,部分全局单播地址是有限制的,因为路由器需要限制具有这种DGID地址的数据包允许传播的距离,比如只能在当前子网内传输。

  • 如果接收到的packet的GID项中最高位为FE80_0000_0000_0000h,则不允许该packet被送出当前子网,它将被静默丢弃。

多播规则

  多播GID用于标识CA和路由器上的一组端口。

上图是多播包的GID构成,其中:

  • 128位GID地址中将最高位为1111 1111b (FFh)作为组播GID地址;
  • Flags是4-bits的标志,且前三bit保留并定义为零,最高位T的定义如下:T = 0表示这是一个永久分配的组播GID,T = 1表示这是非永久分配(即瞬态)的组播GID;
  • Scope是一个4位的组播作用域值,用于限制组播操作的作用域;

多播地址的使用规则如下:

  1. 一个CA或路由器可以加入一个或多个多播组;
  2. 多播GID不会出现在packet的SGID项中;
  3. 多播GID ff02:0:0:0:0:0:0:0:1是链路本地多播GID,路由器不将具有该DGID的报文路由到本地子网外。该GID用作DGID时,用与向子网中所有具有多播功能的CA广播;
  4. 此外,IPv6规范在RFC2375和RFC2373中定义了一组保留地址。除非有明确说明,否则IBA不会将这些地址用于IBA组播操作,而是将它们保留给原始IPv6使用。

分配端口的子网ID和GUID

  • 在设备的配置阶段中,子网管理器(SM)将为子网下的端口都分配相同的子网ID。

  端口分配的GID的低64位由全局唯一标识符(GUID)组成。在设计时至少有一个由CA、交换机或路由器制造商分配的GUID。虽然端口是在上电后由SM分配地址,但GUID可以持久地识别以下每一项:

  • 设备;
  • CA或路由器上的每个端口;
  • 交换机的0号端口(管理端口);

该标识符构成如下,内部包括:

  • 24-bits的公司ID,第6bit作为通用域/局部域标志,通常为1;
  • 40-bits的扩展ID,作为公司内部的编号使用;



搜索关注我的公众号【IC墨鱼仔】,获取我的更多IC干货分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设备指示灯开关状态识别检测系统 yolov5

设备指示灯开关状态识别检测系统是基于yolo网络深度学习模型,对现场画面进行实时监测识别。自动识别仪表示数或开关状态。我们使用YOLO(你只看一次)算法进行对象检测。YOLO是一个聪明的卷积神经网络(CNN),用于实时进行目标检测。该算法将单个神经网络应用…

Python中使用zip函数的七重境界

1. 引言 Python中有一些内置函数,可以使我们的代码非常优雅。zip 函数就是其中之一,但是zip 函数的使用对于初学者来说不是很直观,有时容易出错。因此本文将从7个层次来由浅入深地来探讨强大的zip 函数的概念、用法和技巧。 闲话少说&#x…

用HTML写一个2023跨年动画代码(烟花+自定义文字+背景音乐+雪花+倒计时)

*2022年圣诞节到来啦,很高兴这次我们又能一起度过~ 文章目录一、前言二、跨年烟花三、效果展示五、HTML源码一、前言 时光荏苒,白驹过隙。 2022这一年又在忙碌中度过了,过去的一年,我们同努力,我们共欢笑,…

ContentProvider基础知识

ContentProvider基础知识 1.ContentProvider入门 1.简介 不同程序之间的数据交换,不同app之间的数据共享学会如何操作数据学会如何监听数据变化学会URI,URImatcher,ContentUris的如何使用2.基本使用 A应用,使用ContentProvider的子类进行暴漏…

RabbitMQ 第二天 高级 8 RabbitMQ 应用问题

RabbitMQ 【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级8 RabbitMQ 应用问题8.1 消息可靠性保障8.1.1 消息补偿8.2 消息幂等性保障8.2.1 乐观锁机制第二天 高级 8 RabbitMQ 应用问题 8.1 消息可靠性保障 在RabbitMQ的使…

pytorch【线性回归】【逻辑回归】【softmax回归】

文章目录零、前置函数线性相乘均方误差损失函数梯度下降函数数据的生成函数一、线性回归1.手动实现线性回归2.调库实现线性回归1.定义我们线性回归的模型2.定义我们的误差函数3.定义优化方法4.模型的训练5.开始训练6.查看模型的参数7.计算我们模型的当前的均方误差二、逻辑回归…

【5G RLC】AM模式的数据传输详解

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

Linux内核死锁检测工具——Lockdep

文章目录前言配置内核简单的AB-BA死锁案例实际项目中的死锁前言 死锁是指两个或多个进程因争夺资源而造成的互相等待的现象,如进程A需要资源X,进程B需要资源Y,而双方都掌握对方所需要的资源,且都不释放,这会导致死锁。…

【圣诞快乐】如何用代码画一颗圣诞树?

文章目录一、前言二、创意角度三、java swing版 效果展示四、java swing版 实现步骤&代码五、springboot项目banner版 效果展示六、springboot项目banner版 实现步骤七、 linux shell界面打印版 效果展示八、 linux shell界面打印版 实现步骤一、前言 一年一度的圣诞节来了…

Allegro如何设置差分对内等长规则

Allegro如何设置差分对内等长规则 Allegro上可以对差分网络设置对内等长规则,方便把P/N网络进行等长处理,以下面这对USB为例 具体操作如下 打开Constraint Manage找到这对USB网络

vue3 antd table表格的样式修改(一)调整table表格每行(row)行高过高问题

vue3 antd项目实战——修改ant design vue table组件的默认样式(调整每行行高)知识调用场景复现实际操作解决a-table表格padding过宽知识调用 文章中可能会用到的知识链接vue3ant design vuets实战【ant-design-vue组件库引入】css样式穿透(…

RV1126笔记十三:实现RTMP多路拉流

若该文为原创文章,转载请注明原文出处。 一、介绍 通过RV1126实现RTMP的多路拉流,并在屏幕上显示出来,这里涉及到ffmpeg几个重要知识点,和RV1126如何在屏幕分屏显示。 二、流程图 流程和单路拉流类似,这里只是涉及拉取后的图像需要解码缩放,在合成分屏显示出来。 具体…

【完整】分类模型中类别不均衡问题解决

目录 1. 数据类别不均衡问题 2. 解决办法 过采样: 欠采样: ensemble 方法: 修改损失函数: 梯度调和机制: Dice Loss: 标签平滑: 3. 类别不均衡问题loss设计 4. 梯度调和机制GHM Gradi…

Graphviz安装向导

目录 1、首先在官网下载graphviz 2、安装。 3、测试 1、首先在官网下载graphviz 下载网址:Download | Graphviz 根据自身电脑位数选择合适的下载地址 2、安装。 打开第一步已经下载好的软件。点击下一步,在安装路径选择时可将安装路径修改为 E:\G…

JavaScript:栈的封装及十进制转二进制栈方法实现案例

栈的定义&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。 JavaScript中对栈的封装 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&qu…

微信HOOK 协议接口 实战开发篇 2.好友列表与二叉树

前言&#xff1a;由于篇幅所限&#xff0c;文章无法详细到每个步骤&#xff0c;仅能写出关键的HOOK思路 好友列表 好友和群列表在汇编代码中有固定的常量保存 如图示&#xff0c;找到常量&#xff0c;回车进入 入口地址结构为 其指针内部便是我们需要的数据 群列表 搜索Ch…

Linux中的进程状态

目录 一、冯诺伊曼体系结构​编辑 关于冯诺依曼&#xff0c;必须强调几点&#xff1a; 二、操作系统 1、概念 2、操作系统的作用 3、本质 4、总结 5、系统调用和库函数概念 三、进程 1、基本概念 2、描述进程 3、task_struct 4、查看进程 5、通过系统调用获取进程…

第19章 随机变量

第19章 随机变量 19.1随机变量示例 定义19.1.1&#xff1a;概率空间上的随机变量R是域等于样本空间的全函数。 R的陪域可以是任何东西&#xff0c;但通常是实数的一个子集。 例&#xff1a; 例如&#xff0c;假设我们抛三个独立的、公平的硬币。令C表示正面朝上的次数。如…

js中的JSON的简单用法

目录 1.JSON说明 2.JSON.stringify 3.JSON.parse 4.示例 1.JSON说明 当数据在浏览器与服务器之间进行交换时&#xff0c;这些数据只能是文本&#xff0c;JSON 属于文本并且我们能够把任何 JavaScript 对象转换为 JSON&#xff0c;然后将 JSON 发送到服务器。我们也能把从服…

最强docker部署模板

00.背景 最近学校让一个小组做一个web项目最后部署到linux服务器上&#xff0c;项目本身并不难就是简单的增删改查&#xff0c;但是我想借着这个机会写一个docker部署的模板&#xff0c;方便自己以后用&#xff0c;也希望可以帮助到大家。 01.docker简介 docker可以快捷 轻量…