UDP的详细解析
UDP的详细解析
文章目录
- UDP的详细解析
- UDP 概述
- UDP的首部格式
- 检验和的计算
- 抓包测试
- 参考
TCP/IP运输层的两个主要协议都是互联网的正式标准,即:
- 用户数据报协议UDP (User Datagram Protocol)
- 传输控制协议TCP (Transmission Control Protocol)
按照OSI的术语,两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元 TPDU.但在TCP/IP体系中,根据所使用的协议是TCP或UDP,分别称之为TCP报文段或UDP用户数据报。
UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。
下表为一些应用和应用层协议主要使用的运输层协议。
| 应用 | 应用层协议 | 运输层协议 |
|---|---|---|
| 名字转换 | DNS(域名系统) | UDP |
| 文件传送 | TDTP(简单文件传送协议) | UDP |
| 路由选择协议 | RIP(路由选择协议) | UDP |
| IP地址配置 | DHCP(动态主机配置协议) | UDP |
| 网络管理 | SNMP(简单网络管理协议) | UDP |
| 远程文件服务 | NFS(网络文件系统) | UDP |
| IP电话 | 专用协议 | UDP |
| 流式多媒体通信 | 专用协议 | UDP |
| 多播 | IGMP(网际组管理协议) | UDP |
| 电子邮件 | SMTP(简单邮件传送协议) | TCP |
| 远程终端接入 | TELNET(远程终端协议) | TCP |
| 万维网 | HTTP(超文本传送协议) | TCP |
| 文件传送 | FTP(文件传送协议) | TCP |
UDP 概述
用户数据报协议UDP只在IP的数据服务之上加了很少一点功能,这就是复用和分用的功能以及差错检测的功能。UDP的主要特点是:
-
UDP是无连接的,即数据发送之前不需要建立连接
-
UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
-
UDP是面向报文的。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这就是说应用层交给UDP多长的报文,UDP就照样发送,UDP一次交付一个完整的报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片。

-
UDP没有拥塞控制 网络出现拥塞不会使源主机的发送速率降低。这对某些实时应用使很重要的。
-
UDP 支持一对一、一对多、多对一和多对多的交互通信
-
UDP 的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
UDP的首部格式
用户数据报UDP有两个字段:数据字段和首部i段。首部字段只有8个字节,由四个字段组成,每个字段的长度都是两个字节。
- 源端口 源端口号。在需要对方回信时选用。不需要时可用全0
- 目的端口 目的端口号。这在终点交付报文时必须使用
- 长度 UDP 用户数据报的长度,其最小值时8(仅有首部)
- 检验和 检测UDP用户数据报在传输中是否有错。有错就丢弃。
当接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。

检验和的计算
UDP用户数据报首部中检验和的计算方法有些特殊。在计算检验和时要在UDP用户数据报之前加12个字节的伪首部。伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。通过上面那幅图我们可以看到伪首部中的字段信息:
- 32位源IP地址
- 32位目的IP地址
- 8位保留字节(置0)
- 8位传输层协议号(TCP是6,UDP是17)
- 16位报文长度(首部+数据)
检验和是如何工作的,我们可以通过观察下图:

我们对应着上面这副图看,其实计算这个检验和的过程其实就是,将加上伪首部后的数据按照每16位相加求和。将求和后的结果取反与UDP自带的检验和相与,若得到的结果是全1的则说明数据传输无误。(刚好这里的检验和在UDP是以2字节存储的,刚好是12位)。
若在求16位求和结果时发生进位,那么需要进行回卷。计算的过程可以参考这篇 回卷计算。
读到这里不知道大家会不会有问题,就是为什么UDP在计算检验和的时候需要加上伪首部。
对于这个问题最简单的回答就是:出于历史原因。如下图David P. Reed的解释:

前面这个不好翻译,在StackOverflow中找到了一个相关的解答:

抓包测试
UDP有着很广泛的应用场景。它的特点就像上面看到的很简单,没有流量控制以及差错重传等特点,作为传输层的协议常常被拿来和tcp协议比较。所以广泛应用于qq聊天,视频,网络电视,迅雷等场景。缺点就是容易丢包。
我拿qq聊天来抓个UDP数据包试试。
首先通过终端查看本机的ip地址和物理地址:

我们首先打开抓包工具然后,用qq给自己的Android手机发送聊天,可以发现抓包工具成功捕获信息,如下图。

我们查看一下第二条记录中的详细信息

现在我们再去看看所有qq是否有占用52652这个端口。用netstat -ano列出所有占用的端口号,同时用任务管理器查看qq的PID。查看的结果如下图,发现52652这个端口确实被qq所占用。

参考
-
UDP 检验和原理
-
为什么校验时要加上IP信息的伪首部
-
UDP/TCP 中使用伪标头的意义是什么
-
《计算机网络 第7版》
相关文章:
UDP的详细解析
UDP的详细解析 文章目录UDP的详细解析UDP 概述UDP的首部格式检验和的计算抓包测试参考TCP/IP运输层的两个主要协议都是互联网的正式标准,即:用户数据报协议UDP (User Datagram Protocol)传输控制协议TCP (Transmission Control Protocol) 按照OSI的术语…...
史上最详细JUC教程之Synchronized与锁升级详解
在Java早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,挂起线程和恢复线程都需要转入内核态去完成,阻塞或唤醒一个Java线程需…...
Vue|初识Vue
Vue是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。 初识Vue1. Vue简介2. 开发准备3. 模板语法3.1 差值语法3.2 指令语法4. 数据绑定4.1 单向数据…...
在职阿里6年,一个29岁女软件测试工程师的心声
简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少)其中成功的有4家&…...
(C语言)自定义类型,枚举与联合
问:1. 结构体在自引用的时候不能怎么样?可以怎么样?2. Solve the problems:自定义一个学生结构体类型,要包含姓名,性别,年龄,六科成绩,家乡(也为结构体&#…...
node.js服务端笔记文档学会写接口,学习分类:path、包、模块化、fs、express、中间件、jwt、开发模式、cors。
node.js 学习笔记 node.js服务端笔记文档学会写接口,path、包、模块化、fs、express、中间件、JWT、开发模式、cors。 gitee:代码接口笔记 1什么是node.js nodejs 是基于ChromeV8,引擎的一个javaScript 运行环境。node.js 无法使用DOM和BO…...
初始C++(三):引用
文章目录一.引用的概念二.引用的使用1.引用作为输出型参数2. 引用作为函数返回值3.const引用三.引用的一些小问题四.引用和指针五.引用和指针的区别一.引用的概念 引用的作用是给一个已经存在的变量取别名,编译器不会为引用变量开空间,引用变量和被他引…...
【前端】参考C站动态发红包界面,高度还原布局和交互
最近有些小伙伴咨询博主说前端布局好难,其实都是熟能生巧! 模仿C站动态发红包界面,cssdiv实现布局,纯javascript实现交互效果 目录 1、界面效果 2、界面分析 2.1、整体结构 2.2、标题 2.3、表单 2.4、按钮 3、代码实现 3.…...
VR全景带你浪漫“狂飙”情人节,见证甜蜜心动
当情人节遇上VR,足以让情侣过一个难忘的情人节。马上情人节就要到了,大家是不是还在绞尽脑汁的想着,如何和另一半过一个浪漫的情人节呢?老套的剧情已经不能吸引人了,让我们看看VR全景给情人节带来了哪些不同的体验吧&a…...
Linux系统安全之iptables防火墙
目录 一.iptables防火墙基本介绍 二.iptables的四表五链 三.iptables的配置 1.iptables的安装 2.iptables防火墙的配置方法 四.添加、查看、删除规则 1.查看(fliter)表中的所有链 iptables -L 2.使用数字形式(fliter)表所有链 查看输出结果 iptables -nL 3.清空表中所…...
【C#基础】C# 变量与常量的使用
序号系列文章1【C#基础】C# 程序通用结构2【C#基础】C# 基础语法解析3【C#基础】C# 数据类型总结文章目录前言一. 变量(variable)1,变量定义及初始化2,变量的类别3,接收输出变量二. 常量(constantÿ…...
[ 常用工具篇 ] CobaltStrike(CS神器)基础(一) -- 安装及设置监听器详解
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
Redis集群
Redis集群 本章是基于CentOS7下的Redis集群教程,包括: 单机安装RedisRedis主从Redis分片集群 1.单机安装Redis 首先需要安装Redis所需要的依赖: yum install -y gcc tcl然后将课前资料提供的Redis安装包上传到虚拟机的任意目录ÿ…...
00---C++入门
1. C关键字(C98) C总计63个关键字,C语言32个关键字 2. 命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进…...
Spring-事务2
文章目录前言一、事务的特性(ACID)二、事务的隔离级别三、spring中的事务平台事务管理器.事务定义ISOLation_XXX:**事务隔离级别.**PROPAGATION_XXX:**事务的传播行为**.事务状态关系:四、使用XML文件配置事务1、 搭建…...
Windows Git Bash 配置
Windows Git Bash 配置 本文参考的文章: 在 Windows 的 Git Bash 中使用包管理器 - iris (ginshio.org)Git bash 安装 pacman & Windows 解压 zst 文件 | 伪斜杠青年 (lckiss.com) 一、Git的安装 Git 的安装应该是都会的,但还是应该说以下&#…...
java代码整合kettle9.3实现读取表中的数据,生成excel文件
java代码整合kettle9.3实现读取表中的数据,生成excel文件 1.简介 本次使用java代码整合kettle9.3版本,数据库使用mysql。 2.jar包导入 项目需要依赖部分kettle中的jar包,请将这部分jar包自行导入maven仓库。 <dependency><groupId…...
分享微信点餐小程序搭建步骤_微信点餐功能怎么做
线下餐饮实体店都开始摸索发展网上订餐服务。最多人选择的是入驻外卖平台,但抽成高,推广还要另买流量等问题,也让不少商家入不敷出。在这种情况下,建立自己的微信订餐小程序,做自己的私域流量是另一种捷径。那么&#…...
4、数组、切片、map、channel
目录一、数组二、切片三、map四、channel五、引用类型一、数组 数组: 数组是块连续的内存空间,在声明的时候必须指定长度,且长度不能改变所以数组在声明的时候就可以把内存空间分配好,并赋上默认值,即完成了初始化数组…...
270 uuid
270 uuid 用途 For the creation of RFC4122 UUIDs 可靠性 10000 星星 适应于浏览器或者服务器 官网链接 https://www.npmjs.com/package/uuid https://github.com/uuidjs/uuid 基本使用 import { v4 as uuidv4 } from uuid; uuidv4(); // ⇨ 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3d…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
