UDP 协议

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
全局流量管理 GTM,标准版 1个月
简介: UDP 协议

目录

一、什么是协议

二、认识UDP 协议

2.2 UDP 协议的报文格式

2.3 使用UDP 协议传输大文件时的策略

2.4 UDP协议的工作流程


 一、什么是协议

为了使数据在网络上传输(从源头到达目的),网络通信的参与方必须遵循相同的规则,如:怎么样建立连接、怎么样传输、怎么样互相解析信息等。只有遵守这个约定,计算机之间才能相互通信交流。这样的规则就被称之为协议(protocol),它最终体现为在网络上传输的数据包的格式。

协议约定了层级和层级之间的调用关系,上层协议调用下层协议,下层协议给上层协议提供支持,不能跨层调用。

详细内容查看:程序猿眼中的协议:TCP / IP 五层网络模型_保护小周ღ的博客-CSDN博客

真实的网络协议使用的是 TCP / IP 五层网络模型,也是当下最广泛使用的网络的模型。

image.gif编辑

本次讲述的 UDP 协议是传输层上比较常用的协议。

另外一个更厉害的协议 TCP 敬请期待下一篇博客~


二、认识UDP 协议

UDP(User Datagram Protocol)是一种无连接的传输层协议,它不保证数据传输的可靠性,但是具有传输速度快、开销小等特点。UDP协议主要用于需要快速传输数据且对数据的可靠性要求不高的场景,如在线游戏,分布式系统信息的传输(短距离的传输 UDP 的传输的效率是很高的)。

2.1 UDP协议的特点:

    1. 无连接:UDP协议在传输数据之前不需要建立连接,也不需要维护连接状态,可以看作是一股脑地传输,因此传输速度快。
    2. 不可靠:UDP协议不保证数据传输的可靠性,因为它不提供重传机制、异常处理等功能,如果数据在传输过程中出现丢失或错误,UDP协议也不会进行任何处理。
    3. 面向数据报:数据报是通过网络传输的数据的基本单元,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和 “荷载” 数据之间的关系。UDP协议的头部只有8个字节,相比TCP协议的头部要小得多,开销也相对小。该知识点下文详细介绍。
    4. 全双工通信:通信允许数据在两个方向上同时传输,比如打电话,通话双方可以同时讲话。
    5. 支持广播和多播:UDP协议支持广播和多播,可以将数据同时发送给多个主机。

    敲黑板面试题:TCP 与 UDP有什么区别?

    TCP 是面向有连接,采用字节流传输,数据传输可靠的全双工通信协议。

    UDP 是面向无连接,采用数据报传输,数据传输不可靠的全双工通信协议。


    2.2 UDP 协议的报文格式

    学习协议其中一个重要的环节就是认识协议报文格式,一个协议具体是怎么组织数据的。

    image.gif编辑 编辑

    UDP报文主体分为两个部分: UDP报头(占8个字节的数据) + UDP数据 / UDP载荷

      • 荷载:比较容易理解,里面存储的是应用层的数据报。
      • UDP报头:源端口,目的端口,报文长度,校验和,组成,每个部分占两个字节,可以描述的数据范围是 [0, 65535] 。

      解析报文:

        1. 源端口:表示数据从哪里来,端口号可认为是一个进程的标识(那个软件发送的信息),传输层毕竟给应用层提供服务。
        2. 目的端口:表示数据到哪里去,数据报到达指定主机后,将数据报给那个软件解析(进程,通信双方约定了统一的协议格式就可以互相解析数据)。
        3. 传输层的数据报进入网络层后会添加网络层报头,网络层报头中会描述 源 IP 和 目的IP ,这层协议可以用来在庞大的网络环境中找到目标主机。
        4. 报文长度:描述了一条 UDP 数据报所占字节大小,因为长度只占 2个字节,所以他能描述的数据范围是 [0, 65535], 所以一条 UDP 数据报最大长度是 65536 个字节 = 64KB;
        5. 校验和:网络传输并非完全稳定,信息的传输方式有多种多样,难免会出现意外,例如说:恶劣天气,强磁场干扰,传输介质,信号衰减等原因,所以校验和存在的目的就是用来判断一下,当前传输的数据是否出错,如果校验和不对,传输的数据一定不对,即使校验和是对的,数据也有一定的概率是错误的,校验和的校验方式通常会以数据内容(正文荷载中的数据)作为参数进行算法计算,当接收方拿到 UDP 数据报后, 把荷载中的数据拿出来代入校验和算法,再把结果与校验和比较是否相同,即可判断数据传输是否准确。(前提是输入的内容一样,按照统一算法得到的校验和结果也是一样的)。只能由接收端判断数据是否可靠,UDP 协议不提供重发机制,错了就错了,只管传输。
        6. UDP 数据报正文\荷载:里面包含的是应用层数据报的信息,UDP 报文长度(最大值) - UDP 报头即可得荷载大小,报文长度最大是可以描述 64字节,UDP整个报头占 8 个字节,所以荷载最大存储空间(一条UDP 数据报最大能携带的应用层信息)是 64 - 8 = 56字节。

        端口号详解:

        所谓的端口,可以看作应用程序的门牌号一样,客户端可以通过ip地址找到对应的目的端,但是目的端是有很多应用程序端口的,每个应用程序对应一个端口号;

        比如说我电脑qq 给 你发了一条消息,这个条消息通过网络发送到你的电脑,进入你的电脑后,这条消息怎么能知道要给那个应用程序呢(进程)?微信也是腾讯的,也没见着能接收qq 发的消息啊,关键的就是应用程序在启动时会绑定了一个端口号(端口号在一定范围内可以随机使用),一台主机中的端口号不可重复,所以消息在进入主机后就会根据端口号将信息发送到指定应用程序,应用程序就根据应用层的数据报协议(这个可以是通信双方约定的协议,qq自己的协议)解析信息。

        端口号只占两个字节,可以描述的数据范围是 [0, 65535] ,也就是我们可以使用的端口号只有这么多,对于小于 1024 的端口号被称之为“知名端口号”,是提供给一些名气比较大的服务器使用,例如:http 服务器的端口号位 80, ssh 的端口号为:22, ftp 服务器的端口号是 21。所以我们要在程序设计中尽量避免使用这部分端口。


        2.3 使用UDP 协议传输大文件时的策略

        上文介绍 一条 UDP 数据报最大可以传输 64 个字节,去掉报头之后有效的报文荷载只有56字节,也就是说一条 UDP 数据最多传输 56个字节的内容,对于高速发展的科技,太小了,一首歌就有几兆呢(M)。

        在面对大型文件传输的时候,UDP 将一个大的数据报拆分成多个部分,使用多个 udp 数据报来传输,作为接收方(应用层)来讲,就需要与发送方(应用层)约定好数据报的解析协议。

        例如:我qq给女朋友发送了一大段小作文(应用层的数据报),刷刷的好几百KB, 使用 UDP 协议传输,一条UDP 数据报肯定是不够的,就可以分割成好几条数据报传输,作为接收方(女朋友)的qq, 就需要将发送过来的 UDP 数据报解析\分用成应用层数据报,这个时候根据某种相互约定好的协议才能解析。

        image.gif编辑 编辑

        作为接收方来讲以上数据如何由多条UDP 数据报,组合成一条应用层的数据报呢 ?

        所谓封装 UDP 数据报,分割应用层数据报什么的实质上就是字符串的拼接,也就是说数据报的本质就是字符串,协议就是描述了如何 封装\分用\解析 这些字符串。

        UDP协议并没有对分割后的数据报作出重新组合的规定,这是由应用层协议负责实现(因为是应用层选择使用 UDP 协议),那么就需要根据UDP协议长度这一特性来设计应用层数据报,一般来说,应用层协议会在发送端进行相关处理,将原始数据分割成多个UDP数据报发送出去,在接收端进行接收之后再进行重新组合,实现方法可以有多种,比如可以在UDP首部附加序列号等信息,接收端通过这些信息来拼接数据报,包括使用一些特殊的分隔符区分一条应用层数据报等等,这方面都是可以通过应用层的手段来控制的。

        使用一些特殊的分隔符区举个例子:

        image.gif编辑

        这只是一种应用层协议约定的策略,是可以自定义的,前提是通信双方都采用该协议。


        当需要我们使用UDP 协议传输大文件时,还有一种方式是建议直接使用 TCP 协议传输,哈哈,即使没有 UDP 传输的快,但是数据传输的真实性高,还没有 UDP 这么麻烦,TCP 是面向字节流传输的嘛,同时也需要通信双方约定好应用层协议,方便解析信息。


        2.4 UDP协议的工作流程

          1. 应用程序将应用层数据报传输给UDP协议。
          2. UDP协议将数据封装成UDP数据报(直接在应用层数据报的基础上加上UDP 报文),包括源端口号、目的端口号、数据长度等信息。
          3. UDP协议将UDP数据报传输给IP协议。
          4. IP协议将UDP数据报封装成IP数据报,包括源IP地址、目的IP地址等信息。
          5. IP数据报通过网络传输到目的主机。
          6. 目的主机的IP协议将IP数据报解封装成UDP数据报。
          7. UDP协议将UDP数据报传输给应用程序

          总结:UDP协议是一种简单、快速的传输协议,适用于实时应用程序和需要快速传输数据的应用场景。但是由于它不保证数据传输的可靠性,因此在传输重要数据时需要使用其他协议,如TCP协议。


          不用勉强自己去做不喜欢的事

          相关实践学习
          如何在云端创建MySQL数据库
          开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
          Sqoop 企业级大数据迁移方案实战
          Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
          相关文章
          |
          3月前
          |
          存储 网络协议 算法
          UDP 协议和 TCP 协议
          本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
          111 1
          UDP 协议和 TCP 协议
          |
          11天前
          |
          存储 网络协议 安全
          用于 syslog 收集的协议:TCP、UDP、RELP
          系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
          |
          26天前
          |
          监控 网络协议 网络性能优化
          网络通信的核心选择:TCP与UDP协议深度解析
          在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
          53 3
          |
          5月前
          |
          存储 网络协议 Ubuntu
          【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
          UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
          300 2
          |
          1月前
          |
          网络协议 SEO
          TCP连接管理与UDP协议IP协议与ethernet协议
          TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
          41 4
          |
          3月前
          |
          网络协议
          UDP 协议
          UDP 协议
          142 58
          |
          2月前
          |
          网络协议 网络性能优化 C#
          C# 一分钟浅谈:UDP 与 TCP 协议区别
          【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
          52 1
          |
          2月前
          |
          网络协议 算法 数据格式
          【TCP/IP】UDP协议数据格式和报文格式
          【TCP/IP】UDP协议数据格式和报文格式
          175 3
          |
          2月前
          |
          存储 网络协议 算法
          更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】
          UDP和TCP各有所长,UDP以其低延迟、轻量级的特点适用于对实时性要求极高的应用,而TCP凭借其强大的错误检测、流量控制和拥塞控制机制,确保了数据的可靠传输,适用于文件传输、网页浏览等场景。理解它们的工作原理,特别是UDP的缓冲区管理和TCP的8种策略,对于优化网络应用的性能、确保数据的高效和可靠传输至关重要。开发者在选择传输层协议时,应根据实际需求权衡利弊,合理利用这两项关键技术。
          89 5
          |
          2月前
          |
          JavaScript 安全 Java
          谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
          下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
          84 1