趣谈网络协议
刘超
前网易研究院云计算技术部首席架构师
130416 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
趣谈网络协议
15
15
1.0x
00:00/00:00
登录|注册

第10讲 | UDP协议:因性善而简单,难免碰到“城会玩”

移动通信领域
IoT物联网
实时游戏
流媒体的协议
网页或者APP的访问
低时延、容忍少数丢包的应用
广播和多播应用
资源少、丢包不敏感的应用
愣头青,做事不懂权变
轻信他人
沟通简单
端口号
有状态服务 vs 无状态服务
拥塞控制 vs 不进行拥塞控制
面向字节流 vs 基于数据报
可靠交付 vs 不保证不丢失、不保证按顺序到达
面向连接 vs 面向无连接
基于UDP的“城会玩”的五个例子
UDP的三大使用场景
UDP的三大特点
UDP包头
TCP和UDP的区别
UDP协议

该思维导图由 AI 生成,仅供参考

讲完了 IP 层以后,接下来我们开始讲传输层。传输层里比较重要的两个协议,一个是 TCP,一个是 UDP。对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,最常用的就是这两个协议。由于面试的时候,这两个协议经常会被放在一起问,因而我在讲的时候,也会结合着来讲。

TCP 和 UDP 有哪些区别?

一般面试的时候我问这两个协议的区别,大部分人会回答,TCP 是面向连接的,UDP 是面向无连接的。
什么叫面向连接,什么叫无连接呢?在互通之前,面向连接的协议会先建立连接。例如,TCP 会三次握手,而 UDP 不会。为什么要建立连接呢?你 TCP 三次握手,我 UDP 也可以发三个包玩玩,有什么区别吗?
所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
例如,TCP 提供可靠交付通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。我们都知道 IP 包是没有任何可靠性保证的,一旦发出去,就像西天取经,走丢了、被妖怪吃了,都只能随它去。但是 TCP 号称能做到那个连接维护的程序做的事情,这个下两节我会详细描述。而 UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。
再如,TCP 是面向字节流的。发送的时候发的是一个流,没头没尾。IP 包可不是一个流,而是一个个的 IP 包。之所以变成了流,这也是 TCP 自己的状态维护做的事情。而 UDP 继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收。
还有 TCP 是可以有拥塞控制的它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点。UDP 就不会,应用让我发,我就发,管它洪水滔天。
因而 TCP 其实是一个有状态服务,通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行。而 UDP 则是无状态服务。通俗地说是没脑子的,天真无邪的,发出去就发出去了。
我们可以这样比喻,如果 MAC 层定义了本地局域网的传输行为,IP 层定义了整个网络端到端的传输行为,这两层基本定义了这样的基因:网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段。我们笼统地称为包。包单独传输,自行选路,在不同的设备封装解封装,不保证到达。基于这个基因,生下来的孩子 UDP 完全继承了这些特性,几乎没有自己的思想。

UDP 包头是什么样的?

我们来看一下 UDP 包头。
前面章节我已经讲过包的传输过程,这里不再赘述。当我发送的 UDP 包到达目标机器后,发现 MAC 地址匹配,于是就取下来,将剩下的包传给处理 IP 层的代码。把 IP 头取下来,发现目标 IP 匹配,接下来呢?这里面的数据包是给谁呢?
发送的时候,我知道我发的是一个 UDP 的包,收到的那台机器咋知道的呢?所以在 IP 头里面有个 8 位协议,这里会存放,数据里面到底是 TCP 还是 UDP,当然这里是 UDP。于是,如果我们知道 UDP 头的格式,就能从数据里面,将它解析出来。解析出来以后呢?数据给谁处理呢?
处理完传输层的事情,内核的事情基本就干完了,里面的数据应该交给应用程序自己去处理,可是一台机器上跑着这么多的应用程序,应该给谁呢?
无论应用程序写的使用 TCP 传数据,还是 UDP 传数据,都要监听一个端口。正是这个端口,用来区分应用程序,要不说端口不能冲突呢。两个应用监听一个端口,到时候包给谁呀?所以,按理说,无论是 TCP 还是 UDP 包头里面应该有端口号,根据端口号,将数据交给相应的应用程序。
当我们看到 UDP 包头的时候,发现的确有端口号,有源端口号和目标端口号。因为是两端通信嘛,这很好理解。但是你还会发现,UDP 除了端口号,再没有其他的了。和下两节要讲的 TCP 头比起来,这个简直简单得一塌糊涂啊!

UDP 的三大特点

UDP 就像小孩子一样,有以下这些特点:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

基于UDP的“城会玩”:探索UDP协议在特定场景下的独特优势 UDP协议作为一种面向无连接的传输层协议,与TCP相比具有明显的区别。TCP是面向连接的,提供可靠的数据传输和拥塞控制,而UDP则更简单、灵活,不进行拥塞控制。UDP的特点可以用“性善而简单”来形容,它相信网络通路默认是容易送达的,不建立连接,轻信他人。这种简单、灵活的特性使得UDP在某些场景下具有独特的优势,但也容易碰到一些“城会玩”的问题。 在移动互联网中,QUIC协议基于UDP实现了快速连接建立、减少重传时延,自适应拥塞控制,提供更好的用户互动体验。流媒体的协议也借助UDP实现了自己的视频传输协议,以提供更好的实时性和选择性的丢帧。此外,实时游戏对网络要求严格,采用自定义的可靠UDP协议,自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响。 总的来说,UDP的简单、灵活特性使得它在一些特定场景下具有独特的优势,如内网应用、广播应用和对实时性要求较高的应用。然而,由于UDP不进行拥塞控制,对丢包不敏感,因此在某些情况下也会面临一些挑战。 文章还提到了一些具体应用场景,如物联网领域的通信协议Thread,移动通信领域的GTP-U协议等,它们都是基于UDP协议的。这些例子展示了UDP在特定领域的灵活应用和优势所在。 总的来说,本文通过对UDP协议的特点和应用场景进行了深入探讨,展示了UDP在特定场景下的独特优势和应用前景。对于网络协议领域的从业者和对网络技术感兴趣的读者来说,本文提供了有益的技术视角和思考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈网络协议》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(100)

  • 最新
  • 精选
  • 李小四
    网络_10 # 作业 - 连接:在自己监听的端口接收到连接的请求,然后经过“三次握手”,维护一定的数据结构和对方的信息,确认了该信息:我发的内容对方会接收,对方发的内容我也会接收,直到连接断开。 - 断开:经过“四次挥手”确保双方都知道且同意对方断开连接,然后在remove为对方维护的数据结构和信息,对方之后发送的包也不会接收,直到 再次连接。 我看到有的同学说,TCP是建立了一座桥,我认为这个比喻不恰当,TCP更好的比喻是在码头上增加了记录人员,核查人员和督导人员,至于IP层和数据链路层,它没有任何改造。

    作者回复: 这个比喻太好了,对的TCP不是桥,是在码头上增加了记录人员,核查人员和督导人员

    2019-08-07
    6
    265
  • Richie
    TCP/UDP建立连接的本质就是在客户端和服务端各自维护一定的数据结构(一种状态机),来记录和维护这个“连接”的状态 。并不是真的会在这两个端之间有一条类似“网络专线”这么一个东西(在学网络协议之前脑海里是这么想象的)。 在IP层,网络情况该不稳定还是不稳定,数据传输走的是什么路径上层是控制不了的,TCP能做的只能是做更多判断,更多重试,更多拥塞控制之类的东西。

    作者回复: 理解的太对了

    2019-06-30
    5
    168
  • Yangjing
    后面可以讲一下实际的分析不?比如用工具 wireshark 对包进行分析讲解,自己能看懂一部分简单的

    作者回复: 因为是音频课程,所以不太适合对包进行分析讲解,但是可以推荐本书,有很多书已经非常好了

    2018-06-08
    8
    5
  • LH
    前面说tcp是基于流的传输,无头无尾。后面说UDP的头和tcp不一样,我被搞晕流

    作者回复: UDP的头和TCP的头的意思是网络包的头。这里面说的无头无尾的意思是无始无终,除非显式的关闭,可以一直传输。所以两个“头”的意思不是一个意思

    2020-01-10
    4
  • HelloBug
    老师好,如何理解HTTP协议的多数据通道共享一个连接?

    作者回复: 一个tcp连接

    2018-11-26
    2
    4
  • N_H
    客户端和服务端建立tcp连接时,为了验证连接是否还在,客户端和服务端之间应该会不停地发送一些确认的信息,保证客户端和服务端之间的连接还在。(推测的)

    作者回复: keepalive

    2019-06-29
    3
  • UDP应该也有错误检测的吧,老师是否补充下UDP检验和^_^

    作者回复: 有校验,没有重传

    2019-03-12
    3
  • A-李永军
    刘老师,udp传输怎样能避免乱序呢?

    作者回复: udp应该一个包是一个,每个都是完整的,不用排序。如果非得要排,就需要应用层自己来排序了

    2018-11-18
    2
    3
  • Yang
    我想问一下,如果一个公司开发应用,他们可以自己选择用UDP 还是TCP吗?

    作者回复: 没有特殊要求,就tcp吧

    2019-09-08
    2
  • 嘎子
    哈哈哈!太赞啦!写的好好笑!

    作者回复: 谢谢

    2019-07-03
收起评论
大纲
固定大纲
TCP 和 UDP 有哪些区别?
UDP 包头是什么样的?
UDP 的三大特点
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部