网络:UDP协议

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》
文章目录
- 前言
- UDP协议
- 报头和有效载荷分离的问题
- 有效载荷向上交付的问题,也就是交给哪个进程?
- 怎么确定把报文收全了?
- UDP报头是如何封装的呢?
- UDP特点
- UDP的缓冲区
- 基于UDP的应用层协议
- 总结
前言
本文是对UDP协议的知识总结
UDP协议
UDP协议格式如下:

- 16位源端口号:标识发送数据报的应用程序所在的端口。
- 16位目的端口号:标识接收数据报的应用程序所在的端口。
- 16位UDP长度:表示整个UDP数据报的长度,包括UDP头部和数据部分。
- 16位UDP检验和:表示整个UDP数据报的长度,包括UDP头部和数据部分。
这里我们有几个问题?
报头和有效载荷分离的问题
UDP协议使用固定报头长度(8字节)的方式,来分离报头和有效载荷。
有效载荷向上交付的问题,也就是交给哪个进程?
UDP报头字段中16位目的端口号就是标识接受数据报的进程。
怎么确定把报文收全了?
UDP协议,对于小于8字节的报文会直接丢弃,毕竟光是UDP报头大小就是8字节;对于大于8字节的报文,会用 16位UDP长度 - 报头大小 = 数据长度 和 16位UDP检验和 的方式来确定报文是否收全。
UDP报头是如何封装的呢?
报头是一个结构化字段,也就是结构体。

如果我们一次接受大量的UDP报文,那操作系统要不要对这些报文进行管理?要进行管理。如何管理?先描述,在组织。内核中,为了管理报文,定义了sk_buff结构体。

知道了上面两个结构体,我们就可以以使用 udp 发送 hello 给127.0.0.1:8888为列子,来了解UDP报头是如何封装的。
- 定义一个 sk_buff 和 一个缓冲区。刚开始 data 和 tail指向同一个地址。

- data指针向前移动5个字节(hello 的长度),也就是开辟了5个字节的空间,然后,将 hello 从用户层拷贝到内核层。

- 定义一个 struct udphdr 结构体,在将16位原端口号,16位目的端口号,16位UDP长度,16位UDP检验和信息填充。然后,data再前移8个字节,再见报头字段拷贝到缓冲区。

到这里,对报文进行UDP封装就完成了。
以下是 linux-2.6.11.10下的udphdr结构体 和 sk_buff结构体


UDP特点
- 无连接:知道对端的IP和端口号就直接进行传输,不需要建立链接
- 不可靠:没有确认应答机制,没有重传机制,如果因为网络故障导致报文无法发到对方,UDP协议也不会给应用层返回任何错误信息
- 面向数据报:不能够灵活的控制读写数据的次数和数量(应用层交给UDP多长的有效载荷,UDP会加上报头直接发送,不会拆分,也不会合并)
UDP的缓冲区
- UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续传输动作
- UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报文的顺序和发送UDP报文顺序的一致;如果缓冲区满了,再到达的接收端主机的UDP报文就会被丢弃
基于UDP的应用层协议
- NFS:网络文件系统
- TFTP:简单文件传输协议
- DHCP:动态主机配置协议
- BOOTP:启动协议
- DNS:域名解析协议
总结
以上就是我对于UDP协议的知识总结

相关文章:
网络:UDP协议
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言UDP协议报头和有效载荷分离的问题有效载荷向上交付的问题,也就是交给哪个进程?怎么确定把报文收全了?UDP报头是如何封装的呢&…...
linux与unix
不同点 1开源性 linux是开源的,unix是闭源的 2跨平台性 linux具有很好的跨平台性,可以运行在多种硬件平台 unix大多需要与指定硬件配套使用 3相关操作 linux既可以进行命令行操作,也可以进行图形化的操作 unix只是命令行下的操作 4对…...
计算机网络29——Linux基本命令vim,gcc编译命令
1、创建新用户 2、给用户设置密码 3、切换到新用户 切换到root用户 4、删除用户 5、查看ip 6、ping 查看物理上两台主机是否联通 7、netstatus 8、nslookup 查看网址的地址 9、负载均衡与容灾备份 负载均衡:指将负载(工作任务)进行平衡、分…...
uniapp离线(本地)打包
安卓离线打包 注意:jdk建议选择1.8 下载Android Studio配置gradle仓库地址 第一步:先下载对应的版本,进行压缩包解压 第二步:在电脑磁盘(D盘),创建文件夹存放压缩包并进行解压,并创…...
如何编写一个爬虫以实时获取某平台商品价格
编写一个爬虫来实时获取某个平台的商品价格是一项实用的任务,可以帮助用户了解市场动态或监控价格变化。以下是一个简单的爬虫示例,使用 Python 的 requests 和 BeautifulSoup 库来抓取商品价格。为了演示,我将以一个假设的电商网站为例&…...
声网SDK脚本运行错误
文章目录 运行步骤无法运行.bat电脑出现警告--更改执行策略若无出现-更新power shell搜索最新版本的 PowerShell安装新版本 仍无法解决-手动下载第三方库 2024-9-9运行步骤 无法运行.bat 电脑出现警告–更改执行策略 若无出现-更新power shell 搜索最新版本的 PowerShell 在…...
Docker + Win 10 学习记录
下载Docker Release notes | Docker Docs 推荐使用4.33版本,最新的Docker版本在win10 22H2无法安装。需要升级到win11. 查看Win10版本是否与最新版的Docker兼容 运行 win R, 然后输入winver 如果你的Docker版本无法在当前的win10安装,请更…...
GlusterFS分布式存储
目录 一、GlusterFS分布式存储概述 1、GFS概念 2、GFS特点 3、GFS术语 4、GFS架构 5、GFS工作流程 6、GlusterFs的卷类型 6.1、 分布式卷(Distributed Volume) 6.2、条带卷(Striped Volume) 6.3、复制卷(Rep…...
ARM/Linux嵌入式面经(三八):绿盟科技
文章目录 @[toc]堆和栈是怎么实现的?基本概念实现方式栈的实现堆的实现面试官的追问堆和栈的运用是怎样运用的、怎样存储的?回答栈(Stack)堆(Heap)深度对比面试官可能的追问Linux系统中进程与进程之间的通信方式有哪些?1. 管道(Pipe)2. 共享内存(Shared Memory)3. 消…...
C#的数据类型转换
目录 C#的数据类型转换 1.隐式转换 2.显式转换 3.Convert类 4.字符串解析 本篇文章来分享一下C#的数据类型转换,主要包括四种方法:隐式转换、显式转换、Convert类、字符串解析。 C#的数据类型转换 1.隐式转换 隐式转换是在不丢失数据的情况下由编译…...
Oracle重做日志文件的添加及删除
在Oracle数据库中,添加和删除日志组文件是数据库维护中的常见操作,它们对于数据库的恢复能力和性能都有重要影响。以下是关于如何在Oracle中添加和删除日志组文件的详细步骤: 一、添加日志组文件 添加日志组文件是为了增加数据库的冗余度和…...
JavaWeb学习
文章目录 学习路线MavenMaven 坐标依赖管理生命周期 1. Web入门HTTP协议Tomcat 2. 请求响应- 请求1. 简单参数2. 实体参数3. 数组集合参数4. 日期参数5.Json参数6.路径参数- 响应响应数据 3.分层解耦三层架构分层解耦IOC & DI入门IOC详解DI详解 4. MySQL数据库设计1. MySQL…...
云原生信息安全:筑牢数字化时代的安全防线
云原生信息安全:筑牢数字化时代的安全防线 一、云原生信息安全概述 云原生安全包含两层重要含义。一方面,面向云原生环境的安全,目标是防护云原生环境中的基础设施、编排系统和微服务等系统的安全。在云原生内部,安全机制多以云原…...
双击就可以打开vue项目,而不用npm run dev
右键点击桌面或其他位置,选择“新建” -> “快捷方式”,在“对象的位置”处直接输入“npm run dev”,然后下一步 自定义一个快捷方式名称 完成后,桌面会创建一个快捷方式,右键快捷方式选择属性,可以看…...
大数据时代的等保测评:数据安全与隐私保护
在大数据时代,等保测评(信息安全等级保护测评)对于数据安全与隐私保护具有至关重要的意义。随着大数据技术的飞速发展,数据已成为企业最宝贵的资产之一,但同时也带来了前所未有的安全挑战。以下是对大数据时代等保测评…...
SpringCloud (1) 服务拆解
1 服务拆解和治理 1.1 服务拆解 微服务的核心就是服务拆分,将传统的大项目拆分为多个微型服务(服务或微服务),实现服务之间"高内聚(微服务职责单一),低耦合(微服务功能相对独立)"的目的 (1) 水平(横向)拆分:先搭出拆分框架,比如【公共服务】(比如:common服务,client…...
STM32F407单片机编程入门(十) IWDG独立看门狗详解及实战含源码
文章目录 一.概要二.独立看门狗介绍1.独立看门狗基本介绍2.独立看门狗功能描述3.独立看门狗复位时间 三.CubeMX配置一个独立看门狗IWDG例程四.CubeMX工程源代码下载五.小结 一.概要 什么是单片机看门狗 看门狗(WDT)是一个定时器,开启看门狗定…...
solana项目counter,测试过程中执行报错记录分享
跟随HackQuest部署counter项目,使用 Solana 官方提供的 playgroud 。这个平台让我们的部署和测试过程变得更加简便高效。 合约代码 lib.rs中复制以下代码 use anchor_lang::prelude::*; use std::ops::DerefMut;declare_id!("CVQCRMyzWNr8MbNhzjbfPu9YVvr97…...
[Unity Demo]重启项目之从零开始制作空洞骑士Hollow Knight第一集:导入素材以及建立并远程连接git仓库
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、导入素材二、使用步骤 1.建立并远程连接git2.github和仓库连接总结 前言 好久没来CSDN看看,突然看到前两年自己写的文章从零开始制作空洞骑士只…...
单链表(c语言简单实现)
单链表是一种常见的数据结构 一、结构特点 1. 由一系列节点组成,每个节点包含数据域和指向下一个节点的指针域。 2. 最后一个节点的指针域为 null,表示链表的结尾。 二、主要操作 1. 插入节点:可以在链表的头部、尾部或特定位置插入新节点。…...
嵌入式系统中单例模式的应用与实现
1. 单例模式在嵌入式系统中的核心价值在资源受限的嵌入式环境中,全局状态管理一直是个棘手的问题。想象一下这样的场景:温度传感器模块认为系统运行正常,而控制模块却检测到了硬件故障,两个模块对系统状态的认知出现分歧ÿ…...
霸王餐外卖接口对接中的签名校验、加密传输 Java 后端实现细节
霸王餐外卖接口对接中的签名校验、加密传输 Java 后端实现细节 在霸王餐(免费试吃)及外卖CPS分销系统的开发中,数据的安全性是核心命脉。由于涉及用户的隐私信息(如手机号、OpenId)以及核心的佣金计算逻辑,…...
linux下的pwm子系统
概念:PWM的概念就不多说了,pwm子系统如下:设备树:rk3568设备树pwm控制器里面已经配置了时钟,所以只需要使能节点就好了/* 使能 PWM12 节点 配置使用指定的引脚 状态设置为正常工作 */&pwm12 {status "okay";pinctrl-0 <&pwm12m1_…...
WaveTools:解决鸣潮玩家性能优化与数据管理痛点的开源工具
WaveTools:解决鸣潮玩家性能优化与数据管理痛点的开源工具 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools是一款专为《鸣潮》PC玩家设计的开源辅助工具,集成性能优化、账…...
图卷积神经网络安全最佳实践:7大关键漏洞防范与代码审计终极指南 [特殊字符]️
图卷积神经网络安全最佳实践:7大关键漏洞防范与代码审计终极指南 🛡️ 【免费下载链接】pygcn Graph Convolutional Networks in PyTorch 项目地址: https://gitcode.com/gh_mirrors/py/pygcn 图卷积神经网络(GCN)作为处理…...
告别驱动臃肿:Radeon Software Slimmer轻量优化实现显卡性能释放
告别驱动臃肿:Radeon Software Slimmer轻量优化实现显卡性能释放 【免费下载链接】RadeonSoftwareSlimmer Radeon Software Slimmer is a utility to trim down the bloat with Radeon Software for AMD GPUs on Microsoft Windows. 项目地址: https://gitcode.co…...
颠覆式Alienware设备控制:500KB轻量工具实现10倍性能提升与个性化体验
颠覆式Alienware设备控制:500KB轻量工具实现10倍性能提升与个性化体验 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 当你启动Alienware电…...
重构缠论分析范式:四维动态识别引擎突破技术交易认知瓶颈
重构缠论分析范式:四维动态识别引擎突破技术交易认知瓶颈 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 副标题:面向量化交易者的通达信可视化插件技术解析 揭示行业痛点&#…...
Ardyno库:Dynamixel伺服电机的嵌入式底层通信框架
1. Ardyno库概述:面向Dynamixel伺服电机的嵌入式控制框架Ardyno是一个专为嵌入式平台设计的轻量级C/C库,用于精确、可靠地控制Robotis公司系列Dynamixel智能伺服电机(如AX-12A、MX-28、XL-320、XH430、XM430等)。其核心价值不在于…...
Pixel Couplet Gen多场景落地:企业春节活动、校园AI展、微信小程序贺卡
Pixel Couplet Gen多场景落地:企业春节活动、校园AI展、微信小程序贺卡 1. 项目背景与核心价值 Pixel Couplet Gen是一款基于ModelScope大模型驱动的创新型春联生成工具。它将传统春节文化与现代像素艺术完美融合,为用户带来全新的数字文化体验。 核心…...
