TCP BIC
BIC-TCP(Binary Increase Congestion Control)由North Carolina State University的网络研究实验室提出,该算法在提出不久后就成为了当时Linux内核中的TCP默认拥塞算法。
拥塞控制实现
发送窗口
对于TCP会话的发送方,任何时候在其发送缓存内的数据都可以分为四类:
- 已经发送,并得到了对端的ACK。
- 已经发送,但是仍未得到对端ACK。
- 未发送,但是对端允许进行发送。
- 未发送,但是对端不允许进行发送。
对于第二类和第三类数据,即“已经发送,未收到对端ACK”和“未发送,但是对端允许进行发送”合称为发送窗口。
窗口只能通过以下方式进行滑动:
- 当接收到新的ACK时,窗口滑动。
接收窗口
对于接收方,在某一时刻他的接收缓存只有三种:
- 已经接收,并且已经回复了ACK。
已经接收,但是仍未回复ACK。- 未接收,但是已经准备好接收。
- 未接收,也仍未准备好进行接收。
未接收,准备进行接收,即第二类,被称为接收窗口。
拥塞窗口调整的本质
找到最适合当前网络的一个发送窗口。
实现方式
基本思想为二分查找法。
TCP CUBIC
CUBIC是一种TCP的实现,他有着最优化的拥塞控制算法。