开发者社区> 问答> 正文

谈谈你对UDP的认识?

展开
收起
前端问答 2019-12-24 22:28:53 9135 0
4 条回答
写回答
取消 提交回答
  • 不保证传输可靠性,但是效率高。适合不需要100%准确性的领域或者对响应时间要求高的领域。 也可以基于udp自定义可靠性协议。

    2020-03-12 19:38:22
    赞同 展开评论 打赏
  • UDP没有TCP那样的用塞控制、重传机制。 简答的说,使用UDP的通信,可能会出现报文丢包、乱序、重复等各种情况,这些都需要上层应用软件进行处理。 但它的好处恰恰是TCP的短板,TCP作为通用流协议,考虑的是通用场景,时延必然差一些 对于某些业务场景来说,可能允许一定的丢包、乱序、重复情况,就不需要采用TCP那么严格的限制,在UDP上构造专门协议性能就会比TCP好一些

    2020-02-29 15:53:08
    赞同 展开评论 打赏
  • UDP没有TCP那样的用塞控制、重传机制。 简答的说,使用UDP的通信,可能会出现报文丢包、乱序、重复等各种情况,这些都需要上层应用软件进行处理。 但它的好处恰恰是TCP的短板,TCP作为通用流协议,考虑的是通用场景,时延必然差一些 对于某些业务场景来说,可能允许一定的丢包、乱序、重复情况,就不需要采用TCP那么严格的限制,在UDP上构造专门协议性能就会比TCP好一些

    2020-02-29 15:53:08
    赞同 展开评论 打赏
  • 前端问答小助手

    面向无连接

    首先 UDP 是不需要和 TCP 一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。

    并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。

    具体来说就是:

    • 在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了
    • 在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作

    不可靠性

    首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。

    并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。

    再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

    高效

    虽然 UDP 协议不是那么的可靠,但是正是因为它不是那么的可靠,所以也就没有 TCP 那么复杂了,需要保证数据不丢失且有序到达。

    因此 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的。

    image.png

    UDP 头部包含了以下几个数据

    • 两个十六位的端口号,分别为源端口(可选字段)和目标端口
    • 整个数据报文的长度
    • 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误

    传输方式

    UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

    适合使用的场景

    UDP 虽然对比 TCP 有很多缺点,但是正是因为这些缺点造就了它高效的特性,在很多实时性要求高的地方都可以看到 UDP 的身影。

    直播

    想必大家都看过直播吧,大家可以考虑下如果直播使用了基于 TCP 的协议会发生什么事情?

    TCP 会严格控制传输的正确性,一旦有某一个数据对端没有收到,就会停止下来直到对端收到这个数据。这种问题在网络条件不错的情况下可能并不会发生什么事情,但是在网络情况差的时候就会变成画面卡住,然后再继续播放下一帧的情况。

    但是对于直播来说,用户肯定关注的是最新的画面,而不是因为网络条件差而丢失的老旧画面,所以 TCP 在这种情况下无用武之地,只会降低用户体验。

    王者荣耀

    虽然我具体不知道王者荣耀底层使用了什么协议,但是对于这类实时性要求很高的游戏来说,UDP 是跑不了的。

    为什么这样说呢?首先对于王者荣耀来说,用户体量是相当大的,如果使用 TCP 连接的话,就可能会出现服务器不够用的情况,因为每台服务器可供支撑的 TCP 连接数量是有限制的。

    再者,因为 TCP 会严格控制传输的正确性,如果因为用户网络条件不好就造成页面卡顿然后再传输旧的游戏画面是肯定不能接受的,毕竟对于这类实时性要求很高的游戏来说,最新的游戏画面才是最需要的,而不是老旧的画面,否则角色都不知道死多少次了。

    总结

    • UDP 相比 TCP 简单的多,不需要建立连接,不需要验证数据报文,不需要流量控制,只会把想发的数据报文一股脑的丢给对端
    • 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为
    2019-12-24 22:31:00
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载