欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 浅谈网络 | 传输层之UDP协议

浅谈网络 | 传输层之UDP协议

2025/11/6 21:29:08 来源:https://blog.csdn.net/weixin_48711696/article/details/143926599  浏览:    关键词:浅谈网络 | 传输层之UDP协议

目录

    • TCP 和 UDP 有哪些区别?
    • UDP 包头解析
    • UDP 的三大特点
    • UDP 的三大使用场景
    • 总结

传输层里比较重要的两个协议,一个是 TCP,一个是 UDP。

TCP 和 UDP 有哪些区别?

大部分人会想到:TCP 是面向连接的,UDP 是面向无连接的。

什么是面向连接?
面向连接的协议在通信之前会先建立连接。例如,TCP 通过三次握手建立连接,而 UDP 则无需如此。这么一看,似乎 TCP 的“三次握手”也可以被 UDP 模仿,简单发三个包就行了。那么,二者有何不同?

建立连接的本质是为了在客户端和服务端之间维护一个连接状态,并通过一定的数据结构记录交互状态。这些状态维护为 TCP 提供了所谓“面向连接”的能力。

TCP 的特性

  • 可靠交付

    TCP 提供可靠的数据传输,保证数据无差错、不丢失、不重复,并按序到达。相比之下,IP 包本身不具备可靠性,一旦丢失,便无法挽回。而 TCP 则通过状态维护和机制补偿,实现了可靠传输。

  • 面向字节流

    TCP 是面向字节流的协议,数据被抽象为一个连续的流,收发时没有明确的分段。虽然底层仍然依赖 IP 包(一个一个地发送),但 TCP 通过状态管理,将其抽象成一个完整的数据流。而 UDP 直接继承了 IP 包的特性,按数据报发送,每个报文独立处理。

  • 拥塞控制

    TCP 能根据网络状况进行流量控制。例如,发现丢包或网络质量恶化时,它会调整发送速率,避免进一步加剧拥堵。UDP 则完全不管这些——应用让我发多少,我就发多少,不考虑网络的承受能力。

  • 有状态服务

    TCP 是有状态的,它精确记录了已经发送和接收的数据状态,比如:发送到哪里了?接收到了什么?应该接收哪些?任何差错都会被捕获和修复。UDP 则是无状态的,简单发送,不关心是否丢包、是否按序到达。

UDP 的特性
UDP 简单地继承了 IP 包的特性,基本不维护状态,发送和接收全靠应用层自己处理。它的特点可以总结为:

  • 不保证可靠性:丢包、错包都可能发生,UDP 不会纠正这些问题。

  • 不保证顺序:数据可能乱序到达,应用层需要自己排序。

  • 基于数据报:UDP 直接处理每个独立报文,不会抽象为流。

  • 无拥塞控制:UDP 不关心网络情况,不会主动调整发送速率。

对比总结
可以简单比喻:

  • TCP 是有“脑子”的协议,它通过状态维护和机制保证可靠、流畅的数据传输。
  • UDP 是“没脑子”的协议,它只负责把数据发出去,其他问题完全不管。

如果把网络通信比作家庭,MAC 层负责定义局域网络的行为,IP 层定义整个网络端到端的传输行为。这两层奠定了通信的“基因”:以包为单位传输,包的单独选路和传递不保证可靠性。基于这些基因,UDP 完全继承了特性,几乎没有自己的思想。而 TCP 则在此基础上,通过复杂的状态管理,成为了更智能的协议。

UDP 包头解析

在讨论 UDP 包头之前,我们需要理解数据包的传输过程:

当一个 UDP 数据包到达目标机器时,MAC 层首先验证包的目标 MAC 地址是否匹配。如果匹配,它会剥离 MAC 层头部,并将剩余部分传递给IP 层。IP 层检查 IP 包头中的目标 IP 地址是否匹配当前机器。如果匹配,IP 层会继续解析,判断数据包应该交由哪个协议处理。

IP 包头的作用
在 IP 包头中,有一个 8 位协议字段,用于标识当前传输的协议类型,例如 TCP 或 UDP。如果该字段指向 UDP,系统会将 IP 头剥离,并将剩下的部分交给 UDP 协议进行处理。

UDP 包头的作用
当 IP 层交出 UDP 数据后,UDP 层需要解析自己的包头。那么 UDP 包头的内容是什么样的呢?

  1. 端口号
    UDP 包头中有两个端口号字段:

    • 源端口号:表示数据来自哪个端口。
    • 目标端口号:表示数据要发往哪个端口。
      正是通过目标端口号,系统能够将数据交给对应监听该端口的应用程序。
  2. 长度字段
    表示整个 UDP 数据报的长度,包括 UDP 包头和数据的总长度。

  3. 校验和

    UDP 提供了简单的错误检测机制,利用校验和字段确保数据传输的完整性。尽管 UDP 不负责重传或纠正错误,但校验和可以帮助检测数据是否被破坏。

UDP 包头格式
UDP 包头固定为 8 字节,结构如下图。

在这里插入图片描述
UDP 包头特点
与 TCP 包头相比,UDP 包头非常简单,仅包含必要信息。没有复杂的状态管理字段,也没有用于重传的机制。正因为如此,UDP 的数据传输效率较高,适用于实时性要求强的场景(如视频流、在线游戏等)。

总结
UDP 包头的设计简洁高效,核心作用是:

  • 使用 端口号 确定数据的目标应用程序。
  • 使用 校验和 检查数据完整性。

尽管 UDP 不提供可靠性和顺序保证,但其轻量化的特性使得它成为对传输效率要求较高场景的首选。与之相比,TCP 的包头则包含了更多状态管理信息,为复杂的数据传输提供支持。

UDP 的三大特点

UDP 就像个简单直白的小孩子,有以下三个显著特点:

  1. 沟通简单

    UDP 没有复杂的“花花肠子”,省去了繁琐的连接建立和状态维护。它的设计非常简洁:

    • 没有冗长的包头:仅包含端口号、长度和校验和字段。

    • 没有复杂的机制:不需要考虑重传、流量控制等逻辑。

它天真地相信网络世界是美好的,数据包发出去就能到达目的地,丢包和错误是小概率事件。因此,它的通信效率极高。

  1. 不设防的信任
    UDP 不需要像 TCP 那样建立连接:
    • 任何人都可以通过端口发送数据给它。
    • 它也可以毫无顾忌地向任何人发送数据,甚至能同时广播给多个目标。

这种“开放式”的沟通方式让 UDP 非常灵活,但也意味着它缺乏安全性和可靠性。

  • 坚持到底的“愣头青”
    UDP 从不根据网络环境调整自己的行为:
    • 不关心拥塞控制:即使网络已经挤得喘不过气,它也会按照应用要求的速率继续发包。
    • 不考虑丢包情况:数据丢失时,它不会重发,交给应用自己处理。

这种“不懂变通”的性格让 UDP 非常适合对实时性要求高的场景,比如在线直播、实时游戏等。

UDP 的三大使用场景

基于 UDP 的简单高效和“不拘小节”,它适用于以下场景:

  1. 资源受限,容忍失败的内网应用

    UDP 的设计简单,不需要大量资源,非常适合内网环境或者对丢包不敏感的场景。
    比如:

    • DHCP:动态获取 IP 地址的协议。因为内网环境可靠性较高,即使丢包也可以重新尝试,适合使用 UDP。
    • PXE 和 TFTP:在操作系统未加载前,资源受限的设备需要轻量级协议下载操作系统镜像,UDP 的简洁正是它们的最佳选择。

在这些场景中,UDP 像“初出茅庐的新人”,虽然简单,但足以应对没有复杂需求的项目。

  1. 广播和多播的通信需求

    UDP 的无连接特性,非常适合广播和多播场景。
    例如:

    • 广播(DHCP):DHCP 使用广播让局域网中的设备接收地址分配请求。
    • 多播(组播地址 D 类 IP):支持一对多通信,例如 VXLAN 协议通过 UDP 实现跨路由器的组播。

这种“公开透明”的特性,让 UDP 成为广播和多播协议的基础。而 TCP 的连接机制决定了它只能用于一对一通信,不适合这种场景。、

  1. 低时延、高实时性、容忍丢包的应用

    UDP 的轻量级和简单性,使其非常适合对时延敏感、追求实时性且能容忍少量丢包的应用场景。
    比如:

    • 在线游戏:实时游戏需要尽可能快地传输位置信息和动作指令,少量丢包对体验影响不大。
    • 实时视频/音频流:直播或视频通话,时延比丢包更关键,宁可画面模糊、声音断续,也不能拖延。

这些场景中,UDP 的“不讲究”反而成为优势。TCP 在丢包时的重传和拥塞控制会拖慢传输速度,而 UDP 则坚持“能发多少发多少”,即使网络环境恶劣,也不轻易退缩。

总结

如果将 TCP 比作成熟的社会人,UDP 则是头脑简单的小朋友。TCP 复杂,UDP 简单;TCP 维护连接,UDP 谁都相信;TCP 会坚持知进退;UDP 愣头青一个,勇往直前;

UDP 虽然简单,但它有简单的用法。它可以用在环境简单、需要多播、应用层自己控制传输的地方。例如 DHCP、VXLAN、QUIC 等。

思考题:
1、都说 TCP 是面向连接的,在计算机看来,怎么样才算一个连接呢?
2、你知道 TCP 的连接是如何建立,又是如何关闭的吗?

1.两端各自记录对方的IP端口序列号连接状态等,并且维护连接状态
2.三次握手四次挥手

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词