在前面的《深度分析数据中心之QCN(Quantized Congestion Notification)技术》一文中对QCN(Quantized Congestion Notification)技术已经有详细的介绍,但是只是停留在理论讲解阶段,可能对QCN技术还不是很了解。今天我将从另一个角度来对QCN功能进一步讲解,通过分析QCN的报文内容帮助大家理解这个功能。需要提的一点是,据我了解目前这个功能还没有产商在市场上的产品有这个功能,只有星网锐捷的数据中心产品有这个功能,但是这个功能实际上最终是由终端来的实现降低数据源的速率,所以只有交换机支持不够的,希望网卡产商尽快推出QCN功能。
QCN由IEEE 802.1Qau文档定义,文档中约定的两种新的以太网报文类型:
(1)带CN-TAG 的数据报文定义如下图:
CN-TAG报文实际上是支持QCN功能的融合网络接口卡(CNA)接入到支持QCN域的网络中发送出带了CN-TAG的报文。和普通的报文区别是在发送的报文的以太头部增加了cn-tag字段:如上图QCN功能的Etype为22e9,这是标准定义的QCN etype。后面的FLOW-ID是唯一标识网卡发送的每一条流,当网络出现拥塞后,交换机会发出CNM报文(后面会说明该报文)通告数据源回暂停发送该流,在CNM=报文中会就会把FLOW-ID放入,当网卡收到CNM报文时就会通过该字段暂停相应流量。以达到精确控制具体报文流量的目的。
(2)CNM报文定义
CNM消息中,PDU各字段(从PDU-TYPE开始都是PDU的内容)的封装格式如下图所示:
每个字段的含义如下所示:
字段名 | 含义 |
Version | CNM消息的版本号,长度为4bit,占用第1个字节的高4位,默认值填充0; |
ReservedV | CNM消息保留字段,长度为6bit,占用第1个字节的低4位,和第2个字节的高2位,默认值填充0; |
Quantized Feedback | CNM消息的量化反馈值,长度为6bit,占用前2个字节的低6位; |
Congestion Point Identifier (CPID) | 拥塞点标识符,长度为8字节。为了保证标识符的唯一性,使用拥塞点设备的MAC地址作为高位6字节,低位2字节用于标识同一设备的不同端口或者不同优先级队列; |
cnmQOffset | 占用2个字节,表示拥塞点CP发送队列当前空闲可用的字节数; |
cnmQDelta | 占用2个字节,表示2次获取拥塞点CP发送队列可用字节数的差值; |
Encapsulated priority | 占用2个字节,第1个字节的高3位,填充触发CNM消息数据帧的优先级,其它位填充0; |
Encapsulated destination MAC address | 占用6个字节,填充触发CNM消息数据帧的目的MAC地址; |
Encapsulated MSDU length | 占用2个字节,表示Encapsulated MSDU字段的长度; |
Encapsulated MSDU | 最多占用64个字节,填充触发CNM消息的数据帧的内容; |
结合实际报文分析,由于目前QCN功能技术太新,wireshark工具还没有更新相应字段解析,只能我们自己一个字段一个字段的分析:
见上图从e type :22e9开始逐一分析相应字段:0000两个字节表示上面所述的cn-tag的flow-id。从PDU-TYPE:22E7开始后面是属于PDU部分,按图3,4两部分解析:
06 d0:按图3,4所示表示如下字段
字段名 | 含义 |
Version | CNM消息的版本号,长度为4bit,占用第1个字节的高4位,默认值填充0; |
ReservedV | CNM消息保留字段,长度为6bit,占用第1个字节的低4位,和第2个字节的高2位,默认值填充0; |
Quantized Feedback | CNM消息的量化反馈值,长度为6bit,占用前2个字节的低6位; |
00 03 43 e0 88 cf 04 73:
字段名 | 含义 |
Congestion Point Identifier (CPID) | 拥塞点标识符,长度为8字节。 为了保证标识符的唯一性,使用拥塞点设备的MAC地址作为高位6字节,低位2字节用于标识同一设备的不同端口或者不同优先级队列; |
以此推下去,其他字段就不分析了。