作为第一个成功的千兆位串行传输技术,当前光纤通道已成为块I/O 应用最适合的体系结构。光纤通道满足存储网络对传输技术的下列需求:
(1)高速长距离的串行传输
(2)较低的传输误码率
(3)较低的数据传输延迟
(4)传输协议可在主机总线适配卡上以硬件方式实现,从而减少对服务器CPU的占用。
一. 光纤通道层次模型
光纤通道是一种基于标准的网络结构。它的标准定义了物理层的特征、传输控制方法以及与TCP/IP、SCSI-3、HiPPI(HighPerformanceParallelInterface:高性能并行接口)和其他一些协议的上层接口。光纤通道是一种千兆位传输技术,目前的实现支持最高可达10 Gbps的传输速率。
光纤通道标准定义了一个通过网络移动数据的多层结构。它的协议被划分为5个层次,从FC-0到FC-4。最顶层FC-4为光纤通道提供与上层应用的接口,它定义了如何把应用协议映射到下面的光纤通道网络。例如,串行SCSI必须将光纤通道设备映射为可被操作系统访问的逻辑设备.。对于主机总线适配器,这种功能一般要由厂商提供的设备驱动器程序来实现。FC-3定义公共服务,例如多路复用和地址绑定功能。FC-2定义如何把上层应用传下来的数据块切分成帧,也包含对各种服务类别的定义和流量控制机制。最下面的两层FC-1和FC-0则致力于网络数据传输。FC-1提供数据编码和解码的工具,还定义了访问介质的命令结构。FC-0为各种介质类型、所允许的长度和物理信号建立了标准。在光纤通道协议栈旁边列出的链路服务和交换网服务用于对光纤通道网络的运行进行维护和管理工作。
上述5个层次还可以进一步归纳成以下两个部分:
(1)物理和信令层:人们通常把FC-0、FC-1和FC-2合在一起称作光纤通道物理和信令层。
(2)高层:光纤通道的高层包括FC-3和FC-4。
光纤通道的层次基本上相当于OSI参考模型的较低层,并且可以看成是链路层的网络。光纤通道呈现为单个不可分割的网络,并在整个网络中使用统一的地址空间。虽然在理论上这个地址空间可以非常大,在单个网络中可以有千万个地址,但实际上光纤通道通常在一个SAN中只支持数十台设备,或者在某些大型数据中心应用中支持上百台设备。
二. 物理结构
光纤通道既支持光纤介质,也支持铜缆介质。由于光纤通路对噪音不敏感,用它来做传输介质是最好的,但是铜介质也得到了许多的使用,尤其是对小型光纤通道磁盘驱动器的连接。
人们通常用模来区分光纤的类型。多模光纤使用短波激光,其纤芯直径为50μm或62.5μm,包层直径为125μm。其中,纤芯为光通路,包层用来把光线反射到纤芯上。由于短波激光流是由数百种模(即所传输的光波的波长)组成的,它们在光纤内以不同的角度发生全反射,因此称为多模。光的散射效应限制了原始信号所能达到的总长度。多模光纤在62.5μm/125μm规格下支持l75m的长度,在50μm/125μm规格下支持500m的长度。
当光纤直径减小时,光在光纤内被反射的角度也会加大。当把纤芯直径降低到波长的量级时,只有单个角度的轴向光束能通过。此时光纤如同一个波导,称为单模光纤。单模光纤由9μm直径的纤芯和125μm直径的包层组成,它用于承载长波激光。单模光纤支持的距离更长,目前在千兆位速率下可以达到10km:
光纤通道标准定义了三种不同的拓扑:点到点、仲裁环和交换网。点到点结构定义了在两个设备之间的一条双向连接,不能够支持三个或更多的设备。这种拓扑允许在服务器和存储设各之间建立专用的点到点的连接,它们首先通过登录建立一个初始连接,然后就可以在长距离上使用光纤通道的全带宽工作。仲裁环定义了一个单向环,允许两台以上的设备通过一个共享的带宽进行通信和交流,但在任一时刻仅仅有两台设备可以互相交换数据。最后,交换网结构通过链路层交换提供多路的点到点连接,它实际上是定义了一个网络,其中的多个设备可以同时使用完全带宽交换数据。交换网需要把一个或多个光纤通道交换机连接在一起,在端点设备之间形成一个控制中心。而且,标准还允许把一个或多个令牌环连接到一个交换网结构。
在所有的拓扑结构中,设备(包括服务器、存储设备和网络连接设备)都必须配置一个或多个光纤通道端口。在服务器上,端口一般借助主机总线适配器实现。一个端口总是由两个通道构成:一个是输入通道,另一个是输出通道。在两个端口之间的连接称作链路。在点到点和交换网拓扑中,链路总是双向的。在交换网的情况下,链路所涉及的两个端口的输出通道和输入通道通过一个交叉装置连接在一起,使得每一个输出通道都连接到一个输入通道。在另一方面,仲裁环拓扑的链路是单向的,每个输出通道都连接到下一个端口的输入通道,直到圆周闭合为止。仲裁环的线缆连接可以借助一个集线器简化。在这种被人们称作星形环的配置中,端点设备双向连接到集线器,在集线器内部的线缆连接保证在仲裁环内部维持单向的数据流。
交换网和仲裁环拓扑使用不兼容的协议。可以根据不同的功能区分下列端口类型:
1. N端口(结点端口): 起初,光纤通道通信是围绕N端口和F端口开发的,这里的N表示Node(结点),F表示Fabric(交换网)。N端口描述一个端口作为端点设备(服务器,存储设备),也称结点,加入交换网拓扑或点到点拓扑的能力。
2. F端口(交换端口):F端口是N端口在光纤通道交换机中的对接点。F端口知道怎样把一个N端口发送给它的帧通过光纤通道网络传递给所希望的端点设备。
3. L端口(环端口):仲裁环使用与交换网不同的协议进行数据交换。这里的L表示Loop(环)。L端口描述一个端口作为一个端点设备(服务器,存储设备)加入仲裁环拓扑的能力。
4. NL端口(结点和环端口):NL端口同时具有N端口和L端口的能力。一个NL端口既可以连到一个交换网,也可以连到一个仲裁环。
5. FL端口(交换网环端口):交换机的FL端口允许把一个交换网连接到一个仲裁环。FL、NL和L端口都可以用来构成仲裁环。
6. E端口(扩展端口):两个光纤通道交换机通过E端口连接在一起。这里的E表示Expansion(扩展)。E端口使得连接到两个不同交换机的端点设备可以互相传送数据。光纤通道交换机通过E端口在整个光纤通道网络上中转信息。
7. G端口(通用端口):现代光纤通道交换机可以自动地配置它们的端口。这样的端口就称作G端口。这里的G表示Generic(通用)。例如,如果一个光纤通道交换机通过一个G端口连接到另一个光纤通道交换机,那么G端口就把它自己配置成一个E端口。
8. B端口(桥接端口):B端口通过ATM或SONET/SDH把两个光纤通道交换机连接在一起。这里的B表示“Bridge(桥接器)”。这样,相隔很长距离的光通道SAN可以使用经典的广域网技术连接在一起。
9. L端口:较多地用于早期端点设备。现代端点设备普遍配置NL端口代替L端口。
三. FC-0 物理接口和介质
FC-0定义系统中的物理链路,包括线缆、接插件和光电参数,指定使用什么样的物理信号传输二进制数位0和1。在SCSI总线中,每一比特都有自己的数据线,并且另有控制线。与此不同的是,光纤通道通过单条线路顺序地发送二进制数位。
并行的SCSI总线存在的问题是在不同的数据线上有不同的传输时间,从而限制了所能达到的最大数据速率;因此,光纤通道采用串行传输,这就意味着即使在很长的距离上也可以取得高的传输速率。现在市场上可提供的光纤通道产品的速率可高达10 Gbps。当谈到传输速率时,应该指出,在点到点和交换网拓扑中传输是双向的,即全双工的,因此即使对于广泛使用的lGbps传输速率,也可取得200MBps的数据率。
光纤通道定义了多种铜缆和光缆类型,不过比较高的速率仅支持光纤。光纤通道也为铜缆和光缆定义了多个接插件规格。单模光纤使用单模SC插头,多模光纤使用多模SC插头,同轴电缆使用同轴插头,屏蔽双绞线使用STP9针插头。在同轴电缆插头中,BNC头用于发送,TNC头用于接收。9针插头(DB9)用于连接屏蔽双绞线,其中只使用4个针,1针和6针用于发送,5针和9针用于接收,其余的针不用。
表5-1光纤通道定义的线缆类型
介质 |
100MBPS |
20OMBps |
400MBps |
1GBps(串行) |
1GBps(4路) |
1GBps (CWDW) |
铜缆柜内 |
24m |
- |
- |
- |
- |
- |
铜缆柜间 |
59m |
- |
- |
- |
- |
- |
光纤62.5μm |
300m |
90m |
50m |
33m |
75m |
290m |
光纤50μm |
500m |
300m |
175m |
82m |
150m |
290m |
光纤50μm (高带宽) |
- |
- |
- |
300m |
300m |
550m |
光纤9μm |
10000m |
2000m |
2000m |
10000m |
- |
10000m |
典型的铜缆连接是双线的,分为机柜内和机柜间两种。前者所有的连接都在一个单独的机柜内部,例如一个l9in的机柜,使用非平衡方式缆接,距离最长可达24m。后者需要驱动信号较长的距离,使用平衡方式缆接,距离最长可达59m。
与铜缆相比,光缆比较昂贵,然而它们具有下列优越性:
(1) 可以达到更长的距离;
(2) 对电磁干扰不敏感;
(3) 无电磁辐射;
(4) 在设备之间天电连接:
(5) 无交叉干扰的问题。
光缆及其接插件也有多种不同的类型。用于长距离传输的光缆比用于短距离的光缆更为昂贵。
实现lGBps的光纤通道将需要在光缆方面有一些革新。首先,要采用一种新的线缆,即50μm波长的高带宽光缆,使用该种光缆可以跨越比常规的50μm波长光缆更长的距离。第二,要能够复用在4条连接上的数据流。这可能首先要把数据分发到4对光纤(4条线路)上。另一种可能的做法是用4个不同波长的信号代替4条物理线路,因此使用一对光纤就足够了。工业界最终会采用哪一种方案来实现lGBps的光纤通道还有待于今后的技术发展。
对于所有的介质,光纤通道都要求误码率达到每传递10^12比特不超过1比特错。这就意味着对于一条1000 Mbps的连接,在全负荷情况下平均每16.6min最多可以发生1位错。高层协议的差错识别和控制机制都针对这样的误码率进行优化。因此,在安装光纤通道网络时,建议适当地铺设光缆,使得从端点设备到端点设备的连接也尽可能地取得不大于10^-12的位错率,其中包括在它们之间所有的部件,例如中继器和交换机。
四. FC-1 传输协议
FC-1定义了数据在通过光纤通道的线缆传送之前怎样对它编码。FC-1还描述了管理光纤通道连接(链路控制协议)所需要的一些传送字,即有序集。
在所有的数字传输技术中,发送器和接收器都必须同步它们的时钟脉冲速度。在并行总线中,总线时钟通过附加的线路传送。而在光纤通道使用的串行传输中,信号仅通过一条数据线传送。这就意味着,接收器必须从数据流中再生传输时钟。
接收方仅能够在中间有信号跳变的点上同步速率。在简单的二进制编码中,仅当数位从0变到1或从1变到0时才会产生跳变。在曼彻斯特编码中,在每一个传送位的中间都有一个信号跳变。因此,曼彻斯特编码对于传送的每一比特都产生两个物理信号。它所需要的传送速率是二进制编码的两倍。由于这个原因,光纤通道使用二进制编码,因为在给定信号速率的情况下,它可以传送比曼彻斯特编码更多的数位。
使用这种方法的问题是到达接收方的信号单元的长度并不总是相同的。接收方所得到的信号有时候长一些,有时候短一些。这种被称作抖动的现象可能导致接收方丢失对接收信号的同步。例如,如果发送方发送10个连续的0,那么接收方可能确定不了这是9个、10个还是11个连续的0。
由此可以看出,如果要使用二进制编码,那么就必须保证数据流能够产生足够多的跳变,接收方才不会失去对每个数位的正确判别和接收。所谓的8b/lOb编码正是采用这样的介于曼彻斯特编码和二进制编码之间的一种折中方案。
8b/l0b编码把一个8位字节转换成一个10位字符后再在通信介质上传送。对于光纤通道,这就意味着100 MBps的数据传送将需要lGbps的传输速度。需要指出的是,千兆位以太网也使用8b/l0 b编码。
把8位字节扩展成10位的传送字符具有下列优点:
(1) 在8b/l0b编码中,对于所有可能的10位字符,仅选用由最多只包含5个连续的1或5个连续的0的位序列所组成的字符。因此最长经过5个信号单元会有一个信号跳变,这样就可以保证接收方时钟的同步。
(2) 使用8b/10b编码产生的位序列具有均匀的0和1的分布。这样做的好处是在处理8b/l0b编码位序列的硬件时仅产生小的直流电流,从而使得光纤通道硬件部件的实现比较简单和廉价。
(3) 还有一些不表示8位数据字节的10位字符,这些字符可用于光纤通道链路的管理。
8b/l0b编码把一个8位字节映射成一个10位的传输字符,再交给FC-0层去传输。但现在大部分计算机基本的数据处理单元都是包含4个字节的字,因此FC-1层定义了传输字。
光纤通道结合4个10位的传输字符形成一个40位的传输字。光纤通道标准区分两种类型的传输字:数据和有序集。它们之间的区别在于第一个字节。数据传输字的第一个字节是数据字节,有序集传输字的第一个字节是特殊传输字符K28.5。两种传输字的其余3个字节则都是数据字节。
数据字仅可以出现在SOF(Start-of-Frame:帧起始)界标和EOF(End-of-Frame:帧结束)界标之间。有序集仅可以出现在EOF界标和SOF界标之间,而且SOF和EOF本身也是有序集。所有的有序集都有一个共同的特征,那就是它们都以一个称作K28.5的字符开头。K28.5字符包括一个特别的位序列,它不会出现在数据流的其他位置。因此,光纤通道端口的输入通常是在初始化光纤通道的时候,或者在一条链路丢失同步之前,可以使用K28.5字符把连续的输入位流划分成40位的传输字。
IBM公司首先开发出了8b/l0b编码算法。在1024种可能传输的10b信号中,8b/l0b的映射只需要256种。为了充分利用10位的编码信号,在FC-1的编码中,编码前的一个8位字节可以编码成两类不同的10位信号。这两类10位的编码信号对应同一个8位字节,但分别代表数据字节和控制字节。也就是说,同一个8位字节,可能代表两种信息,如果它是数据字节,就将其编码成10比特的数据传输字节;如果它是控制字节,就将其编码成另一个不同的10位控制传输字节。不过,在所有的控制传输字审中,光纤通道只用了其中的一个作为特殊字符,即K28.5。
采用8b/l0b算法转换后的每一个10位都不会包含超过6个1或6个0的位串,并且其中一半都包含同样数日的0和1。那些包含的1比0多的10位字符具有正不均衡性,包含的0比1多的10位字符具有负不均衡性,包含的0和1同样多的10位字符具有中性不均衡性。
在转换256种可能的数据字节时,8b/l0b机制仅允许每个字符最多包含6个相同位,且不能有超过4个相同的数据位连续出现。例如,用十六进制表示的字节“FF”通过8b/l0b编码后就变成1010110001或0101001110。这两个编码结果都是中性不均衡的,并且编码序列中连续的相同数据位不超过4个。
既然8位的数据字节可以转换成两个10位的编码位串,那么编码器如何决定采用哪一个编码结果呢?8b/l0b编码器是通过监测前一个字符的不均衡性来解决这一问题的。如果前一个发出的是正不均衡性的字符,那么下一个流出的就是负不均衡性。通过监测前后连续不均衡性特征,编码器可以保证在整个串行比特流中,让1和0保持平衡。
8b/l0b表示法在开始编码之前,先把原始数据表示成带小数点的十进制数。例如,十六进制表示的D7的比特串是11010111。8b/l0b表示法将这个位串分成前3位110(十进制是6)和后5位10111(十进制是23)两部分。在编码器的内部操作中,这两个单元将分别在较小的3b/4b和5b/6b模块中得到处理,然后交换,产生10位的结果。最终,8b/l0b表示法把D7表示成D23.6。这种表示法比较直观的地方是其中的“D”是表示“数据”的意思。在K28.5字符中,K则表示该字符是一个“控制”字符。不同于D28.5字符。
K28.5在光纤通道中是唯一的具有5个连续相同数位的字符,所有其他的字符都只包含4个或更少的连续相同位。K28.5编码的这种特殊性使得它在传输的位流中容易被接收方识别。
有序集传输字可以作为控制信号,因为它的第一个字符是特殊字符,不会与数据字混淆。有序集传输字可以起以下几种控制作用:
(1) 数据帧分界符。数据帧有起始分界符和结束分界符,而起始分界符和结束分界符都是有序集传输字。
(2) 原语信号。FC-1层有两种原语信号,即缓冲区的流控制原语信号和空闲字原语信号。为了保证发送和接收端的同步,光纤通道往往在没有信号传输时传输空闲字。
(3) 原语连续信号。连续3个相同的有序集传输字用于链路控制。
在光纤通道中,FC-1层的作用就是给FC-2层提供发送和接收传输字的功能。FC-2层只需要利用这个功能,而不需要了解FC-1层具体怎样实现发送和接收传输字的。这种分层结构的优点是可以实现模块化。当FC-1层的实现(软件或硬件)改变时,只要它提供给上层的功能不变,FC-2的上层就不需要改变。
使用有序集,FC-1定义了各种链路层协议,用于链路的初始化和链路管理。链路初始化是使用帧进行数据交换的必要前提。链路层协议的例子包括仲裁环的初始化和仲裁