四. 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/10 b编码产生的位序列具有均匀的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 定义了各种链路层协议,用于链路的初始化和链路管理。链路初始化是使用帧进行数据交换的必要前提。链路层协议的例子包括仲裁环的初始化和仲裁。
五. FC-2 成帧和信令协议
FC-2层利用FC-1层提供的发送和接收传输字的基本功能来执行更负责的功能,这些更能又能作为基本功能提供给更上层FC-3层。 FC-2指定独立于上层协议的数据传输机制。 它是自我配置的,支持点到点,仲裁环和交换网的环境。 FC-2确定通过光纤通道网络传输的单元(如一个文件)可以有多大。 它调节流控制,保证发送方仅以接收方可以处理的速度来发送数据,它还定义了适用于各种应用需求的服务类别。
5.1 交换,序列和帧
5.1.1 交换
FC-2的数据传送采用了一种3层结构。在顶层的交换定义了在两个端点设备之间的一条逻辑通信连接。例如,每个读写数据的进程都可以被分配一个属于它自己的交换。端点设备(应用服务器和存储设备)可以同时保持多个交换关系,甚至是在同样的端口之间。不同的交换有助于FC-2层把入口数据快速有效地投递给较高层协议(FC-3)的正确接收方。
5.1.2 序列
序列是从发送方向接收方传送的一个数据单元。同一时刻在一个交换内部只能有一个序列在传送。FC-2保证序列以与在发送方发送时同样的顺序投递给接收方。而且,仅当一个序列的所有的帧都到达接收方时,才会把该序列投递给下一个较高的协议层。作为例子,一个序列可以代表一个文件的写过程或者代表数据库的–个事务处理。
5.1.3 帧
要把数据从附接在光纤通道上的一个设备传送到另一个设备上,发送方上层协议传下来的数据块必须要组织成离散的报文,以便通过网络进行传输。在光纤通道的术语中,数据报文被称作帧。
光纤通道网络传送控制帧和数据帧。控制帧不包含有用数据,它们为诸如一个数据帧成功投递这样的事件传递信号。数据帧可传送多达2112字节的有用数据。比较大的序列必须划分成多个帧。
5.1.4 帧的组成
一个光纤通道帧由头、有用数据(载荷)和CRC检验等域构成。此外,帧被包装在帧起始(SOF:Start-of-Frame)界标和帧结束(EOF:End-of-Frame)界标之间。最后,在两个帧之间必须通过链路传送6个填充字。CRC检验过程识别所有的传输差错。
帧以一个有序集SOF分隔符开头。这个4字节的单字定义所使用的服务类别以及该帧是否是一个序列的起始帧。在SOF之后,24字节的帧头包含帧的目标地址、帧的源地址、序列ID、帧在序列内的编号以及交换ID等信息。
帧头之后是数据单元部分,它的长度可以从0字节到2112字节。光纤通道使用这种可变长的组帧方式来满足各种应用需求,并在帧的开销和有效载荷之间寻找一个合理的平衡。由于光纤通道帧的构成是建立在4字节的传输字的基础上的,当用户数据的总字节数不是4的整数倍时,就必须要用额外的填充字节来填充。
例如,有效载荷为509字节时,就需要3个额外的填充字节来进行正确的帧装配。帧中数据的完整性由32位的CRC(Cyclic Redundancy Check,循环冗余检验)来验证。在数据经过8b/l0b编码之前就进行CRC计算,并将其结果放到数据单元的后面。
在CRC 后面是一个帧尾有序集,用来通知接收方该帧已经结束。 一个帧具体采用什么样的EOF由两个因素决定: 一个是服务类型,另一个是该帧是否是一个序列的最后一个。
除了标准的24字节的帧头,某些需要扩展控制字段的应用还可以使用可选的帧头,但要保证整个帧的长度仍然控制在2148字节内。 由于可选的帧头占用最大长度被限制在2112字节的数据空间,因此对可选的帧头的使用减少了用户在帧内可传送的有效载荷。
错误纠正发生在序列级。 如果一个序列中有一个帧传输有错,那么整个序列都要重传。 在千兆位速率上,把丢失的个别帧重传并把放在正确位置上所需要的处理开销相比,重传整个序列更为有效。 当然,基础的协议层必须保证误码率不超过指定的10^-12值,才能保证纠错过程的有效性。
5.2 流控制
流控制保证发送方仅以接收方可以接受的速度发送数据。 光纤通道使用信用量方式实施流控制。 每个信用量都表示接收方接收光纤通道帧的能力。 如果接收方给了发送方一个等于4的信用量,那么发送方仅可以发送4个帧。 此后,发送方不可以发送更多的帧,直到它收到对发送的一些帧的确认应答为止。
FC-2 定义了两个不同的流控制机制: 端到端的流控制和链路流控制。 端到端的流控制在端点设备的主机总线适配卡上实现。 而链路流控制发生在每条物理连接上。 它是通过两个通信端口协议商缓冲区到缓冲区的信用量来取得的。 因此,链路控制也在光纤通道交换机上执行。
5.3 服务类型
在通信的设备之间,应用程序可能需要有不同类别的连接、带宽和传输保证。例如,向磁带备份数据时,要求有一个持续的专用的连接和全带宽的可用性;而在线事务处理所执行的是间歇性的操作可能不需要专用的带宽,但要对每次传输进行确认。
为了满足这种多样性的需求,光纤通道标准针对端到端的数据交换定义了6个不同的服务类别。
5.3.1 第1类服务
在两个设备(例如一个文件服务器和一个磁盘阵列)之间定义了一条专用连接,并带有对数据传输的确认。通信双方一旦建立起一条1类连接,就可以认为该连接是固定的,并全带宽可用,直到这条连接被拆除为止。由于1类连接在多数情况下都拒绝其他连接对它的会话干扰,因此不会发生在通信过程中掉线的情况。这种专用的连接同样保证了所有传输的帧都会按照它们发出的次序被接收方接收,这也就使得在FC-2层次上数据块重组的过程可以进行得很快。
1类服务给光纤通道交换增加了处理负担和资源消耗。交换机必须在进行通信的端口之间维持一条专用的恒定通道,并且不允许任何方式的干扰。因此,如果有多条连接经过一个交换机,就会很快阻塞该交换机对其他连接请求的响应。与电话交换机类似,光纤通道交换机也可以允许处于竞争状态的请求在忙端口处排队,一旦当前的1类连接终止,就可以让新的请求得到服务。这需要在交换机上配置相应的缓冲区和执行队列管理机制。
考虑到1类服务实施的复杂性和处理代价,光纤通道交换机厂商在它们的产品中一般都不支持1类服务。
5.3.2 第2类服务
不需要在对话双方之间建立专用的连接,但提供对传输的应答功能。2类服务的无连接特征允许交换机不必为具体的事务处理分配专用带宽,可以在资源许可的时候再传送被缓冲的帧。不过,网络拥塞或多路由传输可能会导致帧的丢失和乱序,重传和数据块的重组需要附加的处理开销。
2类服务通过对传送帧的应答来保证数据传输的完整性,适用于处理关键性任务的应用,也适合较小型的事务处理,这些事务的流量具有突发性。例如,对关系数据库间歇性的更新不需要专用的连接,但可能需要通过帧应答进行确认。
5.3.3 第3类服务
与2类一样,也是无连接的,但与2类不同的是,它没有对帧传送结果的报告信息。3类服务类似于传统网络中的数据报服务,如果发生传输差错,就需要依靠上层协议来恢复。3类服务为了降低开销并追求高性能,在一定程度上牺牲了可靠性。在一些构造良好的存储区域网中,可靠性不一定是关键的问题。例如,3类服务就广泛应用于仲裁环存储网络。’这可能是因为环拓扑为通信双方临时提供了专用连接的缘故。环的传输方式使得按顺序接收帧成为可能,同时环上低的误码率也可以满足对帧传输的可靠性要求。但在交换式拓扑结构中,重负荷或拥塞时交换机可能丢失3类帧。由于没有应答机制,因此出错时会在上层协议FC-4中触发一串更长的恢复动作。
当针对特定应用设计存储网络时,应该考虑3类服务在环网和交换网中使用的差别。一般来说,3类服务只适合在环网上应用,但是依据所需要的带宽,有些应用也可能适合使用环网和交换网的组合结构。
5.3.4 第4类服务
与1类服务类似,4类服务也是面向连接的,但它并不为通信双方分配专用的恒定带宽,而是给每条连接分配部分带宽和可能不同的QoS参数。在一对和多对通信者之间可以建立多条虚电路,为每条虚电路指定QoS参数时,需要优先保证对时延敏感的应用带宽需求,例如,让实时视频总能得到足够的带宽用于数据传输。
4类服务给交换机设计人员带来了巨大挑战,交换机必须维护并监测可能有的数百条虚电路,而且.每条虚电路都有自己的QoS参数。这种复杂性使得4类服务没有能够在光纤通道产品中普遍实现。
5.3.5 第5类服务
第5类服务称作等时服务,它的设计目的是用于没有缓冲区且当数据到达时需要立即投递的应用。该类服务尚未明确定义,因此没有被包括在光纤通道标准的文档中。
5.3.6 第6类服务
第6类服务提供多点传送,它是1类服务的一个变种。它为可靠多播提供专用连接,并带有确认应答。一个N端口可以请求到达一个或多个目的地的6类连接。在交换网中的一个多播服务器将建立这些连接,得到来自目的地端口的应答,并把它往回传给源发方。该类连接一旦建立了,就会得到交换网的维持和运行保证,直到发起方终止连接为止。
6类服务的设计目标是用于诸如音频和视频那样需要多播功能的应用,它的一个问题是反馈给数据发送方的应答所产生的流量会消耗大量的网络带宽,甚至会吞没整个网络。
与4类服务类似,6类服务也没有能够在实际流行的产品中得以实现。例如,当前的光纤通道交换机一般都申明只支持2类和3类服务。
5.3.7 F类服务
在光纤通道标准中,除了上面介绍的6个类别,还有一个特别的服务类,被称作F类,用于交换机到交换机之间的通信。与2类相似,F类是无连接传输,但要求得到对发送的确认应答或失败的消息。它主要用于在连接到交换网的交换机之间交换路由、名字服务和通告信息。
5.3.8 第2,3类服务异同
2类和 3类服务都是面向分组的数据报服务,不建立专用的连接,每个帧独立地通过光纤通道网络被路由到目的地。一个端口可以同时维持多条连接,因此,2 类和 3类服务可以共享带宽。
2类服务使用端到端的流控制和链路流控制。 在 2类服务中,接收方应答每个接收到的帧。这个应答既被用于端到端的流控制,也被用于对丢失帧的感知。在FC-2 中,接收不到应答意味着发生了传输错误,并立即通知高层协议。高层协议可以启动错误纠正过程。2类连接的用户通常需要帧以正确的顺序投递。
3类服务对传送帧不做应答。这就意味着,只有链路流控制,没有端到端的流控制。此外,高层协议必须自己检查是否有分组的丢失。当一个序列中有帧缺失时,FC-2层就不会向高层投递。因此,高层协议是通过预期的序列没有到达的事实感知帧的丢失。交换机在其缓冲区满时可能丢弃 2 类和 3 类帧。由于高层的超时值比较大,因此它们感知帧的丢失可能要比在 2 类服务中的协议实体花长得多的时间。