传输层协议 --- UDP

news2024/9/27 7:32:31

序言

 在之前的文章 Socket 编程 中,我们只是简单的知道了怎么利用 UDP协议 或者是 TCP协议 来发送我们的数据,并且我们还知道 UDP 是不可靠的,TCP 是可靠的。但这是为什么呢?底层的构造和策略决定他们的属性!这篇文章中,我们就来先认识 UDP 吧。


UDP 协议端格式

 每一层都有相应的协议,所谓协议,我们也可以简单认为就是在正文之前加上若干结构体字段(报头),确保数据的正确传输、识别、处理以及可能的校验和错误恢复。UDP 的报头如下:
在这里插入图片描述
在正文之前一共包含 64 位长度(8字节)的字段,每个字段的功能如下:

  • 源端口号(Source Port):占用 2 个字节,表示发送方端口号
  • 目标端口号(Destination Port):占用 2 个字节,表示接收方端口号
  • 长度(Length):占用 2 个字节,表示 UDP 数据报文的长度,包括头部和数据部分
  • 检验和(Checksum):占用 2 个字节,用于检测 UDP 数据报在传输过程中是否有错误。如果检验和出错,就会直接将报文丢弃
    - 数据(Data):占用 0 个或多个字节,实际传输的数据部分

在这里我们着重介绍一下 长度 字段,占 2 个字节,构成于 报头 + 报文。我们可以简单计算一下,2 个字节表示的最大数字是 — 2^16 - 1 = 65535,这就代表一个 UDP 数据报的最大长度为 65535 字节,再减去报头的长度 8 字节,那么能传输的最大的报文的长度为 65527 字节。当然这只是理论情况下,实际情况下看到受到其他的限制。


UDP 协议的特点

1. 无连接

UDP 在发送数据之前 不需要建立连接,数据包可以直接发送到目标主机。这种无连接性减少了建立连接和断开连接的开销,并提高了传输效率。
 这个是我们直观感受过的,当时我们的服务端并未启动,但是客户端依然可以将数据传送到服务端!这说明两者之间通信是不需要建立连接状态的。

2. 不可靠(尽最大努力交付)

UDP 不保证可靠交付,即不保证数据包能够到达目标主机或按发送顺序到达。如果数据包在传输过程中丢失或损坏,UDP不会进行重传或错误恢复。
 结构决定特性!UDP 协议端的格式很简单,只是负责将数据发出,并不会去维护发送了哪些信息!

3. 面向报文

UDP 对应用程序交下来的报文不再划分为若干个分组来发送,也不把收到的若干个报文合并后再交付给应用程序。UDP 保留了报文的边界,使得接收方能够准确地识别出每个报文的内容。

 通过了解 UDP,大家不觉得其实它的特征就很像很早之前信件传输吗?一封信发出去,谁也不知道它是否能到达收信人手中,就算收到了也不知道。


UDP 的缓冲区

UDP 是全双工的,可以接受的同时发送,但是他还和 TCP 有点不一样,两者都是全双工,但是 TCP 是包含发送缓冲区和接收缓冲区的,但是 UDP 没有发送缓冲区:
在这里插入图片描述

 这是因为 UDP 对发送数据添加报头后立马就会发送,不会进行其他的操作,而 TCP 为了达到一个可靠通信,在发送数据时会进行相应的处理(在后面介绍 TCP 时会介绍)。并且 UDP 这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致,如果缓冲区满了,再到达的 UDP 数据就会被丢弃(果然是不靠谱的协议)。


UDP 的使用注意事项

 刚才我们谈到,一次 UDP 传输的数据最大为 65527 字节,然而该大小在当今的互联网环境下,是一个非常小的数字。如果我们需要传输的数据超过该数字,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。


总结

 在这篇文章中我们了解了 UDP,感觉内容不是很多,也比较好理解。但是在之后学习 TCP 可是截然不同了,毕竟后者为了 可靠 可是下了不少功夫,希望大家这篇文章有所收获!

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

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

相关文章

从环境部署到开发实战:消息队列 RocketMQ

文章目录 一、消息队列简介1.1 什么是消息队列1.2 常见消息队列对比1.3 RockectMQ 核心概念1.4 RockectMQ 工作机制 (★) 二、RocketMQ 部署相关2.1 服务器单机部署2.2 管控台页面 三、RocketMQ 的基本使用3.1 入门案例3.2 消息发送方式3.2.1 同步消息3.…

微服务-流量染色

1. 功能目的 通过设置请求头的方式将http请求优先打到指定的服务上,为微服务开发调试工作提供便利 请求报文难模拟:可以直接在测试环境页面上操作,流量直接打到本地IDEA进行debug请求链路较长:本地开发无需启动所有服务&#xf…

前端常见算法题集

很久没练算法了,打算接下来一段时间每天坚持写题和写题解 这是一篇前端常用算法题集,题目从从简到难,编程语言主要为JavaScript,顺便练习和熟记js的各种方法... 目录 字符串类 1.字符串相加 字符串类 下图为js中常用的字符串方…

神经网络介绍及其在Python中的应用(一)

作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~ 个人主页:小高要坚强的博客 当前专栏:Python之机器学习 本文内容:神经网络介绍及其在Python中的线性回归应用 作者“三要”格言:要坚…

使用python爬取豆瓣网站?如何简单的爬取豆瓣网站?

1.对python爬虫的看法 首先说说我对python的看法,我的专业是大数据,我从事的工作是java开发,但是在工作之余,我对python又很感兴趣,因为我觉得python是一门很好的语言,第一:它可以用来爬取数据…

fmql之字符驱动设备(2)

例行的点灯来喽。 之前是寄存器读写&#xff0c;现在要学习通过设备树点灯。 dtsled.c 寄存器写在reg 把用到的寄存器写在设备树的led节点的reg属性。 其实还是对寄存器的读写。 &#xff08;不推荐&#xff09; 头文件 #include <linux/kernel.h> #include <li…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-26

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-26 1. LLMs Still Can’t Plan; Can LRMs? A Preliminary Evaluation of OpenAI’s o1 on PlanBench Authors: Karthik Valmeekam, Kaya Stechly, Subbarao Kambhampati LLMs仍然无法规划&#xff1b;LRMs可以…

【通俗易懂】FFT求解全过程,各参数详细解释

在进行FFT全过程讲解之前&#xff0c;小编先给大家解释一下&#xff0c;在FFT中出现的一些参数名词解释。 &#xff08;1&#xff09;采样频率 Fs Fs 1 / 采样间隔 根据奈奎斯特定理&#xff1a;Fs ≥ 最高频率分量的两倍&#xff0c;这样才能避免混叠 &#xff08;2&…

解决macOS安装redis以后不支持远程链接的问题

参考文档:https://blog.csdn.net/qq_37703224/article/details/142542179?spm1001.2014.3001.5501 安装的时候有个提示, 使用指定配置启动: /opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf那么我们可以尝试修改这个配置文件: code /opt/homebrew/…

傅里叶级数在机器人中的应用(动力学参数辨识)

B站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清华大学李永乐老师教你如何理解傅里叶变换&#xff0c;辨清美颜和变声原理&#xff0c;&#xff01;&#xff01;_哔哩哔哩_bilibiliB站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清…

AI 智能体 | 手捏素材选题库 Coze Bot,帮你实现无限输出

做自媒体的同学经常遇到的一个痛点就是无限输出&#xff0c;那怎么才能有源源不断的选题呢&#xff1f;那就是搭建一个选题素材库。 下面就为大家介绍一下基于 Coze Bot 快速搭建素材选题库&#xff0c;希望能让大家才思泉涌。 一、流程拆解 日常素材库积累的过程可以描述为…

eslint-plugin-react的使用中,所出现的react版本警告

记一次使用eslint-plugin-react的警告 Warning: React version not specified in eslint-plugin-react settings. See https://github.com/jsx-eslint/eslint-plugin-react#configuration . 背景 我们在工程化项目中&#xff0c;常常会通过eslint来约束我们代码的一些统一格…

汽车总线之----J1939总线

instruction SAE J1939 是由美国汽车工程协会制定的一种总线通信协议标准&#xff0c;广泛应用于商用车&#xff0c;船舶&#xff0c;农林机械领域中&#xff0c;J1939协议是基于CAN的高层协议&#xff0c;我们来看一下两者之间的关系。在J1939 中&#xff0c;物理层和数据链路…

第13讲 实践:设计SLAM系统

设计一个视觉里程计&#xff0c;理解SLAM软件框架如何搭建&#xff0c;理解视觉里程计设计容易出现的问题以及解决方法。 目录 1、工程目标 2、工程框架 3、实现 附录 1、工程目标 实现一个精简版的双目视觉里程计。由一个光流追踪的前端和一个局部BA的后端组成。 2、工程…

asp.net mvc core 路由约束,数据标记DataTokens

》从0自己搭建MVC 》用 asp.net Core web 应用 空web 应用程序 需要配置 mvc服务 、mvc路由 新建 Controller 、Models、Views 》》》core 6 之前版本 vs2022 asp.net Core Web 应用&#xff08;模型-视图-控制器&#xff09; 不需要配置 就是mvc框架 asp.net Core web 应…

从Elasticsearch到RedisSearch:探索更快的搜索引擎解决方案

文章目录 RedisSearch 的关键功能与 ElasticSearch 对比性能对比产品对比 如何使用 Docker 安装 RedisSearch1. 获取 RedisSearch Docker 镜像2. 启动 RedisSearch 容器3. 验证安装 RedisSearch 使用示例1. 连接到 RedisSearch2. 创建索引3. 添加文档4. 执行搜索搜索所有包含 &…

【Geoserver使用】2.26.0版本发布主要内容

文章目录 前言一、GeoServer 2.26.0 版本二、主要内容1.Java17支持2.Docker更新3.搜索改进4.广泛的 MapML 改进4.重写演示请求页面5.栅格属性表扩展6.GeoCSS 改进7.地球静止卫星 AUTO 代码8.labelPoint 功能改进9.改进的矢量图块生成10.GeoPackage QGIS 兼容性改进11.新的图像马…

深度学习—神经网络基本概念

一&#xff0c;神经元 1.生物神经元与人工神经元 1.1神经元是人脑的基本结构和功能单位之一。人脑中有数1000亿个神经元&#xff0c;其功能是接受&#xff08;树突&#xff09;&#xff0c;整合&#xff08;细胞体&#xff09;&#xff0c;传导&#xff08;轴突&#xff09;和…

MySQL --用户管理

文章目录 1.用户1.1用户信息1.2创建用户1.3删除用户1.4修改用户密码 2.数据库的权限2.1给用户授权2.2回收权限 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。 1.用户 1.1用户信息 MySQL中的用户&#xff0c;都存储在系…

Spring Cloud 教程(二) | 搭建SpringCloudAlibaba

Spring Cloud 教程&#xff08;二&#xff09; | 搭建SpringCloudAlibaba 前言一、SpringBoot 与 SpringCloud 版本对应关系&#xff1a;二、SpringCloud 与 SpringCloudAlibaba版本对应关系&#xff1a;三、SpringCloudAlibaba版本 与 组件版本 对应关系&#xff1a;四、搭建S…