远程办公的需求日益增加,远程办公所处的广域网环境,要远远比稳定可靠的局域网环境复杂的多,广域网场景的特点是网络延时高,丢包率高,而且还不稳定。如何提升在广域网环境下的用户使用体验,成为各厂商的头号难题。 UDP vs TCP TCP是基于可靠的协议,拥有自己的流量控制与拥塞控制及回传,保证数据的可靠交互。而UDP基于是数据报的,它的缺点是:传输不可靠(数据可能丢失)和乱序。优点是:实时。 那在广域网下TCP有什么缺点呢?主要有一下几点: 1. 现行的TCP拥塞窗口机制在高带宽长距离的环境下无法很好的工作,拥塞窗口太小,而且增长过于缓慢直接导致吞吐率不高,无法充分利用带宽。此外TCP的AIMD(加性增乘性减)拥塞控制算法过激地降低拥塞窗口的大小,但是不能快速回复到高位充分利用带宽。 2. 目前的TCP拥塞控制算法在BDP(高带宽时延)网络下具有较差的RTT公平性,RTT会影响拥塞窗口的增长,越不容易达的链接的拥塞窗口增加得越慢,其发送速度越慢,因此会导致越远的链接发送速率越慢。
可靠的 UDP 协议 TCP和UDP都是传输层协议,底层都是通过ip协议传播,只是TCP增加了可靠的机制,本质上网络传输数据都不可靠,那其实可以近似的认为:TCP = UDP + 可靠 因为TCP本身实现是被实现在各个系统内核栈里面的,对于本身算法的控制极其有限,所以现在我们可以换一种思路,就是基于UDP,然后自己做可靠保证,在UDP的基础上改造。 相比TCP这样做的好处:数据传输的可靠性可以灵活实现,把整个网络的控制权完全放到自己手里。使用自己的控制算法来实现网络数据的可靠传输,从而解决上面TCP所面临的劣势。
SDT 协议 SDT协议就是适用于广域网场景下的可靠UDP协议。具有非常良好的丢包重传机制,丢包重传的控制消息非常丰富,同时支持ACK、ACKACK、NACK。另一方面,由于SDT建立在UDP协议之上,解决了TCP协议传输延迟高的问题,比TCP具有更低的延时。同时SDT对上层提供了丰富的拥塞控制统计信息,包括RTT、丢包率、inflight、send/receive bitrate等。利用这些丰富的信息,可以实现带宽预测,并根据带宽的变化在编码层去做自适应动态编码与拥塞控制。
SDT协议还具备功能强大拥塞控制能力,SDT相对TCP拥塞控制优点包括抗丢包能力强、延迟低、抢占能力强和平稳发送。TCP拥塞控制算法并没有平稳发送的说法,而只是判断发送与否的问题,SDT会平稳的发送数据,不会突发流量冲击。以视频播放为例,设置视频帧率为23帧,分别对比TCP与SDT在广域网场景下的实际显示帧率。测试结果如下: 可以看到在网络状况非常复杂的情况下,播放视频这种重载场景,SDT依旧能够提供一个相对不错的视频观看体验。 |