网络拥塞会引起数据包在网络设备中排队甚至导致队列溢出而丢弃,是导致网络高动态时延的主要原因。网络拥塞从根源上可以分为两类,一类是由于流量调度不均引起的拥塞,另一类是对网络或接收端处理能力过度订阅(或称“超卖”)。前面所说的ECMP冲突属于前者,Incast拥塞属于后者。拥塞控制技术根据其应对拥塞的时机不同,可以分为被动拥塞控制和主动拥塞控制两类。
被动拥塞控制包括传统TCP拥塞控制技术,如CUBIC[4],数据中心中改进的TCP拥塞控制技术如DCTCP[5-6],应用于RDMA协议的拥塞控制技术如DCQCN、Timely[7],交换机进行拥塞反馈的拥塞控制技术如 QCN[8]等。尽管它们拥塞反馈的方式不同,有些是基于丢包,有些是基于ECN,有些是基于时延,但一个共同的特点是发送端根据网络的拥塞反馈信号,对发送速率进行调节。这类技术由于实现简单、易于部署被广泛使用,但通常被认为存在拥塞反应滞后、控制回环时间长、容易引起吞吐率振荡、速率收敛慢、误伤老鼠流等问题,因此有很大的优化空间。
主动拥塞控制是相对比较新的拥塞控制技术,成熟的应用还比较少。主要技术是网络设备或接受端直接建议或指导发送端发送速率的方式,比如RCP(Rate Control Protocol)[9],接收端驱动的基于信誉的速率控制技术等。主动拥塞控制能有效解决被动拥塞控制拥塞反应滞后和速率收敛慢等问题,同时也给解决Incast拥塞等网络顽疾带来了曙光。主动拥塞控制技术展现了解决拥塞问题的新思路,是有前景的新型拥塞控制技术,但也存在准确建议速率确定困难,实现机制相对复杂,引入额外的信令开销等问题。