当前位置: 首页 > news >正文

UDP报文结构

UDP特点

无连接 , 不可靠传输 , 面向数据报 , 全双工

  • 无连接: 知道对端的 IP 和端口号就直接进行传输,不需要建立连接.
  • 不可靠传输:没有确认机制,没有重传机制;如果因为网络故障导致该段无法发送对方,UDP协议层也不会给应用层返回任何错误信息.
  • 面向数据报:不能灵活的控制读写数据的次数和数量
  • 全双工:在通信过程中,双方可以同时进行双向的数据传输,即可以同时发送和接收数据,而且双方之间的传输是独立的

UDP协议端格式

  1. 源端口号:占16位,表示发送端的端口号。

  2. 目的端口号:占16位,表示接收端的端口号。

  3. UDP长度:占16位,表示UDP报文的总长度,包括首部和数据部分。单个UDP数据报的最大长度为 64KB (不能超过64KB,超过会导致数据被截断等问题)

  4. UDP校验和:占16位,用来检验UDP报文的完整性。计算校验和时,不仅要考虑UDP首部的内容,还要包括UDP数据部分。

  5. 数据:占n个字节,表示应用层传输的数据。

关于校验和

在网络传输过程中, 是非常容易出现错误的(电信号/光信号/电磁波受到外界的干扰,使里面传输的信号发生改变)

校验和,存在的目的,就是为了能够 "发现" 或者 "纠正" 网络传输过程中出现的错误.

通过对数据进行计算,生成一个校验和值,然后将该校验和值附加在数据中一起传输。接收方在接收到数据后,同样对数据进行计算,生成一个校验和值,并与传输过来的校验和值进行比较。如果两者相等,则说明数据在传输过程中没有发生改变或丢失,可以认为数据是有效的;如果两者不相等,则说明数据可能发生了错误或损坏。

校验和算法通常采用的是简单的数学操作,如加法或异或运算。具体的计算方式取决于校验和算法的设计。常见的校验和算法包括累加和校验和(Checksum)、循环冗余校验(CRC),MD5,SHA1等。

这里简单介绍一下MD5算法

MD5算法,本质上是一个"字符串hash算法",MD5算法的输入可以是任意长度的数据,输出是一个128位的哈希值。

特点:

  • 它是一个单向函数,即无法从哈希值逆推出原始数据。
  • 对于不同的输入,得到的哈希值几乎是唯一的,不同的输入可以得到不同的哈希值。
  • 即使输入数据只有微小的差异,其哈希值也会有很大的不同。
  • MD5算法的哈希值是固定长度的,不受输入数据长度的影响。

注意:校验和并不能检测出所有的错误,它只能帮助检测某些特定类型的错误。如果校验和不匹配,说明数据有错误,但如果校验和匹配,不能保证数据完全没有错误。

基于UDP的应用层协议

  1. DNS:用于将域名映射为IP地址的分布式数据库系统,使用UDP协议进行域名解析。

  2. SNMP:用于网络设备的监控和管理,包括获取设备状态、配置设备等操作,使用UDP协议进行数据传输。

  3. TFTP:用于简单的文件传输,如固件更新、配置文件传输等,使用UDP协议进行数据传输。

  4. NTP:用于同步网络中各个设备的时间,使用UDP协议进行时间同步。

  5. DHCP:用于自动分配IP地址、网关、DNS服务器等网络配置信息给客户端设备,使用UDP协议进行数据传输。

  6. RIP:用于路由器之间的路由信息交换,使用UDP协议传输路由表信息。

  7. RTP:用于实时的音视频传输,如IP电话、视频会议等,使用UDP协议进行数据传输。

  8. NFS : 网络文件系统

这些基于UDP的应用层协议通常选择UDP作为传输层协议,因为UDP具有低延迟和高效率的特点,适用于实时和轻量级的数据传输。

当然,也可以自定义应用层协议

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PurchaseorderController
  • JDBC的介绍续
  • [数据集][目标检测]电动车头盔佩戴检测数据集VOC+YOLO格式4235张5类别
  • 《深入浅出WPF》读书笔记.11Template机制(上)
  • 如何编写Linux PCI设备驱动器 之一
  • 推荐9个不同风格的音频频谱波形 听音乐怎么能少了它
  • FPGA基础知识
  • 分库分表:应对大数据量挑战的数据库扩展策略
  • Apache Ignite 在处理大规模数据时有哪些优势和局限性?
  • 【第0006页 · 数组】寻找重复数
  • CRIO与Windows下LabVIEW开发对比
  • 数据库的介绍:关系型数据库和非关系型数据库究竟是什么?
  • cmd 常用命令总结
  • 个人网银、手机银行
  • nvidia-smi 随机掉卡,error,禁用GSP功能
  • [NodeJS] 关于Buffer
  • 【面试系列】之二:关于js原型
  • 08.Android之View事件问题
  • Android Volley源码解析
  • JavaScript设计模式与开发实践系列之策略模式
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Linux CTF 逆向入门
  • Mybatis初体验
  • Sass Day-01
  • Service Worker
  • Vue UI框架库开发介绍
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 闭包--闭包之tab栏切换(四)
  • 规范化安全开发 KOA 手脚架
  • 猴子数据域名防封接口降低小说被封的风险
  • 记录一下第一次使用npm
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 新手搭建网站的主要流程
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 追踪解析 FutureTask 源码
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 7行Python代码的人脸识别
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 阿里云移动端播放器高级功能介绍
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (30)数组元素和与数字和的绝对差
  • (6)STL算法之转换
  • (70min)字节暑假实习二面(已挂)
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (pycharm)安装python库函数Matplotlib步骤
  • (补充)IDEA项目结构
  • (第一天)包装对象、作用域、创建对象
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (接口封装)
  • (一)RocketMQ初步认识
  • (一)基于IDEA的JAVA基础10