问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/KELLENSHAW/article/details/139565511

在计算机网络中,TCP和UDP是两种最常用的传输协议。TCP以其高可靠性著称,而UDP则以低延迟和高效率见长。那么,为什么视频和游戏这类对实时性要求极高的应用会选择使用存在丢包风险的UDP呢?本文将从TCP和UDP的基本区别出发,深入探讨这一问题,并介绍一种结合两者优势的新型协议——KCP。

TCP和UDP的区别是什么?

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

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

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

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

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

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

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

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

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进行传输,这小小的改动解决了上述这些问题。

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

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

总结拓展

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

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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号