实时通讯中TCP_UDP的选择

对于TCP、UDP的区别及优缺点,其他博文已经讲得非常明白,本文不再重复引用

关于实时通讯这一块,先看一张关于TCP的图

实时通讯中TCP_UDP的选择

在TCP连接的过程,它有一个丢包重传的机制

假设一个应用场景,在一个小区里,白天大多数居民去上班,网络信号良好,但到了晚上许多人争抢同一个区域的网络,信号就变差。这时对于数据的发送就有了延迟性,而TCP的RTO(Retransmission Time Out)最小为200ms,在服务端ACK回来的过程中超时,客户端便又会重新发送,反复如此,直到RTO增加到2分钟,如果再超时,便会断开连接。若客户端在响应一分多钟后收到ack,接着发送下一个数据包,又是等待一分多钟或者两分钟后断连。明显TCP不适合于这种极端的网络情况

所以最好的方案是选择UDP,尽管它具有丢包、延迟、乱序的不可靠性,但这些缺点大部分在WebRTC中得到了优化

那在实时通讯中什么时候会用到TCP呢?更多是在UDP无法连通的情况下使用TCP。TCP/IP协议在国际上更多的是基于TCP连接,企业级实时通讯的应用会保证至少99%的连通率,若UDP连接失败则会使用TCP连接,但TCP连接也不是100%,因为有可能会被网关拦截等等情况,这时还要考虑HTTPS连接

另外还有两篇博文讲得很详细

https://www.cnblogs.com/yuanfan/archive/2010/12/25/1916420.html
—————————————————————————————
https://blog.****.net/xiaonan153/article/details/81510196