为什么UDP有存在丢包的现象,但是视频和游戏都是基于UDP进行传输呢?

TCP和UDP的区别是什么?

相信这个问题大家在面试的时候都有被问到过。

我在面试的时候回答的是:TCP是可靠的传输,UDP是不可靠的传输存在丢包率高的现象,所以一般TCP会应用于下载,网页等传输,而UDP则更适用于像语音通话这样的传输等。

但是面试官下面的追问让我懵了。

1. 为什么UDP有存在丢包的现象,但是视频和游戏都是基于UDP进行传输呢?

这个问题我确实挺感兴趣的,所以后面去找资料去弄清楚,然后发现,其实现在的主流游戏(包括原神、王者荣耀等)都是基于UDP传输,首先我们需要了解,为什么TCP会比UDP可靠?

在这里插入图片描述

我找了一张图片,可以比较直观地说明UDP和TCP的关系,TCP更像有连接机制、拥塞控制、重传机制、乱序重排机制和滑动窗口等等“马甲”的UDP,这些“马甲”虽然保证了可靠性但是传输也慢了。

2. 有没有办法鱼与熊掌兼得?既保留TCP的可靠又保留UDP的快呢?

答案是有的,方案是将TCP和UDP折中一下,保留乱序重排、重传、滑动窗口和拥塞控制几个机制,就形成了一个新的传输机制——KCP。

在这里插入图片描述

可以将KCP理解为一个协议,但归根结底是应用层的一个算法,更准确的说法是,KCP(协议)=UDP+部分可靠性机制。

在这里插入图片描述

3. KCP为什么比TCP快?

3.1 超时重传机制

网络环境不好的时候,就需要重传数据,TCP重传需要等待2RTO(Retransmission TimeOut)时间,KCP则等待1.5RTO时间即可。

3.2 快速重传机制

TCP发现某个数据包的ACK包丢失3次才触发重传,但是KCP可以设置为丢掉两个包触发重传。

3.3 拥塞控制机制

当发生丢包时,TCP会认为是网络环境变差,自动减少发包量,KCP也有,但是KCP可以关掉拥塞控制机制,所以TCP让出来的网络资源可以给到KCP。

在这里插入图片描述

通过以上机制,KCP传输可以比TCP快30-40%的速度,也保证了一定的可靠性。视频监控纯用UDP可能会画面扭曲,游戏纯用UDP可能会画面跟鬼畜一样。利用KCP进行传输,这小小的改动解决了上述这些问题。

4. 当网络环境不好的时候,宽带会优先舍弃UDP包,KCP怎么解决这个问题的?

添加冗余数据包,当丢包发生时,通过添加冗余数据包的方法,这样即使发生丢包也可以恢复出完整的数据。

5.总结拓展

TCP就像一个老实人一样,非常可靠,但是可能有些时候太守旧了速度慢,就像慢慢老去的我们一样。所以才会对UDP进行一些算法上的的改造,保持一定速度的同时也可以保证一点可靠性。

包括HTTP3.0时代也是一个基于UDP的协议。HTTP的发展史,我会在下一篇文章提到!

同时也可以保证一点可靠性。

包括HTTP3.0时代也是一个基于UDP的协议。HTTP的发展史,我会在下一篇文章提到!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值