以太网的数据发送和接收都会经过数据包缓冲区,当数据包缓冲区的报文输入的速度小于报文输出的速度时,数据包缓冲区将一直处于未满状态,往数据包缓冲区中输入的报文总是能够输出,此时网络处于畅通状态;而当数据包缓冲区的报文输入的速度大于报文输出的速度时,数据包缓冲区将开始堆积,并最终溢出造成报文丢失。
为了应对这种情况,便有了流控机制,其本质是使通信设备能实时的了解对端设备对通信流量的要求,根据对端设备的要求来决定本设备是继续发送还是暂停发送数据包。这就要求以太网通信设备必须根据自己缓存的状况,实时将缓存的空或满信息发送给对端。这种缓存的空满信息就称为流控信息。流控信息就像红绿灯,报文发送端根据流控信息来决定端口是否继续发送报文。
这种流控机制有效防止了报文的丢失,但是由于网络的迅速发展,网络中负责的业务已不止一种,而这种流控机制会因为某一种业务报文的发送速率过快而导致整个端口停止报文的发送,影响其他业务报文的正常发送与接收。于是就有了基于优先级的流控即PFC(Priority-based Flow Control)流控。与普通流控不同的是,PFC流控有个分类处理的过程,即将网络中的报文根据其业务类别分类后进入不同的缓冲区中,各个缓冲区有自己的流控机制,且互不影响,此外,PFC流控还能够根据业务类型的重要性划分优先级,从而使网络的服务质量(QoS)得到提升。
PFC流控和PAUSE流控一样都是要基于全双工的速率模式的。
PAUSE帧是以太网在全双工模式下,MAC控制子层发出的流量控制帧。IEEE802.3协议为MAC控制子层提供了一个全双工流量控制的结构框架,包括在流量过大时发出PAUSE帧和响应对端发过来的PAUSE帧两个基本功能,此外还包括流控自协商和流控开关配置等功能。
PAUSE帧的帧格式如下,一个有效的PAUSE帧是基于Ethernet报文格式的,包括:目的MAC地址+源MAC地址+以太网类型+操作码+流控时间+FCS。
其中目的MAC地址可以有两种,一是标准的组播地址01:80:C2:00:00:01,二是网口本身的MAC地址;以太网类型必须为0x8808;PAUSE帧的操作码必须为0x0001;流控时间为0~0xffff可配。
为了保证流控效果,产生流控信号是由buffer水线控制的,只有在rx buffer的使用量达到了水线值时才会触发流控信号,流控信号让MAC自动化产生PAUSE帧,其中由高水线触发的流控信号让MAC产生PAUSE time不为0的PAUSE帧,低水线触发的流控信号让MAC产生PAUSE time为0的PAUSE帧;PAUSE帧的发送间隔和流控时间可配,但是要求MAC配置的流控时间必须大于PAUSE帧的发送间隔。此外,有些MAC会提供软件发送PAUSE帧的功能,即只需软件配置发送PAUSE帧流控使能就会根据MAC的配置发送PAUSE帧,但是该功能与协议不符,仅作为特殊用途使用。
响应PAUSE即当收到PAUSE帧时应能够根据协议定义的行为完成特定的动作,但是只能对符合协议的PAUSE帧进行响应,对于不符合协议的则不能产生对应的动作。当执行响应动作时,接收方在判定是PAUSE帧后便只会关心PAUSE帧中的PAUSE time(即流控时间),主要有以下两种动作: