TCP/IP详解——UDP 协议

news2024/11/17 7:32:08

文章目录

  • 1. UDP
    • 1.1 UDP 头部
    • 1.2 UDP 校验和
    • 1.3 UDP 传输过程
    • 1.4 UDP-Lite
    • 1.5 最大 UDP 数据报长度
    • 1.6 UDP 输入队列

1. UDP

image-20230719145556046

UDP用户数据报协议(User Datagram Protocol)面向无连接的,也就是无需建立连接,传输不可靠。UDP仅仅是在IP服务的基础上增加了进程到进程之间的通信,使其不再是主机到主机的通信。

UDP是一个简单的==面向数据报==的传输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。如果IP数据报的长度超过网络的MTU,就要对IP数据报进行分片。如果需要,源端到目的端之间的每个网络都要进行分片

应用在对可靠性要求不高,传输速度和延迟要求较高时,用UDP代替TCP。UDP没有确认技术和滑动窗口机制。

为什么使用UDP

  • 更快,没有繁冗的建立过程。

  • 更少的报文类型,没有握手包,结束包,不需要数据确认包。

  • 需求更少的本地资源,不需要追踪每对seq和对应的ack。

  • 通常用在视频,语音通话等。

1.1 UDP 头部

image-20230719145712428

image-20231113212100560

TCP端口号和UDP端口号是相互独立的。(rsh和syslog=514)

尽管相互独立,如果TCP和UDP同时提供某种知名服务,两个协议通常选择相同的端口号,就是为了方便,而不是协议本身的要求。(DNS端口53)

说明

  • UDP也分为头部和数据区域两部分。UDP适合于实时数据传输,语言和视频通话。无法保证数据传输的可靠性。

  • Source Port和Destination Port:包含16位源端口号和16位目标端口号。(端口范围0-65535)

  • Length:16位UDP长度,与TCP不同,这里指的是头部和数据的字节长度。UDP头部长度为8字节,所以最少是8。

  • Checksum:16位UDP校验和,与TCP相同功能,该字段可选。(操作系统可以选择不计算UDP的校验和)

    image-20231113212658582

  • 伪首部的目的是在传输层检验数据的完整性。

Wireshark抓包查看

image-20231113215934262

1.2 UDP 校验和

image-20231113212658582

image-20231120140735589

  • UDP检验和覆盖UDP首部和UDP数据。UDP和TCP在首部中都有覆盖它们首部和数据的检验和。

    • 当UDP数据包被发送出去时,发送方会计算UDP首部和数据部分的检验和,并将这个检验和值放置在UDP首部中的检验和字段中。
    • 当接收方在接收到UDP数据包后,也会重新计算UDP首部和数据部分的检验和,并将结果与UDP首部中的检验和字段进行比较。如果两者一致,说明数据包在传输过程中没有发生错误,可以被接收方信任;如果不一致,则说明数据包可能已经损坏或者被篡改,接收方可能会丢弃这个数据包或者请求重新发送。
  • IP首部的校验和,只对IP的首部进行校验。

  • UDP的校验和字段是可选的(操作系统可以选择不计算UDP的校验和),而TCP的校验和字段是必须的

  • UDP数据报和TCP段都 “包含” 一个12字节的伪首部,它只是为了计算检验和而设置的,并不是真正的首部。其目的是让UDP两次检查数据是否已经正确到达目的地。(例如:IP没有接受地址不是本主机的数据包,以及IP没有把应传给另一个高层的数据报传给UDP)

  • IP计算校验和和UDP计算检验和之间存在不同的地方。首先,UDP数据报的长度可以为奇数字节,但是校验和算法是把若干个16bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了检验和的计算(也就是说,可能增加的填充字节不被传送)

如果接收端检测到检验和有差错,也就是发送出去的数据报和收到的数据报中的校验和值不一致,那么UDP数据报就被悄悄地丢弃,不产生任何差错报文(当IP层检测到IP首部检验和有差错时也这样做)

1.3 UDP 传输过程

image-20230719150023334

说明

  • UDP传输数据包是以有序方式发送到网络,每个数据包独立在网络中被发送,也就是说先发送的数据包不一定先到,因为UDP数据包没有序号需要应用程序提供报文到达确认,排序和流量控制等功能。通常情况下UDP采用实时传输机制和时间戳来传输语音和视频数据。

  • UDP不提供重传机制,占用资源小,处理效率高,一般处理一些时延敏感流量。如语音视频。

image-20230719150246015

UDP数据包传输

image-20231113214301346

如果网络中出现了过多的ICMP端口不可达的报文,就需要注意参数端口不可达的原因,是因为内网的主机过度的访问了内网许多的UDP端口等等…

1.4 UDP-Lite

有些应用程序可以容忍发送和接受数据中存在比特差错,但是UDP使用的校验和会覆盖整个报文(或者不计算校验和),为了解决这个问题,UDP-Lite出现,提供部分负载和检验和计算方法。

  • UDP-Lite是一个独立的协议,协议号为:136
  • UDP-Lite在UDP的基础上提供了一定程度的灵活性和容错能力。UDP-Lite允许在数据包传输过程中允许一定程度的数据损坏,而不会丢弃整个数据包。
  • UDP-Lite的主要应用场景是对于那些对数据传输的实时性要求较高、对于一定程度的数据损坏能够容忍的应用程序。例如,音频和视频流传输、实时游戏等。通过UDP-Lite,这些应用程序可以在保持实时性的同时容忍一定程度的数据丢失或损坏,从而提高了用户体验。

image-20231113215410413

UDP-Lite的校验和字段只检测部分的UDP内容。

UDP-Lite的工作原理如下

  1. 发送方将数据分割成多个数据包,并为每个数据包计算校验和。
  2. 在发送数据包时,应用程序可以通过设置特定的服务类型字段来指定UDP-Lite协议。
  3. 接收方收到数据包后,会检查校验和。如果校验和无误,则数据包被认为是完好的,并传递给上层应用程序。
  4. 如果校验和出现错误,接收方会根据应用程序的要求决定是否接受该数据包并传递给上层应用程序。接收方可以根据自身需求调整对数据损坏的容忍程度。
  5. 对于被接受的损坏数据包,接收方可以对其进行进一步的处理,如尝试修复数据或仅使用可用的部分数据。

1.5 最大 UDP 数据报长度

  • IP数据报的最大长度是65535字节,这是由IP首部16比特总长度字段所限制的。
  • 遇到的两个限制因素。第一,应用程序可能会受到其程序接口的限制。socket API提供了一个可供应用程序调用的函数,以设置接收和发送缓存的长度。对于UDP socket,这个长度与应用程序可以读写的最大UDP数据报的长度直接相关。现在的大部分系统都默认提供了可读写大于8192字节的UDP数据报(使用这个默认值是因为8192是NFS读写用户数据数的默认值)。
  • 第二个限制来自于TCP/IP的内核实现。可能存在一些实现特性(或差错),使IP数据报长度小于65535字节。
  • 在Sn0S 4.1.3下使用环回接口的最大IP数据报长度是32767字节。比它大的值都会发生差错。但是从BSD/386到SuOS4.1.3的情况下,Sun所能接收到最大IP数据报长度为3278字节(即32758字节用户数据)。在Solars 2.2下使用环回接口,最大可收发IP数据报长度为65535字节。从Solaris2.2到AIX 3.2.2,发送的最大IP数据报长度可以是65535字节。很显然,这个限制与源端和目的端的实现有关
  • 主机必须能够接收最短为576字节的IP数据报。在许多UDP应用程序的设计中,其应用程序数据被限制成512字节或更小,因此比这个限制值小。

1.6 UDP 输入队列

image-20231121094740789

UDP输入队列是指操作系统内核中专门用于存储待处理UDP数据包的缓冲区。当一台主机收到传入的UDP数据包时,这些数据包会首先被放置在UDP输入队列中。然后,相应的应用程序可以从队列中读取数据包并进行处理。

UDP输入队列的大小可能会受到操作系统内核参数的限制(上图中设置为256),通常以数据包数量或者内存大小为单位。如果UDP输入队列已满,新到达的UDP数据包可能会丢失,导致数据丢失和网络通信问题

如上图所示最先抵达服务器的是1和4,是因为缓存不够,其他数据报直接被丢掉了。

补充

  • 大多数的系统在某一时刻只允许一个程序端点与某个本地IP地址及UDP端口号相关联。当目的地为该IP地址及端口号的UDP数据报到达主机时,就复制一份传给该端点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1314296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDF转为图片

PDF转为图片 背景pdf展示目标效果 发展过程最终解决方案:python PDF转图片pdf2image注意:poppler 安装 背景 最近接了一项目,主要的需求就是本地的文联单位,需要做一个电子刊物阅览的网站,将民族的刊物发布到网站上供…

音视频参数介绍

一、视频参数概念 单个视频帧:可以简单地理解成为一张图片 单个视频帧主要的参数概念: 分辨率: 分辨率是指图像或显示器上像素的数量,通常用横向像素数乘以纵向像素数表示。例如,1920x1080 表示宽度为1920像素&…

数据结构 | Log-Structured Merge Tree (LSM Tree)

今天介绍LSM Tree这个数据结构,严格意义上来说,他并不像他的名字一样是一棵树型的数据结构,而更多是一种设计思想。 LSM Tree最先在1996年被提出,后来被广泛运用于现代NoSQL(非关系型数据库)系统中&#xf…

【Spark精讲】Spark与MapReduce对比

目录 对比总结 MapReduce流程 ​编辑 MapTask流程 ReduceTask流程 MapReduce原理 阶段划分 Map shuffle Partition Collector Sort Spill Merge Reduce shuffle Copy Merge Sort 对比总结 Map端读取文件:都是需要通过split概念来进行逻辑切片&…

CSS新手入门笔记整理:CSS常用属性表

字体样式 属性 属性值 说明 font-family 微软雅黑/苹方 字体类型 font-size 数值 字体大小 font-weight 数值/关键字 字体粗细(字重) font-style normal(正常(默认值))italic(斜体)oblique&am…

湖南财信:灰盒测试筑牢安全防线,保障差异化金融服务体系建设

湖南财信是国有独资公司,湖南省唯一的省级地方金融控股公司、省属国有大型骨干企业。湖南财信坚持金融科技战略,以数字化建设为驱动,创新融资服务手段,逐步打造出差异化产品与数字化服务体系,全方位、多维度推动金融服…

大语言模型:开启自然语言处理新纪元

导言 大语言模型,如GPT-3(Generative Pre-trained Transformer 3),标志着自然语言处理领域取得的一项重大突破。本文将深入研究大语言模型的基本原理、应用领域以及对未来的影响。 1. 简介 大语言模型是基于深度学习和变压器&…

WPF 基于TableControl的页面切换

文章目录 前言其它项目的UserControl切换TableControl添加按钮,隐去TableItem的Header 结论 前言 我想用WPF简单实现一个按钮视图切换的效果,但是我发现别人的实现效果非常的麻烦。 其它项目的UserControl切换 我网上找了个开源的项目,他是…

网络协议 - HTTP 协议详解

网络协议 - HTTP 协议详解 一 、基础概念URL请求和响应报文1. 请求报文2. 响应报文 二、HTTP 方法GETHEADPOSTPUTPATCHDELETEOPTIONSCONNECTTRACE 三、HTTP 状态码1XX 信息2XX 成功3XX 重定向4XX 客户端错误5XX 服务器错误 四、HTTP 首部通用首部字段请求首部字段响应首部字段实…

如何提升数据结构方面的算法能力?

谈及为什么需要花时间学算法,我至少可以列举出三个很好的理由。 (1)性能:选择正确的算法可以显著提升应用程序的速度。仅就搜索来说,用二分查找替 换线性搜索就能为我们帶来巨大的收益。 (2)安全性:如果你选用了错误的算法&…

软件供应链投毒 — NPM 恶意组件分析

聚焦源代码安全,网罗国内外最新资讯! 专栏供应链安全 数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的根本性、基础性问题。 随…

最新Redis7主从复制(保姆级教程)

前提准备:三台云服务器(吐血消费,点赞回血)也可以使用虚拟机创建三台,但是我搞了一天也连接不上,要是又可以连接上的大家可以教我一下,也可以参考一下或者大家可以参考一下这个大佬的配置&#…

【产品经理】产品增效项目落地,项目反哺产品成长

产品和项目是相辅相成的关系,产品的规范、成熟,为项目的快速落地提供支撑,项目的落地反哺产品,促进产品的成长成熟。 软件工程的初期是,我们需要什么,就立项项目,通过项目实现需要。 随着项目的…

hive的分区表和分桶表详解

分区表 Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多。 静态分区表基本语法 创建分区表 create table dept_p…

k8s中pod监控数据在grafana中展示

实现目标:将kubesphere[K8S]中运行的pod监控数据在grafana平台进行展示。 前提说明:需要在k8s每个集群中内置的prometheus配置中将pod指标数据远程写入到victoriametrics持久化数据库中。 实现效果如下: CPU使用量: round(sum by (namespace, pod) (irate(container_cpu…

ControlNet Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models TL; DR:ControlNet 使得我们能通过输入额外的条件图(如 Canny 边缘、人体姿态、深度图等),对 SD 生成结果的空间位置有更准确的控制。它拷贝 SD 部分…

网络协议 - UDP 协议详解

网络协议 - UDP 协议详解 UDP概述UDP特点UDP的首部格式UDP校验 參考文章 基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解。 UDP概述 UDP(User Datagram Protocol)即用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种…

在前端开发中,什么是前端数据缓存(caching)?它有哪些应用场景?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

C# WPF上位机开发(属性页面的设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在软件开发中,属性或者参数设置是很重要的一个部分。这个时候如果不想通过动态添加控件的方法来处理的话,那么可以通过tab控…

解决Chrome同一账号在不同设备无法自动同步书签的问题

文章目录 一、问题与原因?2. 解决办法 一、问题与原因? 1.问题 使用谷歌Chrome浏览器比较头疼的问题就是:使用同一个Google账号,办公电脑与家用电脑的数据无法同步。比如:办公电脑中的书签、浏览记录等数据&#xff0…