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版》
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/43bb300222808f4d538ae6abfc17a13e.png#pic_center)
UDP的详细解析
UDP的详细解析 文章目录UDP的详细解析UDP 概述UDP的首部格式检验和的计算抓包测试参考TCP/IP运输层的两个主要协议都是互联网的正式标准,即:用户数据报协议UDP (User Datagram Protocol)传输控制协议TCP (Transmission Control Protocol) 按照OSI的术语…...
![](https://img-blog.csdnimg.cn/img_convert/19bf774430d4f85d9a2a0f242ce449c6.png#pic_center)
史上最详细JUC教程之Synchronized与锁升级详解
在Java早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,挂起线程和恢复线程都需要转入内核态去完成,阻塞或唤醒一个Java线程需…...
![](https://img-blog.csdnimg.cn/b2d67403577141938f0fe94958220e37.png)
Vue|初识Vue
Vue是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。 初识Vue1. Vue简介2. 开发准备3. 模板语法3.1 差值语法3.2 指令语法4. 数据绑定4.1 单向数据…...
![](https://img-blog.csdnimg.cn/img_convert/3e4b582390924d9c841a00eed95859f1.jpeg)
在职阿里6年,一个29岁女软件测试工程师的心声
简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少)其中成功的有4家&…...
![](https://img-blog.csdnimg.cn/img_convert/4bf6d4b28714640c6f6f3861f1356e1b.jpeg)
(C语言)自定义类型,枚举与联合
问:1. 结构体在自引用的时候不能怎么样?可以怎么样?2. Solve the problems:自定义一个学生结构体类型,要包含姓名,性别,年龄,六科成绩,家乡(也为结构体&#…...
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://img-blog.csdnimg.cn/4b8761df325944ef9c48aba82fbd723c.png)
初始C++(三):引用
文章目录一.引用的概念二.引用的使用1.引用作为输出型参数2. 引用作为函数返回值3.const引用三.引用的一些小问题四.引用和指针五.引用和指针的区别一.引用的概念 引用的作用是给一个已经存在的变量取别名,编译器不会为引用变量开空间,引用变量和被他引…...
![](https://img-blog.csdnimg.cn/32db49bc83a24c2cacde8a85fa6ef2f1.png)
【前端】参考C站动态发红包界面,高度还原布局和交互
最近有些小伙伴咨询博主说前端布局好难,其实都是熟能生巧! 模仿C站动态发红包界面,cssdiv实现布局,纯javascript实现交互效果 目录 1、界面效果 2、界面分析 2.1、整体结构 2.2、标题 2.3、表单 2.4、按钮 3、代码实现 3.…...
![](https://img-blog.csdnimg.cn/img_convert/2382b5347ba03b682c44a2ef910572e0.jpeg)
VR全景带你浪漫“狂飙”情人节,见证甜蜜心动
当情人节遇上VR,足以让情侣过一个难忘的情人节。马上情人节就要到了,大家是不是还在绞尽脑汁的想着,如何和另一半过一个浪漫的情人节呢?老套的剧情已经不能吸引人了,让我们看看VR全景给情人节带来了哪些不同的体验吧&a…...
![](https://img-blog.csdnimg.cn/579bdf9e60694415801e312b608afdf6.png)
Linux系统安全之iptables防火墙
目录 一.iptables防火墙基本介绍 二.iptables的四表五链 三.iptables的配置 1.iptables的安装 2.iptables防火墙的配置方法 四.添加、查看、删除规则 1.查看(fliter)表中的所有链 iptables -L 2.使用数字形式(fliter)表所有链 查看输出结果 iptables -nL 3.清空表中所…...
![](https://www.ngui.cc/images/no-images.jpg)
【C#基础】C# 变量与常量的使用
序号系列文章1【C#基础】C# 程序通用结构2【C#基础】C# 基础语法解析3【C#基础】C# 数据类型总结文章目录前言一. 变量(variable)1,变量定义及初始化2,变量的类别3,接收输出变量二. 常量(constantÿ…...
![](https://img-blog.csdnimg.cn/6ad497c5c195459b8cfdd024c4400c52.png)
[ 常用工具篇 ] CobaltStrike(CS神器)基础(一) -- 安装及设置监听器详解
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
![](https://img-blog.csdnimg.cn/img_convert/f89a9b379874a2b280e99b9732999f0a.png)
Redis集群
Redis集群 本章是基于CentOS7下的Redis集群教程,包括: 单机安装RedisRedis主从Redis分片集群 1.单机安装Redis 首先需要安装Redis所需要的依赖: yum install -y gcc tcl然后将课前资料提供的Redis安装包上传到虚拟机的任意目录ÿ…...
![](https://img-blog.csdnimg.cn/f0596ccab902460fa49402fea3b8198a.png)
00---C++入门
1. C关键字(C98) C总计63个关键字,C语言32个关键字 2. 命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进…...
![](https://img-blog.csdnimg.cn/b4232f249a1544faa4a59897e26f524d.png)
Spring-事务2
文章目录前言一、事务的特性(ACID)二、事务的隔离级别三、spring中的事务平台事务管理器.事务定义ISOLation_XXX:**事务隔离级别.**PROPAGATION_XXX:**事务的传播行为**.事务状态关系:四、使用XML文件配置事务1、 搭建…...
![](https://img-blog.csdnimg.cn/a71dc6bda5f248808c7baac43e835cac.png)
Windows Git Bash 配置
Windows Git Bash 配置 本文参考的文章: 在 Windows 的 Git Bash 中使用包管理器 - iris (ginshio.org)Git bash 安装 pacman & Windows 解压 zst 文件 | 伪斜杠青年 (lckiss.com) 一、Git的安装 Git 的安装应该是都会的,但还是应该说以下&#…...
![](https://www.ngui.cc/images/no-images.jpg)
java代码整合kettle9.3实现读取表中的数据,生成excel文件
java代码整合kettle9.3实现读取表中的数据,生成excel文件 1.简介 本次使用java代码整合kettle9.3版本,数据库使用mysql。 2.jar包导入 项目需要依赖部分kettle中的jar包,请将这部分jar包自行导入maven仓库。 <dependency><groupId…...
![](https://img-blog.csdnimg.cn/img_convert/a52898e7c5561b8ce3ba9fc22ba597eb.png)
分享微信点餐小程序搭建步骤_微信点餐功能怎么做
线下餐饮实体店都开始摸索发展网上订餐服务。最多人选择的是入驻外卖平台,但抽成高,推广还要另买流量等问题,也让不少商家入不敷出。在这种情况下,建立自己的微信订餐小程序,做自己的私域流量是另一种捷径。那么&#…...
![](https://img-blog.csdnimg.cn/9547dcff89f348feb5436404c9427d2d.png)
4、数组、切片、map、channel
目录一、数组二、切片三、map四、channel五、引用类型一、数组 数组: 数组是块连续的内存空间,在声明的时候必须指定长度,且长度不能改变所以数组在声明的时候就可以把内存空间分配好,并赋上默认值,即完成了初始化数组…...
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://img-blog.csdnimg.cn/img_convert/c46cbf390a6cfd582e09351f3ab7c7c1.webp?x-oss-process=image/format,png)
2023最新简历模板免费下载
下面分享5个简历模板网站,免费下载,建议收藏! 2023用最漂亮的简历模板,让面试官眼前一亮。 1、菜鸟图库 个人简历模板|WORD文档模板免费下载 - 菜鸟图库 菜鸟图库除了有超多设计类素材之外,还有很多办公类素材&#…...
![](https://img-blog.csdnimg.cn/1a8226ac5881414883cf647f1c91292f.png)
【CSS】元素居中总结-水平居中、垂直居中、水平垂直居中
【CSS】元素居中一、 水平居中1.行内元素水平居中(1)text-align2.块级元素水平居中2.1 margin(1)margin2.2布局(1)flex justify-content(推荐)(2) flexmargin…...
![](https://www.ngui.cc/images/no-images.jpg)
spring实现AOP
文章目录前言一、AOP的底层实现原理二、AOP的两种开发模式1.使用xml配置文件1.1 添加AOP依赖1.2 创建UserService1.3创建UserServiceImpl1.4创建通知类1.5 创建applicationContext.xml(添加aop约束)1.6 测试2.使用注解开发2.1 创建bean.xml文件配置注解方…...
![](https://www.ngui.cc/images/no-images.jpg)
neovim搭建cpp环境
文章目录Windowns下NeoVim搭建cpp环境NeoVim安装插件vim-plugindentLinevim-airlinectagstagbarcoc.vimWindowns下NeoVim搭建cpp环境 在开发过程中习惯在DIE环境中使用vim作为编辑器,在单独的编辑器也常使用gvim图形化编辑器。最近看到NeoVim的特性及兼容性方面不输…...
![](https://www.ngui.cc/images/no-images.jpg)
SpringBoot AES加密 PKCS7Padding 模式
AES 简介:DES 全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS) AES 密码学中的高级加密标准(Advan…...
![](https://img-blog.csdnimg.cn/8547a079a53443e6ab80b87a133ce872.png)
按键输入驱动
目录 一、硬件原理 二、添加设备树 1、创建pinctrl 2、创建节点 3、检查 编译复制 三、修改工程模板编辑 四、驱动编写 1、添加keyio函数 2、添加调用 3、驱动出口函数添加释放 4、添加原子操作 5、添加两个宏定义 6、初始化原始变量 7、打开操作 8、读操作 总体代…...
![](https://www.ngui.cc/images/no-images.jpg)
2023年第七周总周结 | 开学倒数第三周
为什么要做周总结? 1.避免跳相似的坑 2.客观了解上周学习进度并反思,制定可完成的下周规划 一、上周问题解决情况 晚上熬夜导致第二天学习状态不好 这周熬夜一天,晚上帮亲戚修手机到22:30,可能是晚上自己的事什么都没做ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/6261d1f73a5146702ccdbce1c0f32b93.png)
Springboot扫描注解类
Springboot扫描注解类的入口在AbstractApplicationContext的refresh中,对启动步骤不太了解的,可参考https://blog.csdn.net/leadseczgw01/article/details/128930925BeanDefinitionRegistryPostProcessor接口有多个实现类,扫描Controller、Se…...
![](https://img-blog.csdnimg.cn/img_convert/78fad5652faf4c2f8c087b0a68ad27b7.jpeg)
Apache日志分析器
您的Apache HTTP服务器生成的日志数据是信息的宝库。使用这些信息,您可以判断您服务器的使用情况、找出漏洞所在,并设法改进服务器结构和整体性能。审核您的Apache日志可在以下情况派上用场,其中包括:识别和纠正频繁出现的错误以增…...
![](https://img-blog.csdnimg.cn/a989e0a0781545b8bf20ac3193c9f60b.png)
啪,还敢抛出异常
🙉 作者简介: 全栈领域新星创作者 ;天天被业务折腾得死去活来的同时依然保有对各项技术热忱的追求,把分享变成一种习惯,再小的帆也能远航。 🏡 个人主页:xiezhr的个人主页 前言 去年又重新刷了…...
![](/images/no-images.jpg)
榆林免费做网站/电商运营自学全套教程
程序组装代码存在吗? 每个程序是代码组成的,固定的程序可能是固定的代码,当其组装完成后,就可以执行这段程序. 怪不得代码搬运工这样的字眼会存在,那编程的意义何在? 字母A联合字母B形成了程序AB,但A与B已经是存在的A与B.既然已经存在,并且可按规律或规则规范去组织进行使用.…...
![](https://img-blog.csdnimg.cn/img_convert/9e4c72ef6559356f4f0818ba0d2798b2.png)
杭州网站建设公司有哪几家/陕西网站建设网络公司
基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这五种嵌入式操作系统的特点及不足。更多交流私我132-陆零伍陆-20-291、μClinuxμClinux是一种优秀的…...
![](/images/no-images.jpg)
昆明网站建设推荐力鼎科技/地推平台
try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错误。 1. try/catch语句 catch语句用来捕获try代码块中的错误,并执行自定义的语句来处理它。 语法: try{//在这里运行代码} catch(err){//在这里处理错误} <!DOCTYPE html>…...
![](https://img-blog.csdnimg.cn/20181214010750857.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L015cm9uQ2hhbQ==,size_16,color_FFFFFF,t_70)
有没有做字的网站/网络营销策划书步骤
目录: 3、垃圾收集器以及内存分配 3.1、串行垃圾收集器 3.1.1、编写测试代码 3.1.2、设置垃圾回收为串行收集器 3.2、并行垃圾收集器 3.2.1、ParNew垃圾收集器 3.2.2、ParallelGC垃圾收集器 3.3 、CMS垃圾收集器 3.3.1、测试 3.4、G1垃圾收集器࿰…...
![](/images/no-images.jpg)
做网站优化公司/关键词网站
Linux I2C程序框架通常包括以下几个部分: 包含I2C相关头文件:在程序中使用I2C功能时,需要包含Linux内核中的I2C相关头文件。通常包括"i2c-dev.h"和"i2c-io.h"。 打开I2C设备文件:使用Linux的"open()"函数打开I2C设备文件。I2C设备文件通常位…...
![](https://img-blog.csdnimg.cn/62e4be569cf2492ea5a8c3c2b60ccf11.png)
模板网站设计报价/免费做网站网站的软件
本篇的思维导图: 正则表达式-re 模块 正则表达式(Regular Expression)是一种文本模式的描述方法。例如,\d是一个正则表达式,表示一位数字字符,即任何一位0到9的数字。 在 Python 语言中re 模块提供了全部的正则表达式函数,例如:compile 函数。 compile 函数 compile 函…...