UDP

devtools/2025/2/22 21:17:42/

UDP 是什么?

提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)

UDP 的特点有哪些?

1)UDP 是无连接的;

2)UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态(这里面有很多参数)

3)UDP 是面向报文的

4)UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 IP 电话,实时视频会议等);

5)UDP 支持一对一、一对多、多对一和多对多的交互通信;

6)UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。

UDP 对应的应用层协议

DNS :用于域名解析服务,使用 53 号端口

SNMP:简单网络管理协议,使用 161 号端口

TFTP(Trival File Transfer Protocal):简单文件传输协议,使用 69 号端口

UDP 和 TCP 的区别

1)TCP 面向连接(如打电话要先拨号建立连接)。UDP 是无连接的,即发送数据之前不需要建立连接。

2)TCP 提供可靠的服务。也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达。UDP 尽最大努力交付,既不保证可靠交付。

3)TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构字节流。UDP 是面向报文的,UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 IP 电话,实时视频会议等)。

4)每一条 TCP 连接只能是点到点的。UDP 支持一对一、一对多、多对一和多对多的交互通信。

5)TCP 首部开销 20 字节。UDP 的首部开销小,只有 8 个字节。

6)TCP 的逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道。

7)UDP 是面向报文的,发送方的 UDP 对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层,论应用层交给 UDP 多长的报文,它统统发送,一次发送一个。而对接收方,接到后直接去除首部,交给上面的应用层就完成任务了。因此,他需要应用层控制报文的大小。TCP 是面向字节流的,他把上面应用层交下来的数据看成无结构的字节流会发送,可以想象成流水形式的,发送方 TCP 会将数据放入“ 蓄水池 ” (缓存区),等到可以发送的时候就发送,不能发送就等着 ,TCP 会根据当前网络的拥塞状态来确定每个报文段的大小。

为什么域名解析用 UDP 协议?

1、报文开销小:UDP 是一种无连接的传输层协议,其报文头部相对简单,只有 8 个字节,相比之下,TCP 的报文头部至少为 20 个字节。在进行域名解析时,通常查询请求和响应的数据量都比较小,UDP 的小报文头部可以减少网络传输的开销。

2、快速传输:UDP 不需要建立链接,直接将数据封装成报文发送出去,因此可以快速地进行数据传输,对于域名解析这种对响应时间要求较高的应用来说,UDP 的快速传输性非常重要。

在进行 UDP 编程的时候,一次发送多少 bytes 好?

在进行 UDP 编程时,一次发送的数据量并没有一个绝对的最佳值,因为它受到多种因素影响,对于不同的系统,不同的要求,其得到的答案是不一样的。

我这里仅对像 ICQ 一类的发送聊天信息的情况做分析,对于其他情况,你或许也能得到一点帮助:首先,我们知道,TCP/IP 通常被认为是一个四层协议系统,包括链路层、网络层、运输层、应用层。UDP 属于运输层,下面我们由下至上一步一步来看:

以太网(Ethernet) 数据帧的长度必须在 46 - 1500 字节之间,这是由以太网的物理特性决定的。这个 1500 字节被称为链路层的 MTU (最大传输单元)。但这并不是指链路层的长度被限制在 1500 字节,其实这个 MTU 指的是链路层的数据区。并不包括链路层的首部和尾部的 18 个字节。

所以,事实上,这个 1500 字节就是网络层 IP 数据报的长度限制。因为 IP 数据报的首部为 20 字节,所以 IP 数据报的数据区长度最大为 1480 字节。而这个 1480 字节就是用来放 TCP 传来的 TCP 报文段或 UDP 传来的 UDP 数据报的。又因为 UDP 数据报的首部 8 字节,所以 UDP 数据报的数据区最大长度为 1472 字节就是我们可以使用的字节数。

当我们发送的 UDP 数据大于 1472 的时候会怎么样呢?

这也就是说 IP 数据报大于 1500 字节,这个时候发送方 IP 层就需要分片。把数据报分成若干片,使每一片都小于 MTU 。而接收方 IP 层则需要进行数据报的重组。这样就会多做许多事情,而更严重的是,由于 UDP 的特性,当某一片数据传送中丢失时,接收方便无法重组数据报,将导致丢弃整个 UDP 数据报。

因此,在普通的局域网环境下,建议将 UDP 的数据控制在 1472 字节以下为好。

进行 Internet 编程时则不同,因为 Internet 上的路由器可能会将 MTU 设为不同的值。

如果我们假定 MTU 为 1500 来发送数据的,而途径的某个网络的 MTU 值小于 1500 字节,那么系统将会使用一系列机制来调整 MTU 值,使数据报能够顺利到达目的地,这样就会做许多不必要的操作。鉴于 Internet 上的标准 MTU 值为 576 字节,所以建议在进行 Internet 的 UDP 编程时。最好将 UDP 的数据长度控制在 548 字节(576-8-20)以内。


http://www.ppmy.cn/devtools/160256.html

相关文章

MySQL的聚簇索引与非聚簇索引

前言 首先我们要了解到,聚簇索引只能有一个,而非聚簇可以有多个。在本文中可以了解到,范围查询时聚簇索引的优势,以及非聚簇索引在频繁更新时的劣势。   在MySQL中,主键索引通常就是聚簇索引,如果没有显式…

VSCode 实用快捷键

前文 VSCode 作为文本编辑神器, 熟练使用其快捷键更是效率翻倍, 本文介绍 VSCode 常用的实用的快捷键 实用快捷键 涉及到文本操作, 搜索定位, 多光标, 面板打开等快捷键 功能快捷键复制光标当前行 (不需要鼠标选中) Ctrl C 剪切光标当前行 (不需要鼠标选中) Ctrl X 当前行下…

mysql 使用 CONCAT、GROUP_CONCAT 嵌套查询出 json 格式数据

tb_factory表由 factory_code 和 factory_name 字段,查询出如下所示效果: {"factory_0001": "工厂1","factory_0002": "工厂2",... } select sql: SELECT CONCAT( "{",GROUP_CONCAT( C…

Android-构建问题记录

文章目录 报错 No signature of method: build_4tl7r8s6qna6qev75ywim0904.android() is applicable for argument types: (build_4tl7r8s6qna6qev75ywim0904 r u n c l o s u r e 2 ) v a l u e s : [ b u i l d 4 t l 7 r 8 s 6 q n a 6 q e v 75 y w i m 0904 _run_closure2…

4、IP查找工具-Angry IP Scanner

在前序文章中,提到了多种IP查找方法,可能回存在不同场景需要使用不同的查找命令,有些不容易记忆,本文将介绍一个比较优秀的IP查找工具,可以应用在连接树莓派或查找IP的其他场景中。供大家参考。 Angry IP Scanner下载…

无人设备遥控器之视频回传篇

无人设备遥控器的视频回传是指将无人设备(如无人机)采集到的视频信号传输回遥控器或其他接收设备的过程。这一过程在诸多应急情境中显得尤为重要,它能为指挥中心的决策者、调度系统以及AI分析等提供实时画面。 一、主流回传方式 目前&#x…

利用Java爬虫精准获取商品SKU详细信息:实战案例指南

在电商领域,SKU(Stock Keeping Unit,库存单位)详细信息是电商运营的核心数据之一。它不仅包含了商品的规格、价格、库存等关键信息,还直接影响到库存管理、价格策略和市场分析等多个方面。本文将详细介绍如何利用Java爬…

基于机器学习的医疗图像分析:从图像识别到精准诊断

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…