从零学习 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传输的例子:
- 当TCA端口将Packet发送至链路时,需要设置:SLID、DLID、SGID、DGID;
- 根据DLID,前两个交换机中的转发表将包中继到该子网内的目的端口;
- 当到达第一个路由器上的目标端口时,路由器入口端口将解码DLID并检查它是否是这个子网内的包的目标,路由器会执行以下操作:
- 如果目标子网不在路由器端口,那么需要查表得到,前往目标子网得路径需要经过得端口,并对packet更新LID;
- 如果子网匹配成功,路由表会继续查找LID;
- 在packet从选择的端口发送之前,还需要对SLID和DLID进行相应修改,甚至可以修改SL和VL项;重新计算VCRC等
- 后续重复上述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位的组播作用域值,用于限制组播操作的作用域;
多播地址的使用规则如下:
- 一个CA或路由器可以加入一个或多个多播组;
- 多播GID不会出现在packet的SGID项中;
- 多播GID ff02:0:0:0:0:0:0:0:1是链路本地多播GID,路由器不将具有该DGID的报文路由到本地子网外。该GID用作DGID时,用与向子网中所有具有多播功能的CA广播;
- 此外,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干货分享!