美文网首页
可靠 UDP 传输

可靠 UDP 传输

作者: 饿了么配送员 | 来源:发表于2020-04-28 16:26 被阅读0次

本文分三个部分:一,什么时候有可能采用 UDP 通讯而不是用 TCP 更好;二,一个可靠的 UDP 通讯模块的 API 接口该如何设计;三,一个简单的实现。


首先,我一直是非常反对在 UDP 协议上实现一个可靠传输协议的,即类似 TCP over UDP 的东西。

TCP 已经够复杂了,几乎不太可能重新设计的更好。如果用 UDP 再实现一个可靠传输协议,而表现的比 TCP 效果更好,那么多半只是在部分情况下的优势;或是霸道的占用了过量的资源,而 TCP 在设计时则是很友好的,以整个网络的通畅为更高准则的。

对于后者,我心里相当排斥。如果大家都想独占网络带宽,那么只会让每个人都无法获得高质量通讯。

在网络游戏,尤其是移动网络上的网络游戏制作圈里,不断的有人期望基于 UDP 协议通讯来获得更快的响应速度,而又想让通讯流像 TCP 一般可靠。我也时常思考这个问题,到底该怎么做这件事?

如果基于 UDP 可以做的比 TCP 更好,那么一定是放弃了点 TCP 需要做到的东西。

一条路是寄希望于业务逻辑上允许信息丢失:比如,在同步状态中,如果状态是有实效性的,那么过期的状态信息就是可丢失的。这需要每次或周期性的全量状态信息同步,每个新的全量状态信息都可以取代旧的信息。或者在同步玩家在场景中的位置时可以用这样的策略。不过在实际操作中,我发现一旦允许中间状态丢失,业务层将会特别难写。真正可以全量同步状态的场合也非常少。

那么,不允许信息丢失,但允许包乱序会不会改善? 一旦所有的包都一定能送达,即丢失的包会用某种机制重传,那么事实上你同样也可以保证次序。只需要和 TCP 一样在每个包中加个序号即可。唯一有优势的地方是,即使中间有包晚到了,业务层有可能先拿到后面的包处理。

什么情况下是包次序无关的呢?最常见的场合就是一问一答的请求回应。采用这种方式的, UDP 在互联网上最为广泛的应用,就是 DNS 查询了。

在网络状况不好的时候,我们可以看到有时采用短连接反而能获得比长连接更好的用户体验。不同的短连接互不影响,无所谓哪个回应先到达。如果某个请求超时,可以立刻重新建立一条新的短连接重发请求。这时,丢包重发其实是放在业务层来做了。而一问一答式的小数据量通讯,正是 TCP 的弱项:正常的 TCP 连接建立就需要三次交互,确定通讯完毕还需要四次交互。如果你建立一次通讯只为了传输很少量的一整块数据,那么明显是一种浪费。这也是为什么 google 的 QUIC 对传统的 http over TCP 有改善的空间。

我的思考结论就是:在 UDP 协议之上,实现一个带超时的请求回应机制,让业务层负责超时重发,有可能取得比 TCP 通讯更好的效果。但其前提是:单个请求或回应的包不应该过大,最好不要超过一个 MTU ,在互联网上大约是 500 多字节。如下是一个具体案例:

参考方案

相关文章

  • TCP如何保证可靠传输

    TCP和UDP的区别之一:TCP是可靠传输,UDP是不可靠传输,那么可能一不小心就会被追问TCP是如何保证可靠传输...

  • 可靠 UDP 传输

    www.1ppt.com网站大量模板下载 质量远超简书其他人推荐的,翻看了几款简述推荐的免费下载要么没有特效,要么...

  • RFC协议 RTP、SIP、DTMF、SDP学习笔记

    RTP RTP是端到端的协议,基于UDP【运行在UDP之上】,UDP本身不保证传输的可靠性,数据传输的可靠性由RT...

  • 常问知识点-网络

    网络 TCP和UDP的区别 TCP面向有连接,提供可靠的传输;UDP面向无连接,不可靠传输 TCP面向字节流,UD...

  • UDP编程

    TCP与UDP区别 TCP特点 面向连接,传输可靠,速度比udp慢。适用于传输大量的数据,对可靠性要求较高的场景;...

  • iOS面试:网络通信概念

    TCP与UDP TCP和UDP都是传输层的协议: TCP是传输控制层协议,是面向连接、可靠的,点对点的;UDP是用...

  • TCP 三次握手 和 四次挥手

    概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就...

  • 可靠 UDP 传输设计

    前言 今天来给大家说说可靠的UDP的设计,打算分三个部分来给大家讲解:(1)什么时候有可能采用 UDP 通讯而不是...

  • 可靠 UDP 传输设计

    今天来给大家说说可靠的UDP的设计,打算分三个部分来给大家讲解: 这里有个游戏开发学习小组[https://jq....

  • 设计一个基于udp差不多可靠的算法

    TCP VS UDP 1 tcp 是面向连接提供可靠传输;UDP是面向无连接,提供不可靠连接 Tcp 提供流量控制...

网友评论

      本文标题:可靠 UDP 传输

      本文链接:https://www.haomeiwen.com/subject/tzqbwhtx.html