网络协议 - UDP 协议详解

网络协议 - UDP 协议详解

  • UDP概述
  • UDP特点
  • UDP的首部格式
    • UDP校验
  • 參考文章

基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解。

UDP概述

UDP(User Datagram Protocol)即用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。

UDP特点

UDP提供不可靠服务,具有TCP所没有的优势:

  • UDP无连接,时间上不存在建立连接需要的时延。空间上,TCP需要在端系统中维护连接状态,需要一定的开销。此连接装入包括接收和发送缓存,拥塞控制参数和序号与确认号的参数。UCP不维护连接状态,也不跟踪这些参数,开销小。空间和时间上都具有优势。 举个例子:
    • DNS如果运行在TCP之上而不是UDP,那么DNS的速度将会慢很多。
    • HTTP使用TCP而不是UDP,是因为对于基于文本数据的Web网页来说,可靠性很重要。
    • 同一种专用应用服务器在支持UDP时,一定能支持更多的活动客户机。
  • 分组首部开销小,TCP首部20字节,UDP首部8字节。
  • UDP没有拥塞控制,应用层能够更好的控制要发送的数据和发送时间,网络中的拥塞控制也不会影响主机的发送速率。某些实时应用要求以稳定的速度发送,能容 忍一些数据的丢失,但是不能允许有较大的时延(比如实时视频,直播等)
  • UDP提供尽最大努力的交付,不保证可靠交付。所有维护传输可靠性的工作需要用户在应用层来完成。没有TCP的确认机制、重传机制。如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息
  • UDP是面向报文的,对应用层交下来的报文,添加首部后直接乡下交付为IP层,既不合并,也不拆分,保留这些报文的边界。对IP层交上来UDP用户数据报,在去除首部后就原封不动地交付给上层应用进程,报文不可分割,是UDP数据报处理的最小单位。 正是因为这样,UDP显得不够灵活,不能控制读写数据的次数和数量。比如我们要发送100个字节的报文,我们调用一次sendto函数就会发送100字节,对端也需要用recvfrom函数一次性接收100字节,不能使用循环每次获取10个字节,获取十次这样的做法。
  • UDP常用一次性传输比较少量数据的网络应用,如DNS,SNMP等,因为对于这些应用,若是采用TCP,为连接的创建,维护和拆除带来不小的开销。UDP也常用于多媒体应用(如IP电话,实时视频会议,流媒体等)数据的可靠传输对他们而言并不重要,TCP的拥塞控制会使他们有较大的延迟,也是不可容忍的
  • UDP 支持一对一、一对多、多对一和多对多的交互通信

还要注意的是:

  • IP 数据报要经过互连网中许多路由器的存储转发;UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的

UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文
在这里插入图片描述

UDP的首部格式

在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和
在这里插入图片描述

  • 源端口: 占16位、源端口号。在需要对方回信时选用。不需要时可用全0。
  • 目的端口: 占16位、目的端口号。这在终点交付报文时必须使用。
  • 长度: 占16位、UDP用户数据报的长度,其最小值是8(仅有首部)。
  • 检验和: 占16位、检测UDP用户数据报在传输中是否有错。有错就丢弃。

请注意,虽然在 UDP 之间的通信要用到其端口号,但由于 UDP 的通信是无连接的,因此不需要使用套接字。

UDP校验

UDP校验和的计算方法和IP数据报首部校验和的计算方法相似,都使用二进制反码运算求和再取反,但不同的是:IP数据报的校验和之检验IP数据报和首部,但UDP的校验和是把首部和数据部分一起校验

发送方,首先是把全零放入校验和字段并且添加伪首部,然后把UDP数据报看成是由许多16位的子串连接起来,若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾增加一个全零字节(此字节不发送),接下来就按照二进制反码计算出这些16位字的和。将此和的二进制反码写入校验和字段。在接收方,把收到得UDP数据报加上伪首部(如果不为偶数个字节,还需要补上全零字节)后,按二进制反码计算出这些16位字的和。当无差错时其结果全为1,。否则就表明有差错出现,接收方应该丢弃这个UDP数据报。

下图是计算UDP校验和的例子:
在这里插入图片描述
注意:

  • 校验时,若UDP数据报部分的长度不是偶数个字节,则需要填入一个全0字节,但是次字节和伪首部一样,是不发送的。
  • 如果UDP校验和校验出UDP数据报是错误的,可以丢弃,也可以交付上层,但是要附上错误报告,告诉上层这是错误的数据报。
  • 通过伪首部,不仅可以检查源端口号,目的端口号和UDP用户数据报的数据部分,还可以检查IP数据报的源IP地址和目的地址。 这种差错检验的检错能力不强,但是简单,速度快。

參考文章

  • 文章转自大佬 pdai 欢迎大家交流学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/227951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

必要时进行保护性拷贝

保护性拷贝(Defensive Copy)是一种常见的编程实践,用于在传递参数或返回值时,创建副本以防止原始对象被意外修改。以下是一个例子,展示了何时进行保护性拷贝: mport java.util.ArrayList; import java.uti…

数据手册Datasheet解读-肖特基二极管笔记

数据手册Datasheet解读笔记1-肖特基二极管 数据手册大体结构共包含10个部分肖特基二极管-SS14第一重点关注点:极限值第二重点关注点:电气特性 数据手册大体结构共包含10个部分 1.Features一特性 2.Application一应用 3.Description一说明4.Pin Configur…

关于在Java中打印“数字”三角形图形的汇总

之前写过一篇利用*打印三角形汇总,网友需要查看可以去本专栏查找之前的文章,这里利用二维数组嵌套循环打印“数字”三角形,汇总如下,话不多说,直接上代码: /*** 打印如下数字三角形图形*/ public class Wo…

逻辑分析仪_使用手册

LA1010 1> 能干啥?2> 硬件连接3> 软件安装4> 参数设置4.1> 采样深度和采样率4.2> 添加协议解析器4.3> 毛刺过滤设置 1> 能干啥? 测量通信波形,并自动解析; 比如测量,UART,SPI&…

【DataSophon】大数据管理平台DataSophon-1.2.1安装部署详细流程

🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…

java_web_电商项目

java_web_电商项目 1.登录界面2.注册界面3. 主界面4.分页界面5.商品详情界面6. 购物车界面7.确认订单界面8.个人中心界面9.收货地址界面10.用户信息界面11.用户余额充值界面12.后台首页13.后台商品增加14.后台用户增加15.用户管理16.源码分享1.登录页面的源码2.我们的主界面 1.…

在线二进制原码,补码,反码计算器

具体请前往:在线原码/反码/补码计算器

LLM中的Prompt提示

简介 在LLM中,prompt(提示)是一个预先设定的条件,它可以限制模型自由发散,而是围绕提示内容进行展开。输入中添加prompt,可以强制模型关注特定的信息,从而提高模型在特定任务上的表现。 结构 …

会声会影怎么使用? 会声会影2024快速掌握入门技巧

一听说视频剪辑我们就不由得联想到电影、电视等一些高端的视频剪辑技术,大家都觉得视频剪辑是一个非常复杂而且需要很昂贵的设备才可以完成的技术活,这对很多“门外汉”来说都可望而不可及。实际上,使用会声会影剪辑视频不仅是很多人都可以操…

【深度强化学习】策略梯度方法:REINFORCE、Actor-Critic

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto非策略梯度方法的问题 之前的算法,无论是 MC,TD,SARSA,Q-learning, 还是 DQN、Double DQN、Dueling DQN…

STM32G030C8T6:使用按键控制LED亮灭(外部中断)

本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考; 本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过KEY1 按键的PA0 引脚配置成中断输入引脚,PB9引…

写好ChatGPT提示词原则之:清晰且具体(clear specific)

ChatGPT 的优势在于它允许用户跨越机器学习和深度学习的复杂门槛,直接利用已经训练好的模型。然而,即便是这些先进的大型语言模型也面临着上下文理解和模型固有局限性的挑战。为了最大化这些大型语言模型(LLM)的潜力,关…

Spring 6(二)【IOC原理】

前言 1、IOC IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 1.1、控制反转 控制反转不是技术…

visual Studio MFC 平台实现图片的傅里叶变换

图片的傅里叶变换 本文主要讲解傅里叶变换的基本数学概念与物理概念,并本文使用visual Studio MFC 平台实现对傅里叶变换在图片上进行了应用。 一、傅里叶变换的原理 在这里推荐一篇讲得非常形象的文章通俗讲解:图像傅里叶变换 1.1 傅里叶变换原理的说明…

idea__SpringBoot微服务11——整合Druid数据源(新依赖)(新注解)

整合JDBC 一、导入依赖二、配置Druid————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶ ̄),谢谢~~ 接着 第10的 新注解: ConfigurationProperties ConfigurationPropert…

【人工智能】实验四:遗传算法求函数最大值实验与基础知识

实验四:遗传算法求函数最大值实验 实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传算法求解函数优化问题,理解求解流程并测试主要参数对结果的影响。 实验内容 采用遗传算法求解函数最大值。 实验要求 1. 用遗传算法求解…

3. cgal 示例 GIS (Geographic Information System)

GIS (Geographic Information System) 地理信息系统 原文地址: https://doc.cgal.org/latest/Manual/tuto_gis.html GIS 应用中使用的许多传感器(例如激光雷达)都会生成密集的点云。此类应用程序通常利用更先进的数据结构:例如,不…

053:vue工具--- 英文字母大小写在线转换

第047个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

QEMU源码全解析 —— virtio(13)

接前一篇文章: 通过前文书(从QEMU源码全解析 —— virtio(9)开始)对整个流程以及各个相关函数的解析,可以看到从virtio PCI代理设备的具现化到virtio设备的具现化过程。但前述分析还遗漏了一部分&#xff0…

LeetCode(69)对称二叉树【二叉树】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 对称二叉树 1.题目 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,nu…