[置顶] 基于流特征学习的TCP加速技术

时间:2022-08-05 15:06:20
       TCP协议在当今网络环境下主要存在对丢包和拥塞判断不准,以及相应的传输调节机制过于“简单”、“机械”和“粗暴”的问题,从而导致传输吞吐率比较低,传输波动比较大。因此,优化TCP协议是件很有必要和有意义的事情,但这件事情远没有那么简单!
       传统TCP(Tahoe、Reno等)和后来一些改进版本(Vegas、HSTCP、WestWood、Cubic、FastTCP等),对拥塞的判断要么基于丢包、要么基于时延这种单一信号来实现,很难自适应网络环境的复杂变化,容易出现判断不准确、传输调节不合理的问题。而且丢包也有随机丢包和拥塞丢包之分,这个也是要区别对待的。对于随机丢包,一旦识别出来,就应该立即重传丢失的包(非整个报文),而无需等待重传定时器超时。对于拥塞造成的丢包,就得采用一系列拥塞避免或恢复机制。
       当然,仅凭丢包来判断拥塞是不够的。还是要综合考虑以TCP连接为单位的流特征因素,因此拥塞判据的多元化是一种新的TCP协议优化思路。流特征最好要涵盖网络传输路径外在特征(丢包、时延及其变化规律)和TCP传输参数(拥塞窗口、慢启动阈值等)两个方面。但这带来一个问题,拥塞判据多了,对网络的认知虽然更全面,但相应的判断逻辑变复杂了,而且如何设计这个逻辑也更难了。
      考虑用人工智能来解决这个问题。如何通过一系列学习算法来对流特征进行学习,获得对网络传输状况的准确认知,分类识别不同的丢包和拥塞场景,并基于对这些网络场景的准确认知,估计可用带宽大小,采取合理的窗口进行传输,既不加重拥塞,也不保守传输,确保带宽利用率最大化?
      如何分类识别丢包和拥塞场景?如果基于有监督学习方法来实现,那么就需要带标签样本来训练学习机,可标签怎么打?根据每轮RTT传输采集到的流特征就能知道此刻是丢包还是没丢包?是随机丢包还是拥塞丢包?拥塞程度怎样?这个怎么实现啊?需要工程经验,还是有某种规律需要发现,抑或玩概率?人工打标签总不能随便定吧!如果不要标签,类似于无监督学习,那怎么实现对以上场景的识别?如果用概率的方式来实现,那怎么由输入的流特征来计算当前属于哪种场景的概率呢?
      另一种思路,通过状态机来实现流特征学习。将待分类的丢包和拥塞场景定义成几种状态。根据每轮RTT采集的流特征向量,经过一系列算法确定状态机该转换到哪种状态,即对应哪个场景?这个算法该怎么设计呢?假设基于连接生命周期内传输历史过程中,曾经采用过的状态转换来确定当前应该转换到哪个状态,这个算法一般怎么实现啊?而且,每轮RTT都会更新这个状态转换的最新结果,这就是个动态学习的过程。
      以上思路要实现起来还是有很多问题需要解救的!很困惑啊,有没有高人指点啊?谢谢啦!