FC协议读书笔记1、光纤通道的英文拼写是FibreChannel;2、FC的链路介质可以是光纤、双绞线或同轴电缆;3、FC系统中设备的连接有三种拓扑方式:点对点方式(PointtoPoint)、交换方式(Fabric)、仲裁环方式(ArbitratedLoop);4、FC协议栈模型可以用下图来表示:FC-0:物理层,定制了不同介质,传输距离,信号机制标准,也定义了光纤和铜线接口以及电缆指标FC-1:定义编码和解码的标准FC-2:定义了帧、流控制、和服务质量等FC-3:定义了常用服务,如数据加密和压缩FC-4:协议映射层,定义了FC底层协议与高层协议之间的映射,SCSI协议的映射是通过FCP来完成的5、WWN是一个64位的地址。WWN对于FC设备就像Ethernet的MAC地址一样,它们是由电器和电子工程师协会(IEEE)标准委员会指定给制造商,在制造时被直接内置到设备中去的。对于光纤交换机,我们使用NodeWWN来标示交换机,它是唯一的;对于交换机的端口,我们使用PortWWN来标示交换机的端口。所以一个交换机有一个NodeWWN和多个PortWWN。6、每个端口有它独有的24位的地址。用这种24位地址方案,我们得到了一个较小的帧头,这能加速路由的处理。在基于交换的光纤环境中,交换机它本身负责分配和维持端口地址。当含有某WWN的装置进入在某一个特定的端口上登录到交换机时,交换机将会分配端口的地址到那一个端口,而且交换机也将会维护那个端口地址和在那个端口上的设备的WWN地址之间的关联。交换机的这一个功能是使用名字服务器(NAMESERVER)来实现的。7、一个24个位的端口地址由三个部份所组成:Domain:交换机本身的地址。一个字节最多允许256个可能的地址。因为有一些地址被保留(例如广播地址等),实际上只有239个地址可用。Area:它提供256个地址。用于一个交换机的一组端口,而不能跨交换机。Port:地址的最后部份提供256个地址,用于识别相连的N_Port和NL_Port。可用的地址数目:DomainxAreaxPorts=239x256x256=15,663,104个地址可以用。二、FC-0层三、FC-1层四、FC-2层1、光纤通道的数据单元叫做帧。一个光纤通道帧最大是2148字节。光纤通道封装帧头负载最多能有537个传输字(2112个字节),数据帧格式如下图所示。帧内容域的数据长度是4字节的整数倍,当长度不足4字节的整数倍时将采用向内容域中填充1-3个字节,从而使其长度达到4字节的整数倍。内容域中字段描述如下图所示:帧数据段中的可选报头是提供给FC-4层使用的一个光纤通道字是4字节。在2148字节容量下,最多允许537字节。帧头的组成部分,以及可选部分,列示如下:SOF(1字):帧开始.帧头(24字节):帧头决定使用何种协议,以及源和目的地址。可选ESP帧头(8字节):提供编码;包括SPI和ESP序列号FC-2的帧格式图4-3帧内容可选网络帧头(16字节):这样你可以将FC-SAN连接到非FC网络可选关联帧头(32字节):不是光纤通道协议使用的,但可用于确定节点内的流程可选设备帧头(最多64字节):不是光纤通道协议使用的,用于特定应用程序载荷:数据,最多可达2048字节可选填写字节(可变):用于保证数据载荷的大小不超过字节界限可选ESP尾(可变):包含ESP检验值CRC(4字节):一个帧头CRC(循环冗余校验)和光纤通道数据字段帧结束(4字节):帧结束,并且表示是否是序列的最后一位帧头字段的主要作用是唯一的标识帧。每个帧是由称为帧ID值的(S_ID,D_ID,OX_ID,RX_ID,SEQ_ID和SEQ_CNT)值来唯一地标识。图2.光纤通道帧头路由控制(1字节):起到归类帧的作用,包括两个四位的子字段,即:路由子字段和信息子字段,路由控制字段R_CTL类别码如下表所示R_CTL类别码路由帧类型0设备数据帧2扩展链路服务3FC-4链路数据4视频数据5扩展头8基本链路服务c链路控制帧f扩展路由其他保留目的标识符(3字节):目的地光纤通道地址;类专用控制/优先级(1字节):用于与服务类型有关的帧处理。这个字段只在第1类和第4类帧中才有意义;源点标识符(3字节):来源地节点的光纤通道地址类型(1字节):该字段和R_CTL字段共同标识出帧的具体类型。首先通过R_CTL字段标识出该帧是数据帧还是链路控制帧,再通过该字段进一步标识出帧的类型。例如当R_CTL=0xh,TYPE=0Ah则表示该帧为承载SCSI协议的数据帧;帧控制(3字节):控制帧处理的重要字段,对于不同的服务类型来说,相关的控制位有不同的值,同时控制字段的有效性也不同。F_CTL各字段的详细描述如下表所示:F_CTL格式控制字段位描述交换上下文230交换发起端1交换响应端序列上下文220序列发起端1序列响应端第一个序列210交换的其它序列1交换的第一个序列最后一个序列200交换的其它序列1交换的最后一个序列结束序列190序列的其它数据帧1序列的最后一个数据帧结束连接(Class1或Class6)180连接激活1连接挂起结束(Class1或Class6中有效,在其它类型中忽略)CS_CTL/优先级170字1的31~24位表示CS_CTL1字1的31~24位表示优先级序列Initiative160保持序列Initiative1传输序列Initiative废弃15废弃14ACK形式(Class1,Class2,Class6有效)13-1200b不需要额外提供01b需要Ack_110b保留11b需要Ack_0数据压缩(废弃)11数据加密(废弃)10序列重传(Class1,Class6有效)90初始序列重传1序列重传单向传输(Class1,Class6有效)80双向传输1单向传输连续序列条件(当结束序列=1,序列Initiative=0时有效)7~600b无信息01b实时序列10b快速序列11b延迟序列终止序列条件5~4接收端响应帧00b连续序列01b异常终止序列,按异常中止处理10b停止序列11b实时序列重传请求数据帧00b异常中止,丢弃多个序列01b异常中止,丢弃一个序列02b无限缓存处理策略11b丢弃多个序列,立即重传相对偏移30一些帧定义的参数字段1参数字段,相对偏移交换重组2交换重组保留填充字节1~0净荷结束,不满4字节整数倍,填充00b填充0个字节01b填充1个字节10b填充2个字节11b填充3个字节序列ID(1字节):序列号,由序列发起端分配;数据字段控制(1字节):表示是否有可选头部,以及其类型、大小。数据字段中定义的可选报头是:网络报头(NetworkHeader)、关联报头(AssociationHeader)和设备报头(DeviceHeader)。对应位与所定义的附加报头如下表所示。附加报头字段对应位Bit(s)可选报头可应用范围23保留所有帧220=无ESP_Header和ESP_Trailer1=ESP_Header和ESP_Trailer所有帧210=无Network_Header1=Network_Header设备数据和视频数据帧200=无Association_Header1=Association_Header设备数据和视频数据帧19-18保留所有帧17-1600=无Device_Header01=16ByteDevice_Header10=32ByteDevice_Header11=64ByteDevice_Header设备数据和视频数据帧序列数(2字节):在一个序列中所传输的帧的数量;发送端交换ID(2字节):由发送端进行指定,是除了FFFFh以外的值回复端交换ID(2字节):由目标节点所指定参数(4字节):此字段与帧类型有关。对链路控制帧而言,参数字段给出链路控制帧的特定类型。对数据帧而言,参数字段包含相对偏转值。这规定从ULP缓冲区与ULP基础地址的偏移。2、FC-2层定义了4种数据传输单位:帧、帧序列、帧交换和数据包。帧序列:表示一个上层协议数据单元,当上层协议的数据单元长度大于光纤通道数据帧负载的最大长度2112个字节时,则需要被分割成多个数据帧。序列是从一个节点端口向另外一个节点端口单向发送的一个或多个相关帧,每个帧都根据序列总数(SEQ-CNT)有一个在整个序列中唯一的序列标识(SEQ-ID);帧交换:表示上层协议的一个操作。一个帧交换内只能有一个帧序列处于活动状态。交换是由一个或多个用作两个节点端口之间单一操作的非并发序列组成的.交换可以是单向的也可是双向的。不同交换之间可以有多个序列被同时激活;数据包:由一个或若干个帧交换组成。3、所有命令都以专用字符K28.5作为开始。在FC-2层有帧定界符、原始信号、原始序列三种主要的命令。帧定界符(FrameDelimiters)包括帧开始(SOF)和帧结束(EOF)命令集。例如:典型的SOF命令为K28.5D2l.5D23.0D23.0、EOF命令为K28.5D21.4D21.6D21.6。原始信号(PrimitiveSignals)包括空闲{Idle)和接收器准备(ReceiverReady,R-RDY)命令集。当一个可操作的节点端口准备好发送或接收数据时,一个表示空闲命令的原始信号会被发送;当接口缓冲区准备好接收数据帧时,一个表示接收器准备的原始信号会被发送。原始序列(PrimitiveSequence)是一组被连续地重复发送的命令集,用于表示节点端口特定的状态或端口逻辑状态。当一个原始序列被节点端口接收或识别,节点端口回复个相应的原始序列或空闲命令。识别一个原始序列需要连续地检测3个相同命令集的实例。典型的原始序列有FC-l层的OLS、NOS、LR、LRR状态命令。4、FC提供不同的服务以满足不同的数据传输要求。FC一共定义了6种服务类型,基于FC的SCSI协议采用的是类型3的服务。用户可根据应用的传输特性,如:数据包的长度,传输持续时间等,选择相应的服务:(1)服务类型I(ClassI):面向连接,按序发送,有确认,高带宽、高吞吐量;接收端对每一个接收到的正确数据帧发一个确认帧给发送端。对不正确或丢失的数据帧,接收端发一个否认帧给发送端,发送端会重发。在服务类型I中数据帧是依照原始顺序被发送到目的节点端口的。下图描述了类型I服务的处理流程。发起端接收端Fabric数据帧数据帧数据帧R_ReadyACKACKACKACK图4-5类型I服务的处理流程(2)服务类型Ⅱ(ClassⅡ):无连接,无序,有确认;服务类型Ⅱ允许一个或多个通道的带宽被多个源的多个数据帧所共享。交换拓扑网可能不保证数据帧的传送顺序。如果数据帧因为拥塞而不能被适当地传送,接收端口会返回一个繁忙信号帧或拒绝信号帧给发送端,数据帧将被重新发送。类型Ⅱ服务中,数据发送端和接收端没有专用的通道,数据可能经过不同速度的中间连接,中间节点可能需要缓存来保存来不及发给下一个节点的数据。下图描述了类型Ⅱ服务的处理流程。发起端接收端Fabric数据帧数据帧R_ReadyACKACKACK数据帧图4-6类型Ⅱ服务的处理流程(3)服务类型Ⅲ(ClassⅢ):无连接,无确认,用于实时传输;因为不需要发送确认消息,所以可以提供更快速地传输。服务类型Ⅲ不关心数据的错误,由更高层负责进行错误回复和重排失序后的数据传输。下图描述了类型Ⅲ服务的处理流程。发起端接收端Fabric数据帧数据帧数据帧R_Ready图4-7类型Ⅲ服务的处理流程(4)服务类型Ⅳ(ClassⅣ):面向连接,部分带宽,有序;类型Ⅰ服务中,两个N端口的全部通信带宽都用于类型Ⅰ的服务。而建立类型4服务时,N端口可以只用一部分带宽建立与另一N端口的专用通信通道。相对于两个N端口之间建立一个虚拟线路(virtualcircuit)。实际上是两个单向的虚拟线路,两个方向可能有不同的通信带宽。一个N端口可与多个N端口间建立多个类型4的服务。(5)服务类型Ⅴ(ClassⅤ)的服务在光纤通道标准中还没有完全定义好;(6)服务类型Ⅵ(ClassⅥ):提供多播的功