什么是CFC(Credit-based Flow Control)?
信用流控CFC(Credit-based Flow Control)是一种基于主动信用授权来实现流量控制的技术。CFC通过在接收端和发送端之间建立一种信用授权的机制,来保证发送端不会向接收端发送超出其缓存能力的数据,确保接收端的缓存不溢出。
为什么需要CFC?
传统PFC是被动反压机制,PFC在缓冲区达到阈值时发送反压帧。从发送反压帧到停止接收对端设备发来流量的时间差内,设备需要有足够的缓存空间吸收这段时间内对端设备发来的流量,以保证无损。CFC是在接收端和发送端之间建立一种信用授权的机制,发送端发送的数据量不会超过接收端的信用值(Credit)大小,信用值就是接收端可用的缓存大小。发送端依据授权的信用值向接收端发送报文,这样就可以保证发送端不会向接收端发送超出其缓存能力的数据,确保接收端的缓存不溢出。CFC相比PFC流控具有节省缓存的优势,可以支持更长距离的无损场景。
CFC是如何工作的?
CFC通过信用授权来实现流量控制,发送端根据接收端授予的信用值来控制流量的发送,只有在发送端有足够的信用值时才可以发送流量,否则不发送,从而避免发送的流量超出接收端的缓存能力。
CFC工作原理示意图
如上图所示,CFC的工作流程如下:
- 发送端根据接收端的队列缓存能力,设置一个初始化信用值(Credit),该信用值的大小即代表了接收端的缓存能力。
- 发送端向接收端发送报文,报文出队列后,发送端会根据报文长度计算其需要消耗的信用值大小,然后将信用值减去消耗的信用值大小。假设发送端原信用值为1000,发送了一个报文后,消耗的信用值为5,则剩余信用值995(1000-5=995)。
发送端在有足够的信用值时才可以发送报文,如果剩余的信用值不足(例如仅剩余信用值3,但是发送的报文需要消耗的信用值为5),则停止发送报文。
- 接收端收到报文,在报文出队列后,根据同样的规则计算出报文对应的信用值大小,然后将信用值通过ACK报文返回给发送端,ACK里携带有报文对应的信用值大小信息。
- 发送端接收到ACK报文后,会对信用值进行回收,即信用值增加上ACK里携带的信用值大小。假设发送端剩余信用值为995,ACK返回的信用值为5,则回收后信用值为1000(995+5=1000)。
- 作者: 高洋洋
- 最近更新: 2026-04-17
- 浏览次数: 3601
- 平均得分:
导出PDF