TCP/IP详解——UDP 协议

文章目录

  • 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.rhkb.cn/news/218063.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(十六)Flask之蓝图

蓝图 Flask蓝图(Blueprint)是Flask框架中用于组织和管理路由、视图函数以及静态文件的一种机制。它提供了一种将应用程序拆分为更小、可重用组件的方式,使得项目结构更清晰,代码更易于维护。 使用Flask蓝图,可以将相…

MongoDB mapReduce案例分析

文章目录 第1关:mongoDB的插入和查询第2关:MongoDB的删除操作 第1关:mongoDB的插入和查询 编程要求 根据提示,在右侧编辑器补充代码,根据提示。 测试说明 平台会对你编写的代码进行测试: 测试输入&#…

Win10的SVN Adapter V1.0 中黄色感叹号 -- 解决

大部分都问题都可以通过: 关闭 SVN Adapter V1.0 在下载最新的 SVNDrv.sys替换 C:\Windows\System32\drivers 中的同名文件启动 SVN Adapter V1.0 就能成功 但是部分人的电脑 SVN Adapter V1.0 是有感叹号的,说明注册表有问题 先用 CCleaner 修复注册表…

电脑自动关机怎么设置?

电脑自动关机怎么设置?如果你是一名上班族,工作忙起来很多事情都会忘记做,有时候忙到很晚后紧急下班,就会忘记给电脑关机,电脑如果经常不关机,那么电脑就会超负荷的运转,大家都知道电脑的寿命是…

Django 表单处理:从前端到后台的全流程指南

概要 Django作为一个高级Python Web框架,它的表单处理能力强大,可以有效地处理用户输入,进行数据验证以及错误处理。本文将详细介绍如何在Django中创建、处理和使用表单。 1. Django表单系统的核心 Django的表单系统处理表单的生命周期&…

数据结构(七):树介绍及面试常考算法

一、树介绍 1、定义 树形结构是一种层级式的数据结构,由顶点(节点)和连接它们的边组成。 树类似于图,但区分树和图的重要特征是树中不存在环路。树有以下特点: (1)每个节点有零个或多个子节点…

C++报错:error C2238: 意外的标记位于“;”之前

报错信息如下: 编译遇见这样的错误信息主要有一下几种: 情况一: 多数情况下出现这种问题的原因是因为头文件重复包含:即头文件A包含了B,头文件B又包含了A,导致编译器在加载头文件时陷入死循环。 解决办法…

AR-LDM原理及代码分析

AR-LDM原理AR-LDM代码分析pytorch_lightning(pl)的hook流程main.py 具体分析TrainSampleLightningDatasetARLDM blip mm encoder AR-LDM原理 左边是模仿了自回归地从1, 2, ..., j-1来构造 j 时刻的 frame 的过程。 在普通Stable Diffusion的基础上,使用了1, 2, .…

MySQL DQL

目录 一、DQL概述 二、基础查询 三、条件查询 四、聚合查询 五、分组查询 六、排序查询 七、分页查询 八、其它测试 九、执行顺序 一、DQL概述 DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。查询关…

布局前沿技术,紫光展锐推动6G创新融合发展

随着5G进入规模化商用阶段,6G研究已在全球范围内拉开帷幕。2023年6月,ITU发布了《IMT面向2030及未来发展的框架和总体目标建议书》,在升级5G三大应用场景的同时,扩展出三个跨领域场景,形成6G的六大应用场景&#xff0c…

3D Web轻量引擎HOOPS Communicator如何实现对大模型的渲染支持?

除了读取轻松外,HOOPS Communicator对超大模型的支持效果也非常好,它可以支持30GB的包含70万个零件和3.5亿个三角面的Catia装配模型! 那么它是如何来实现对大模型的支持呢? 我们将从以下几个方面与大家分享:最低帧率…

Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版

—————————————————————————————————————————————— 博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码…

2024年天津体育学院专升本专业课网上报名确认缴费安排

天津体育学院2024年高职升本科专业考试报名安排 一、时间安排 1.报名时间:2023年12月19日9:00-12月21日17:00 2.缴费时间:2023年12月26日-27日 (考试考务费:体育教育专业:160元/人&#xff…

指数分布的随机变量

如果连续型随机变量的概率密度满足如下条件: 其中为常数,那么就称服从参数为的指数分布。 指数分布的重要性质---无记忆性:

进程调度的题解

目录 原题大意: 题目描述: 输入格式: 输出格式: 样例输入: 样例输出: 数据规模: 题目大意: 主要思路: dp的转移: dp初始化: 代码&…

RocketMQ源码 Broker-SubscriptionGroupManager 订阅组管理组件源码分析

前言 SubscriptionGroupManager 继承了ConfigManager配置管理组件,拥有将内存数据持久化到磁盘文件subscriptionGroup.json的能力。它主要负责维护所有消费组在内存中的订阅数据。 源码版本:4.9.3 源码架构图 核心数据结构 主要的数据结构比较简单&am…

云服务器Centos中安装Docker

云服务器Centos中安装Docker 1 简介DockerCentosCentos和Ubuntu区别 2 安装3 测试hello-world的镜像测试 1 简介 Docker Docker是一个开源的应用容器引擎,利用操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化。它支持将软件编译成…

【AI】如何准备mac开发vue项目的环境

为了在Mac上开发Vue项目,你需要准备一些工具和环境。以下是主要的步骤: 安装Node.js和npm: Vue.js是一个基于JavaScript的框架,因此你需要Node.js环境。访问Node.js官网下载并安装Node.js,这也会自动安装npm&#xff0…

事务的四个特性、四个隔离级别以及数据库的常用锁

事务的四个特性、四个隔离级别以及数据库的常用锁 四大特性 事务的四大特性,通常被称为ACID特性,是数据库管理系统(DBMS)确保事务处理的关键属性。这四大特性分别是: 原子性(Atomicity)&#x…

HHDESK个性化脚本功能

HHDESK可以把脚本配置在对话框中,生成按钮,便捷操作。 在界面下方的脚本框中,点击“”,选择新建; 随后在弹出框内填写名称及脚本,按需求选择填写参数,及运行过程中是否弹出参数框;…