一、技术背景:
在前面的《深度分析数据中心之ETS(Enhanced Transmission Selection)技术》和《深度分析数据中心之PFC(Priority-based Flow Control)技术》两文中已经有详细的说明新的数据中心产生的背景在这里就不多介绍。简单的一句话介绍:就是将SAN网络,IP网络和高性能的Infiniband网络建设统一融合的数据中心以太网(Data Center Ethernet,DCE),能够大幅减少线缆和能耗,大大降低运维成本,是数据中心网络的发展趋势。数据中心以太网也称为融合增强型以太网(Converged Enhanced Ethernet,CEE)。要实现最弱的网络融合就需要对原有的以太网技术进行强化,这样IEEE定义了一系列标准,规范DCE/CEE对于传统以太网增强,主要包括:
(1)802.1Qbb Priority Flow Control(PFC):传统的以太网是整条链路进行流控的。802.1Qbb是基于优先级的流控标准。在一条物理链路上,分成了8个虚拟通道,每一个通道分配一个优先级。这样在一条链路上可以承载多种业务类型,包括FCoE和非FCoE的业务。当发生拥塞时,接收端可以在特定的优先级虚拟通道上发送XOFF和XON帧,抑制或者继续特定的业务,保证高优先级或者时延敏感的业务的传输。
(2)802.1Qaz Enhanced Transmision Selection(ETS):保证不同服务级别上的多种流量类型的质量。在DCE/CEE上的业务中,IPC是时延敏感的业务,SAN业务是对丢包敏感的业务,而IP业务是可以允许一定的丢包和时延。链路上的业务可以分为若干个优先级组(Priority Group,PG),并且定义每个PG的带宽属性。重要的业务,比如存储网络数据被赋予高优先级,保证带宽。低优先级业务只能在高优先级业务带宽不占用的情况下,才能使用分配带宽之外的额外带宽。
(3)Data Center Bridging eXchange Protocol(DCBX):这是IEEE Link Layer Discovery Protocol(LLDP)的扩展,可以在链路建立的时候交换两端设备的能力参数,比如是否支持PFC,以及802.1Qaz Priority Group。
(4)802.1Qau Quantized Congestion Notification(QCN):定义拥塞通告机制,当发现网络中存在拥塞时,通告数据发送源降低发送速率,从根本上解决网络拥塞;
本文将对Data Center Bridging eXchange Protocol(DCBX)协议进行分析,DCBX是由802.1Qaz定义的,有人可能会问上面不是说802.1Qaz定义了ETS?没错,802.1Qaz定义了两部分协议一个是ETS,另一个就是DCBX.
什么是DCBX?
数据中心桥接交换协议(DCBX)主要供IEEE数据中心桥接发现对等的配置,并在符合DCB要求的桥接之间交换配置信息,同时DCBX能够检测出桥接之间错误的配置信息或用于引导对端进行配置等。这个协议的主要功能是数据中心交换机引导服务器端的CNA卡(融合网络接口卡)配置DCB相应参数,这些参数包括ETS,PFC,APP(FCoE的cos值)。
DCBX利用了LLDP(Link Layer Discovery Protocol,链路层发现协议)来进行设备发现和能力交换。LLDP是单向协议,即它只与邻接的对端交换配置和管理信息。DCBX交换的配置信息封装在LLDP的Organizationally Specific TLVs(组织定义TLV)中,TLV中的OUI字段采用的是IEEE 802.1组织定义的OUI,即0x0080c2。
DCBX主要用于端到端的配置交换,从下图可以看出,在设备之间完成自协商之后,即开始数据中心桥接参数的交换。
二、技术原理:
1.DCBX参数交换机制
DCBX参数交换机制分为两个类型:非对称型和对称型
(1)非对称型:指链路两端的配置信息允许不相同。
(2)对称型:指链路两端的参数信息配置成相同的值。
<1>非对称型参数交换:
非对称型参数交换,DCBX将交换的信息分成了两类TLV:
(1)Configuration TLV:通过在DCBX TLV中指定willing位,来标记是否期望接收邻居指定参数的配置。
(2)Recommendation TLV:通告邻居指定参数的配置信息。
状态机如下图所示:
初始情况下,采用本地管理配置参数做为运行参数。如果本机配置成通过邻居通告的配置信息来引导本地配置并且接收到邻居的配置信息,则迁移到RxRecommend状态,该状态下采邻居配置参数来引导本地运行参数。
<2>对称型参数交换:
称型参数交换,目的是为了使链路两端的配置一致。只使用了一种TLV类型:
(1)Configuration TLV:该TLV用于通告本地运行的配置参数信息。
如果本地端口设置了willing标志位(表示根据邻居的配置信息来引导本地配置),而收到邻居设备发送的Configuration TLV中不携带willing标志位,表明本端是被动接收方,则根据邻居的配置信息来引导本地配置,以使链路两端的配置一致。
如果链路两端都设置了willing标志位(表示都需要通过对方来引导本地配置),则比较设备的MAC地址,MAC地址小的设备的配置信息将用于引导本地配置。
DCBX定义了Symmetric state machine用于描述对称型参数的状态转变,状态图如下图所示:
在状态图中,定义了两个变量Operparam和RemoteParam,用于表示本地运行的配置参数和邻居运行的配置参数。状态机中根据TLV携带的willing标志位,来决定是否采用本地的管理配置信息或邻居的配置信息来引导本地参数配置。
2.DCBX TLVs:
前面有讲到DCBX利用了LLDP协议交换链路两端的配置信息,而LLDP是将信息以TLV的形式封装在LLDPDU中发送的。DCBX目前定义了4个新增TLV用于传输DCBX相关参数(如ETS、PFC等)。
<1>ETS Configuration TLV
其中:
(1)TLV type:如上图所示,TLV type的值固定为127。
(2)TLV information string length:如上图所示,值固定为25。
(3)802.1 OUI:DCBX属于IEEE 802.1组织发布的,所以OUI为00-80-c2,代表IEEE 802.1组织。
(4)802.1 subtype:还未给出具体编号,在正式的版本中会提供。
(5)Willing:willing标志位,值为TRUE时表示期望接收邻居的配置参数来引导本地配置。
(6)CBS:表示设备是否支持CBS(令牌整型)算法。
(7)Max TCs:表示支持传输类的最大数量。
(8)Priority Assignment Table:提供cos值到传输类的映射表。
(9)TC Bandwidth Table:提供每个传输类的带宽分配百分比。
(10)TSA Assignment Table:提供每个传输类当前使用的传输选择算法。
<2>ETS Recommendation TLV
该TLV主要是通告邻居推荐的ETS配置信息,用于引导邻居的ETS配置。ETS Recommendation TLV的具体内容如下所示:
<3>Priority-based Flow Control Configuration TLV
基于优先级的流量控制采用对称的参数交换。该TLV用于PFC的配置,TLV的内容如下所示:
其中:
(1)TLV type:如上图所示,TLV type的值固定为127。
(2)TLV information string length:如上图所示,值固定为6。
(3)802.1 OUI:如上图所示,OUI为00-80-c2。
(4)802.1 subtype:还未给出具体编号,在正式的版本中会提供。
(5)Willing:willing标志位,值为TRUE时表示期望接收邻居的配置参数来引导本地配置。
(6)MBC:MACsec Bypass Capability位。
(7)PFC cap:PFC能力标志位,用于表示8个传输类中同时有多少个传输类支持PFC。
(8)PFC Enable:占用1个字节,其中每一位代表一个优先级队列(0~7),如果某个优先级队列使能了PFC,则该位置为1,否则置为0。
<4>Application Priority Configuration TLV
该TLV主要用于通告邻居本地设备的应用优先级配置,采用的是对称的参数交换类型。TLV的具体内容如下图所示:
其中:
(1)TLV type:如上图所示,TLV type的值固定为127。
(2)TLV information string length:依赖于应用优先级的个数,值为5加上3字节的倍数。
(3)802.1 OUI:如上图所示,OUI为00-80-c2。
(4)802.1 subtype:还未给出具体编号,在正式的版本中会提供。
(5)Application Priority Table:应用优先级表,具体内容如下图所示