FC 网络分类
更多FC总线相关:http://www.bytekits.com/tjfw/fc/fc-net-layer.html
FC-AL:如图所示,该拓扑类似于以太网共享总线的拓扑,所有设备都连接在一个仲裁环中,首位相接,一个环路最多能接入128个节点,数据是按照一个方向被一跳一跳传输的,同一时间只能有一个发送者。一旦中间一个设备发送故障,将实现“旁路功能”,自动将接口短路,从而使得整个环路将整个故障设备忽略掉。不影响其他设备正常工作。
Fabric:如右下图所示,该拓扑类似于以太网交换机,Fabric的意思为“网状网络”,表明这种拓扑其实是一个网状交换矩阵,相对于仲裁环,交换矩阵的转发效率大大提高了,连入这个矩阵的所有节点之间都可以同时进行点对点的通信,它的交换带宽是接口带宽的总和,而仲裁环不管接口有多少,带宽都是恒定的。
FC 网络层编址
既然定义了两套编制体系:WWPN和Fabric ID,那么一定要有映射机制,就像ARP协议一样,FC协议中的地址映射步骤如下:
1.注册:一个接口连接到FC网络中时,如果是Fabric架构,那么这个接口会发起一个注册到Fabric网络的动作,向目的地址FFFFFE发送一个登录帧,称为FLOGIN。
2.映射:交换机收到目的地址为FFFFFE的帧之后,会动态的给这个接口分配一个24位的Fabric ID,并记录这个接口对应的WWPN,做好映射。
3.发送:此后这个接口发出的所有帧都不会携带WWPN地址,而是携带其被分配的Fabric ID作为源地址。
4.仲裁环:当连接到仲裁环网络中时,所有节点会选出一个临时节点(WWPN号最小者胜出),然后由这个节点发送一系列的初始化帧,给每个节点分配环路ID
WWN,WWNN和WWPN的概念?
下面是上述三个缩写的英文全称:
WWN: world wide number 是FC硬件的全球唯一标示
WWPN: world wide port number 是指端口号
WWNN: world wide node number 是指节点号在主机上的HBA卡,光纤交换机和FC存储上都有这些唯一标示。如果是光纤交换机的话wwn和wwnn是一样的,而wwpn是指每个光纤端口。如果是HBA卡的话,若是只有一个端口则三者可能一样,若是有多个端口则和交换机差不多。
WWN是HBA卡用的编号,每一个光纤通道设备都有一个唯一的标识,称为WWN(world wide name),由IEEE负责分配。在一个SAN环境中,如果有多台主机使用磁盘阵列时,通过WWN号来确定哪台主机正在使用指定的LUN(或者说是逻辑驱动器),被使用的LUN其他主机将无法使用。
WWN概念包含WWPN、WWNN。一个不可拆分的独立的设备有WWNN,一个端口有WWPN。比如一台SAN交换机,不可拆分,有一个WWNN,但它有一堆端口,每个端口有一个WWPN。一块多口光纤HBA,卡本身有一个WWNN,每个端口有一个WWPN,单口的HBA也是,不过只有一个WWNN和一个WWPN。但主机就没有WWNN,因为卡和主机是可以分离的,单纯一个主机本身并不一定是SAN环境中的设备。
有WWNN的好处是:即使不去看连线,也可以清楚地知道,哪些端口是在一个物理设备上
一个WWN可以包含很多个WWPN,这就是经常看到的一个FC交换机中有很多的端口,每个端口都对应一个WWPN。
有了这些基本概念,对于SAN网络的provisioning, 故障诊断等非常有帮助。
FC 网络层寻址
因为从一开始FC就是被设计给专用、高速、高效的网络使用的,为了避免人为操作失误,FC网络中所有操作都不需要人工介入,设备将自动分配和管理各种地址(WWPN)、自动运行和设置路由协议(SPF最短路径优先)。
FC交换机接口所连接的设备在登录到FC网络时都会向一个指定的ID(这个ID只是运行在交换机上的一个名称服务程序)发送注册帧,设备完成注册之后,名称服务程序便会将网络上存在的其他节点信息告诉这个接口上所连接的设备。
寻址的安全性问题:
- 软ZONE:让名称服务器只告诉某个设备特定的节点。例如:网络上存在A、B、C三个节点,可以让名称服务只向A通告B节点,而隐藏C节点,这样A看不到C。但如果A知道C的ID,也可以直接去访问d,这就是软ZONE。
- 硬ZONE:也可以将 A 和 B 划入一个ZONE中,该方式为底层硬件隔离,这样即使知道ID也无法通信了。
- LUN Masking:SCSI指令集中有一个指令叫做Report LUN,作用是发起端发出这条指令,目标端收到后,就要向发起端报告自己的LUN信息。根据这个原理,我们可以让磁盘控制器根据发起端的WWPN地址,提供相应的LUN给它。例如:针对主机A,控制器就报告LUN1、LUN2,主机B,就报告LUN3,如果某个主机强行访问不属于它的LUN,盘阵控制器便会拒绝这个请求。还可以配置选择性的将某个LUN分配到盘阵的指定前端端口上。