在一些苛刻的网络条件下TCP要么不能提供正常的通信质量保证,要么成本过高。为什么要在UDP之上做可靠保证,究其原因就是在保证通信的时延和质量的条件下尽量降低成本,RUDP主要解决以下相关问题:
端对端连通性问题:一般终端直接和终端通信都会涉及到NAT穿越,TCP在NAT穿越实现非常困难,相对来说UDP穿越NAT却简单很多,如果是端到端的可靠通信一般用RUDP方式来解决,场景有:端到端的文件传输、音视频传输、交互指令传输等等。
弱网环境传输问题:在一些WIFI或者3G/4G移动网下,需要做低延迟可靠通信,如果用TCP通信延迟可能会非常大,这会影响用户体验。例如:实时的操作类网游通信、语音对话、多方白板书写等,这些场景可以采用特殊的RUDP方式来解决这类问题。
带宽竞争问题:有时候客户端数据上传需要突破本身TCP公平性的限制来达到高速低延时和稳定,也就是说要用特殊的流控算法来压榨客户端上传带宽,例如:直播音视频推流,这类场景用RUDP来实现不仅能压榨带宽,也能更好的增加通信的稳定性,避免类似TCP的频繁断开重连。
传输路径优化问题:在一些对延时要求很高的场景下,会用应用层relay的方式来做传输路由优化,也就是动态智能选路,这时双方采用RUDP方式来传输,中间的延迟进行relay选路优化延时。还有一类基于传输吞吐量的场景,例如:服务与服务之间数据分发、数据备份等,这类场景一般会采用多点并联relay来提高传输的速度,也是要建立在RUDP上的(这两点在后面着重来描述)。
资源优化问题:某些场景为了避免TCP的三次握手和四次挥手的过程,会采用RUDP来优化资源的占用率和响应时间,提高系统的并发能,例如:QUIC.