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

UDP协议详解

目录

前言:

UDP功能

UDP的特点

UDP首部格式

计算检验和

计算检验和例子

 共勉


前言:

        本文详细的介绍了UDP的功能特性格式。希望能给你带来帮助(RFC 768)


UDP功能

        UDP协议是一个面向数据报传输层协议,位于OSI七层模型的第四层、TCP/IP五层模型的第二层,为用户提供无连接不可靠的数据传输服务。


UDP的特点

  1. 无连接:UDP是无连接的,即发送数据之前不需要建立连接(不需要建立连接,再发送数据结束时也不需要释放连接),因此可以减少资源消耗和时延。
  2. 不可靠:这里的不可靠不是贬义词,只是UDP的一种特性。UDP不保证数据报能够按顺序到达,也不保证数据报的完整性和准确性。在传输过程中,如果发生数据丢失、乱序或损坏,UDP不会进行重传或纠正,而是将这些错误留给应用层处理。这种特性使得UDP的传输效率较高,但可靠性较低。
  3. 支持 一对一 、一对多、 多对一、多对多的交互通信:UDP支持多种通信模式,包括单播(一对一)、广播(一对多)、多播(多对多)等。这使得UDP在需要向多个目标发送相同数据或需要接收来自多个源的数据时具有很高的灵活性。
  4. 面向报文:发送方的UDP对上层交下来的报文,在添加首部后就向下交付了。接收方的UDP,收到下层交上来的UDP报文,在去除首部后就原封不动的交付给上层。
  5. 拥塞控制:UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
  6. UDP首部开销小:只有8个字节。

UDP首部格式

2字节2字节2字节2字节
源端口目的端口长度检验和
  1. 源端口:在需要对方回信时可以填写指定端口,用于对方发送时的目的端口。不需要回信时,也可以填写为0。
  2. 目的端口:终点交付报文时使用的端口号。
  3. 长度:UDP用户数据报的长度,最小是8(仅首部),理论最长为2^16 - 1即65535字节,其中包含UDP报头(8字节)和UDP数据。
  4. 检验和:检测UDP用户数据报在传输中是否有错。有错直接丢弃

计算检验和

1.伪首部准备:UDP的检验和计算不仅涉及UDP头部和数据部分,还需要加上一个伪头部。

        UDP伪首部:这个伪头部不向下传送,也不向上提交,只是在计算检验和时使用。伪头部总共12字节伪首部格式↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

源IP(4字节)
目的IP(4字节)
全0(1字节)协议码17(1字节)UDP报文长度(2字节)

2.初始化检验和:在计算开始前将UDP首部中的检验和设置为0,以便在累加过程不包括该字段的初始值

3.累加求和:

        从伪头部的第一个16进制数开始,与下一个16进制数相加,得到一个32位的数。

        如果这个32位数的高16位不为0,则将高16位与低16位相加,再次得到一个32位的数。

4.取反得到校验和。

计算检验和例子

《计算机网络》第8版 P218


 共勉

        以上就是我对UDP协议的全部认识,如果有什么问题或者疑问欢迎您在评论区提出,或者私信我。欢迎点赞、评论、收藏。

 感谢阅读

        

相关文章:

  • Linux网络-HttpServer的实现
  • DP读书:半导体物理考试重点
  • 数据库中存储过程,看这一篇就够了!!
  • 从ES的JVM配置起步思考JVM常见参数优化
  • 亚马逊跟卖ERP系统,怎样提升新手卖家选品的质量与效率!
  • 短视频配曲排行:四川鑫悦里文化传媒有限公司
  • 复旦微FMQL20SM全国产ARM+FPGA核心板,替代xilinx ZYNQ7020系列
  • LeetCode 1731, 151, 148
  • Tomcat配置详解
  • yolov8图像分割训练
  • 《C语言》动态内存管理
  • 【深度学习基础】激活函数:Tanh、Sigmoid 和 Softmax
  • Ps:脚本事件管理器
  • qt c++ 字符串拼接踩坑
  • Linux--Mosquitto服务器
  • const let
  • IDEA常用插件整理
  • PAT A1092
  • PHP CLI应用的调试原理
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • win10下安装mysql5.7
  • windows下如何用phpstorm同步测试服务器
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 反思总结然后整装待发
  • 如何在GitHub上创建个人博客
  • 使用parted解决大于2T的磁盘分区
  • 使用SAX解析XML
  • 我感觉这是史上最牛的防sql注入方法类
  • 一个完整Java Web项目背后的密码
  • 进程与线程(三)——进程/线程间通信
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • **CI中自动类加载的用法总结
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .bashrc在哪里,alias妙用
  • .gitignore文件_Git:.gitignore
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .Net core 6.0 升8.0
  • .NET DataGridView数据绑定说明
  • .Net IOC框架入门之一 Unity
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 依赖注入和配置系统
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @property括号内属性讲解
  • [12] 使用 CUDA 进行图像处理
  • [18] Opencv_CUDA应用之 基于颜色的对象检测与跟踪
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [AIGC] CompletableFuture的重要方法有哪些?
  • [BJDCTF2020]The mystery of ip1
  • [BZOJ] 2006: [NOI2010]超级钢琴