【Linux 网络】 传输层协议之UDP协议

news2024/10/6 5:21:19

UDP协议

  • UDP协议的位置
  • UDP协议的特点
  • UDP协议的格式
  • UDP使用注意事项

UDP协议的位置

在这里插入图片描述
在网络套接字编程时用到的各种接口,是位于应用层和传输层之间的一层系统调用接口,这些接口是由系统提供的。我们可以通过这些接口来搭建上层应用,比如HTTP协议。我们经常说HTTP协议是基于TCP的,实际就是因为HTTP是在网络套接字编程时使用TCP相关接口的基础上搭建的。

基于UDP的应用协议有:

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议

UDP协议的特点

  • 无连接:知道对端的IP的端口号就能直接传输,不需要进行连接。
  • 不可靠:UDP没有提供可靠的数据传输保证。它不使用确认、重传和流量控制等机制,因此数据包可能会丢失、重复、乱序或损坏。如需可靠性,需要在应用层实现相应的机制。
  • 面向数据报:不能够灵活地控制读写数据的次数和数量

面向数据报

应用层交给UDP多长的报文,UDP就原样发送,既不会拆分,也不会合并,这就叫做面向数据报。

比如用UDP传输100个字节的数据:

  • 如果发送端调用一次sendto,发送100字节,那么接收端也必须调用对应的一次recvfrom,接收100个字节;而不能循环调用10次recvfrom,每次接收10个字节。

UDP的缓冲区

  • UDP没有真正意义上的发送缓冲区。调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
  • UDP具有接收缓冲区。但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。
  • UDP的socket既能读,也能写,因此UDP是全双工的。

为什么UDP要有接收缓冲区?

如果UDP没有接收缓冲区,那么就要求上层及时将UDP获取到的报文读取上去,如果一个报文在UDP没有被读取,那么此时UDP从底层获取上来的报文数据就会被迫丢弃。

UDP协议的格式

UDP协议的格式如下图:
在这里插入图片描述

  • 16位源端口号:指定发送方的应用程序使用的端口号
  • 16位目的端口号:指定接收方的应用程序使用的端口号
  • 16位UDP长度:表示整个数据报(UDP首部+UDP数据)的最大长度
  • 16位UDP校验和:用于检测传输中是否发生错误。校验和字段可以选填,如果填写了,则需要进行校验和计算,否则置为0。

  UDP如何将报头与有效载荷进行分离

UDP的报头中只含有四个字段,每个字段的长度都是16位,总共8字节,因此UDP实际上采用的是定长报头。UDP在读取报文时读取完前8个字节后剩下的就是有效载荷。

UDP如何决定将有效载荷交付给上层对应的协议?

UDP协议本身并不涉及交付有效载荷给上层的协议的过程。UDP是一种无连接的传输协议,不对数据包的内容进行解析和处理。
实际上,是将UDP有效载荷交付给上层对应的协议处理的。应用程序在使用UDP协议发送和接收数据时,会约定好数据包的格式和含义,以便接收方的应用程序能够正确解析和处理接收到的数据。

例如,当一个应用程序使用UDP协议发送DNS查询请求时,它会构造一个UDP数据包,其中有效载荷包含了DNS查询的相关信息。在接收方,如果有一个DNS服务器应用程序在监听UDP端口,它会接收该数据包,并根据DNS协议的规范进行解析和处理有效载荷中的DNS查询请求,UDP本身不参与其中。

UDP使用注意事项

需要注意的是,UDP协议报头当中的UDP最大长度是16位的,因此一个UDP报文的最大长度是64K(包含UDP报头的大小)。

然而64K在当今的互联网环境下,是一个非常小的数字。如果需要传输的数据超过64K,就需要在应用层进行手动分包,多次发送,并在接收端进行手动拼装

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

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

相关文章

如何解决制造业数字化改造的障碍?

制造业的数字化转型可能是一个复杂且具有挑战性的过程,但解决以下障碍有助于为成功实施铺平道路: 抵制变革:数字化转型中最常见的挑战之一是员工的抵制,尤其是那些习惯传统方法的员工。为了克服这一问题,组织需要培养一…

Redis 简介

文章目录 Redis 简介 Redis 简介 Redis(Remote Dictionary Server),远程词典服务器,基于 C/S 架构,是一个基于内存的键值型 NoSQL 数据库,开源,遵守 BSD 协议,Redis 由 C语言 实现。…

深入理解设计模式之门面模式

深入理解设计模式之门面模式 什么是门面模式? 门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,用于访问复杂子系统中的一组接口。门面模式通过封装子系统的复杂性,提供了一个更简…

解决联想小新耳机孔没声音问题

联想小新电脑AMD,今天突然遇到扬声器有声音、蓝牙耳机也有声音、耳机孔插上耳机没有声音。 话不多说,直接上解决办法,亲测有用: (1)“此电脑”右键,选“管理” (2)进入…

第1集丨Vue 江湖 —— Hello Vue

目录 一、简介1.1 参考网址1.2 下载 二、Hello Vue2.1 创建页面2.2 安装Live Server插件2.4 安装 vue-devtools2.5 预览效果 一、简介 Vue(读音 /vjuː/, 类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设…

idea插件开发-自定义语言5-References and Resolve

实现自定义语言 PSI 中最重要和最棘手的部分之一是解析References。解析References使用户能够从 PSI 元素的使用(访问变量、调用方法等)导航到该元素的声明(变量的定义、方法声明等)。其实就是实现Navigate | Declaration or Usag…

OpenCVForUnity(十)扩张与侵蚀效果

文章目录 前言扩张案例展示 侵蚀案例展示 结语: 前言 在这个教程中,您将学习两种常见的图像形态运算符:侵蚀和膨胀。为此,您将使用OpenCV库中的两个函数:erode 和 dilate。 形态操作是一组基于形状的图像处理操作。形态…

java+springboot+mysql校园宿舍报修管理系统

项目介绍: 使用javaspringbootmysql开发的校园宿舍报修管理系统,系统包含管理员、维修员、学生角色,功能如下: 管理员:楼栋管理、宿舍管理、维修人员管理、学生管理;报修管理(派单给维修员&am…

k8s概念-StatefulSet

StatefulSet 是用来管理有状态应用的控制器 StatefulSet 用来管理某Pod集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符StatefulSet | KubernetesStatefulSet 运行一组 Pod,并为每个 Pod 保留一个稳定的标识。 这可用于管理需要持久化存储或稳…

系统架构师---UP统一过程常考概念

前言: 在 计算机诞生的年代,计算机是一种 只有天才才能掌握的工具。人们对软件的 认知仅仅停留在程序的层面上,所谓的软件开发就是那些能够掌握计算机的天才们写的一些只有计算机才能理解的二进制序列 。但是随着技术的发展,软件…

【计算机网络】传输层协议 -- TCP协议

文章目录 1. TCP协议的引入2. TCP协议的特点3. TCP协议格式3.1 序号与确认序号3.2 发送缓冲区与接收缓冲区3.3 窗口大小3.4 六个标志位 4. 确认应答机制5. 超时重传机制6. 连接管理机制6.1 三次握手6.2 四次挥手 7. 流量控制8. 滑动窗口9. 拥塞控制10. 延迟应答11. 捎带应答12.…

手撕SpringBoot的自定义启动器

一. 前言 哈喽,大家好,最近金九银十,又有不少小伙伴私信辉哥,说自己在面试时被问到SpringBoot如何自定义启动器,结果自己不知道该怎么回答。那么今天就手把手地带着大家,去看看在SpringBoot中到底该怎么实…

半导体制造工艺流程

本资料仅用于学习和讨论,如有侵权请反应 1、半导体制造工艺流程-要求 1.1 英特尔50亿纳米的制作工艺 2、第一步 晶圆加工 2.1 第一步 晶圆加工 2.2 第二步 氧化 2.3 第三步 光刻 2.4第四步 刻蚀 2.5 第五步 薄膜沉积 2.6 第六步 互连 2.7 第七步 测试 2.8…

奥威软件SaaS BI系统:一站式数据可视化解决方案

SaaS BI 系统是 Software as a Service 商业智能的缩写,是一种基于云计算的商业智能解决方案。它允许用户通过互联网访问和分析数据,而无需安装和维护昂贵的硬件和软件。如今将BI系统SaaS化已成趋势,越来越多的企业开始寻找SaaS BI系统&#…

IDA分析实例android_crackme/EasyJNI/Transformers/pingan2

文章目录 第一个实例android_crackme将32位的android_server放到手机目录下给android_server赋予root更改root用户组运行android_serverpc端端口转发安装apk,并运行app打开32位IDA并attach到进程先使用jadx看java层逻辑定位要分析的方法IDA 给两个方法打断点 第二个…

无涯教程-jQuery Mock Test函数

本节介绍了与 jQuery Framework 相关的各种模拟测试。您可以在本地计算机上下载这些样本模拟测试,并在方便时离线解决。每个模拟测试均随附一个模拟测试键,可让您验证最终分数并为自己评分。 Mock Test I Mock Test II Mock Test III Mock Test IV Q 1 -关于jQuery,以下哪项是…

【LeetCode 75】第十六题(1004)最大连续1的个数

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 给一个只有0和1的数组,可以将K个0变成1,问最大能得到的全是1的子数组的长度是多少。 这算是很经典的滑动…

领域驱动设计(五) - 战术设计 - 【3/3】聚合与模型的构建方法

这一小章主要阐述下如何组织上述分析后的模型。 使用聚合(Aggergate)进行建模,并且在设计中结合工厂(Factory)和资源库(Repositiory,注意Orm映射出的持久化对象不是领域模型的范围,在…

深入理解ClickHouse跳数索引教程

跳数索引 影响ClickHouse查询性能的因素很多。在大多数场景中,关键因素是ClickHouse在计算查询WHERE子句条件时是否可以使用主键。因此,选择适用于最常见查询模式的主键对于表的设计至关重要。 然而,无论如何仔细地调优主键,不可…

Java导出数据到Excel

Java导出数据到Excel分3步处理 1、构建Workbook 数据 2、设置Workbook 格式 3、导出到Excel 1、构建Workbook 数据 public static void buildData(Workbook wb, List<Person> list) {Sheet sheetName wb.createSheet("sheetName");Row row sheetName.creat…