UDP协议【网络】

news2024/12/23 17:49:36

文章目录

  • UDP协议格式

UDP协议格式

在这里插入图片描述

  • 16位源端口号:表示数据从哪里来。
  • 16位目的端口号:表示数据要到哪里去。
  • 16位UDP长度:表示整个数据报(UDP首部+UDP数据)的长度。
  • 16位UDP检验和:如果UDP报文的检验和出错,就会直接将报文丢弃
    端口号大部分都是16位的,因为传输层协议当中的端口号就是16位的

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

  • UDP的报头当中只包含四个字段,每个字段的长度都是16位,总共8字节。UDP采用的是一种定长报头,UDP在读取报文时,读取完前8个字节后剩下的就都是有效载荷了。

UDP如何将有效载荷交付给上层?
UDP上层也有很多应用层协议,因此UDP必须想办法将有效载荷交给对应的上层协议,也就是交给应用层对应的进程。

应用层的每一个网络进程都会绑定一个端口号,服务端进程必须显示绑定一个端口号,客户端进程则是由系统动态绑定的一个端口号。UDP是通过报头当中的目的端口号来找到对应的应用层进程的

UDP报头实际就是一个位段类型

struct udp_header {
    unsigned int src_port:16; // 源端口号
    unsigned int dst_port:16; // 目的端口号
    unsigned int udp_len:16;  // UDP长度
    unsigned int udp_chk:16;  // 检验和
};

UDP数据封装:

  • 当应用层将数据交给传输层后,在传输层就会创建一个UDP报头类型的变量,然后填充报头当中的各个字段,此时就得到了一个UDP报头。
  • 此时操作系统再在内核当中开辟一块空间,将UDP报头和有效载荷拷贝到一起,此时就形成了UDP报文

UDP数据分用:

  • 当传输层从下层获取到一个报文后,就会读取该报文的钱8个字节,提取出对应的目的端口号。
    通过目的端口号找到对应的上层应用层进程,然后将剩下的有效载荷向上交付给该应用层进程。

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本身是会维护一个接收缓冲区的,当有新的UDP报文到来时就会把这个报文放到接收缓冲区当中,此时上层在读数据的时就从这个接收缓冲区当中进行读取,如果UDP接收缓冲区当中没有数据,那上层在读取时就会被阻塞
因此UDP的接收缓冲区的作用:将接收到的报文暂时的保存起来,供上层读取

基于UDP的应用层协议

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

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

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

相关文章

【电路】1.2 电流和电压的参考方向

1.2 电流和电压的参考方向 参考方向就是一个假设的方向(类似中学物理的正方形),选参考方向的原因是电路结构略显复杂, 无法直接看出支路电压、电流的实际方向,参考方向可以任意选择,任意支路电压、电流只有…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【272-284】

272. 包基本介绍 272.1 看一个应用场景 272.2 包的三大作用 272.3 包的基本语法 273. 包原理 274. 包快速入门 在不同的包下面创建不同的Dog类 275. 包命名 276. 常用的包 一个包下,包含很多的类,java 中常用的包有: java.lang.* //lang 包是基本包,默认引入&…

【英语】5. 考研英语语法体系

文章目录 前言句字的成分一、常规句型简单句(5 种)1. 定义:句子中只包含 *一套主谓结构* 的句子。(一个句子只能有一个谓语动词)2. 分类 并列句(由关联词组成)(3 种)基本…

Unity Shader Graph基础包200+节点及术语解释

目录 Master Stack: Vertex block: Fragment block​编辑 Alpha Clip Threshold Dither transparency Graph Inspector Texture 2d Array/Texture 3d Virtual Texture Sampler State Keywords Boolean keyword 右键显示所有节点 简化测试系列节点&#x…

[SpringBoot] 苍穹外卖--面试题总结--上

前言 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解(一)-CSDN博客 3--苍穹外卖-SpringBoot项目中员工管理 详解(二)-CSDN博客 4--苍穹外码-SpringBoot项目中分类管理 详…

ThreeJS入门(091):THREE.PositionalAudio 知识详解,示例代码

作者: 还是大剑师兰特 ,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,webgl,ThreeJS,canvas&#xf…

二叉树—相关结构

1.相关的结构问题(分治递归) 1.1节点个数 1.2叶子结点个数 叶子结点:没有孩子的节点 1.3树的高度(深度) 1.4二叉树第k层的节点个数 1.5二叉树查找值为x的节点 2.二叉树的创建和销毁 2.1二叉树的构建 二叉树遍历_牛客…

mysql语句执行过程

具体流程如下: 1】当客户端的SOL发送到MySQL时,首先是到达服务器层的连接器,连接器会对你此次发起的连接进行权限校验,以此来获取你这个账号拥有的权限。当你的账号或密码不正确时,会报用户错误。连接成功如果后续没有任何操作&am…

xlwings直接读取使用区域的数据

这里的读取方法,不用最大行号最大列号,直接使用used_range对应的方法 代码如下: import xlwings as xwfile_path r...\AAA.xlsx# 实例化app,打开文件 app_e xw.App(VisibleFalse,add_bookFalse) work_book appe.books.open(f…

New Phytologist | 中国科学院地理所:菌根共生途径塑造树木根经济空间

本文首发于“生态学者”微信公众号! 根经济空间是环境驱动下一系列根属性复杂互作的结果,本质上反映了植物地下碳(“货币”)投资与养分(“商品”)收益的多维策略权衡关系(图1)。然而…

【java】数据类型与变量以及操作符

各位看官:如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论,感谢您的支持!!! 目录 一.字面变量: 二:数据类型 1.1:int类型:&#xff0…

高速机器人的点动与直线运动

工业机器人中的点动和直线运动非常之重要,接下来说一下他们的实现过程。 点动: 点动包括两个部分,第一个点动是每一个关节电机的点动,第二个是机器末端向xyz的三个方向进行点动处理。 第一个点动是非常简单的,即把对…

IO系列-3 NIO基本概念:Buffer和Channel和Selector

1.缓冲区 1.1 Buffer类介绍 java在BIO中通常使用字节数组byte[]和字符数组char[]实现数据传输,在NIO中,引入了缓冲区Buffer进行数据传输,相对数组提供了更多的属性和API.Buffer在java.nio包中引入,Buffer对于常见的类型有对应的…

【C++指南】类和对象(二):类的默认成员函数——全面剖析 :构造函数

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 ​ 阅读本篇文章之前,你需要具备的前置知识:类和对象的基础 点击下方链接 【C指南…

Stable Diffusion的核心插件—ControlNet!万字长文解读!

前言 一、介绍 论文地址:[https://arxiv.org/abs/2302.05543](https://arxiv.org/abs/2302.05543 "https://arxiv.org/abs/2302.05543")代码地址:[GitHub - lllyasviel/ControlNet: Let us control diffusion models!](https://github.com/ll…

Python和C++胶体粒子三维残差算法模型和细化亚像素算法

🎯要点 使用信噪比、对比度噪声比和点扩展函数量化实验数据,增强共聚焦显微镜成像。参考粒子跟踪算法:使用二维和三维径向模型细化亚像素。胶体粒子三维图形分割学习模型模拟检测球形胶体。使用网格搜索优化模型和归一化处理以避免光漂白。 …

idear 控制台乱码、查询结果、参数、控制台乱码

一、 -Dfile.encodingUTF-8 二、 三、 四、 五、

【区间选点】

题目 代码 左端点排序区间合并 #include <bits/stdc.h> using namespace std; #define null -0x3f3f3f3f #define x first #define y second typedef pair<int, int> PII; const int N 1e510; vector<PII> v; int main() {int n;cin >> n;for(int i…

LLM大模型企业应用实战-“消灭”LLM幻觉的利器

大模型一定程度改变了我们生活工作的思考方式&#xff0c;越来越多的个人和企业在思考如何将大模型应用到更加实际的生产生活。 1 LLM的问题 1.1 幻觉 LLM因为是一个预训练模型&#xff0c;它已有一些知识储备&#xff0c;我们提的问题跟他的知识储备不相符时&#xff0c;会…

当管理遇上AI,工作效率翻了3倍!

最近这段时间&#xff0c;很多企业都开始降薪、裁员。 在降本增效的大背景下&#xff0c;企业但凡有什么大动作&#xff0c;压力往往都会转嫁到管理者的身上。 一方面&#xff0c;要调大家的状态&#xff0c;处理团队中的各种琐事&#xff1b;另一方面&#xff0c;要及时响应…