用户数据报UDP

2023-11-08

UDP概述

UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能
在这里插入图片描述

UDP 的主要特点

  • UDP 是无连接的,不需要建立连接,直接发送数据(发送完以后也不需要释放连接)

  • UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制

  • UDP 是面向报文的,UDP对应用层交下来的报文,既不合并,也不拆分。这就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。同理在接收方的UDP,对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程。也就是说,UDP一次交付一个完整的报文。所以应用程序必须选择合适大小的报文。
    图一
    在这里插入图片描述
    图二
    在这里插入图片描述

  • UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多的实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延。UDP正好适合这种要求

  • UDP 支持一对一、一对多、多对一和多对多的交互通信

  • UDP 的首部开销小,只有 8 个字节

UDP 的首部格式

用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。
在这里插入图片描述

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

当运输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交最后的终点----应用进程。下图是UDP基于端口分用的示意图
在这里插入图片描述
如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送端口不可达差错报文给发送方。

检验和
在计算检验和时,临时把伪首部和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。所谓伪首部是因为这种伪首部并不是UDP用户数据报真正的首部。只是在计算检验和时,临时添加在UDP用户数据报前面,得到一个临时的UDP用户数据报。检验和就是按照这个临时的UDP用户数据报来计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。下图给出了伪首部各字段的内容。

在这里插入图片描述

检验和计算方法
UDP的检验和是把首部和数据部分一起都检验。

在发送方

  1. 首先是先把全零放入检验和字段。
  2. 再把伪首部以及UDP用户数据报看成是由许多16位的字串接起来的。若UDP用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发送)。
  3. 然后按二进制计算出这些16位字的和,然后再对结果取反,将0->1,1->0。将此和的二进制取反结果写入检验和字段后,就发送这样的UDP用户数据报。

在接收方

  1. 把收到的UDP用户数据报连同伪首部一起(若UDP用户数据报的数据部分不是偶数个字节,则要填入一个全零字节),按二进制反码求这些16位字的和。
  2. 当无差错时其结果应为全1。否则就表明有差错出现,接收方就应丢弃这个UDP用户数据报(也可以上交给应用层,但附上出现了差错的警告)。

检验和计算过程
这里假定用户数据报的长度是15字节(可以通过IP数据报计算出来),因此要添加一个全0的字节。检验一下在接收端是怎样对检验和进行检验的。不难看出,这种简单的差错检验方法的检错能力并不强,但它的好处是简单,处理起来较快。

在这里插入图片描述

校验和详细计算过程

	1001100100010011
	0000100001101000
  +	----------------
  =	1010000101111011
------------------------
	1010000101111011
	1010101100000011
  +	----------------
  =	0100110001111110
------------------------
	0100110001111110
	0000111000001011
  +	----------------
  =	0101101010001001
------------------------
	0101101010001001
	0000000000010001
  +	----------------
  =	0101101010011010
------------------------
	0101101010011010
	0000000000001111
  +	----------------
  =	0101101010101001
------------------------
	0101101010101001
	0000010000111111
  +	----------------
  =	0101111011101000
------------------------
	0101111011101000
	0000000000001101
  +	----------------
  =	0101111011110101
------------------------
	0101111011110101
	0000000000001111
  +	----------------
  =	0101111100000100
------------------------
	0101111100000100
	0000000000000000
  +	----------------
  =	0101111100000100
------------------------
	0101111100000100
	0101010001000101
  +	----------------
  =	1011001101001001
------------------------
	1011001101001001
	0101001101010100
  +	----------------
  =	0000011010011101
------------------------
	0000011010011101
	0100100101001110
  +	----------------
  =	0100111111101011
------------------------
	0100111111101011
	0100011100000000
  +	----------------
  =	1001011011101011
------------------------

1001011011101011 取反 0110100100010010

注意:上述的取反与二进制取反运算有所不同,仅仅是0->1,1->0

对于接收方,由于校验和字段将0110100100010010取代了原全0的字段,再按照之前的加法,则会得到全1

	1001011011101011
	0110100100010010
  +	----------------
  =	1111111111111111
  • 其中伪首部的第3字段是全零;
  • 第4字段对应IP首部中的协议字段的值。对于UDP,此协议字段值为17;
  • 第5字段是UDP用户数据报的长度。(可以通过IP报文首部计算出来:IP报文长度-IP首部长度,同UDP用户数据报的长度)

在这里插入图片描述
因此,这样的检验和,既检查了UDP用户数据报的源端口号和目的端口号以及UDP用户数据报的数据部分,又检查了IP数据报的源IP地址和目的地址。

实战:Wireshark 分析用户数据报UDP

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用户数据报UDP 的相关文章

随机推荐

  • 不识别v-on标签,不识别v-bind标签 idea 报错(Namespace 'v-on' not bound more....)

    解决办法 setting 里面去掉这个UNbound xml namespace prefix
  • python去掉字符串重复字符_【python】【字符串】字符串首尾相连,去掉连接处的重复...

    coding utf 8 字符串从反向拆词 def string depart str1 ls str1 str tmp for str t in reversed str1 str tmp str t str tmp ls str1 ap
  • 通信技术之复用与解复用

    想像一下 如果一条信道一次只能传输一条信息 那么对于海量的信息来说 传输的速度未免太慢了 因此 我们想要一根线上传送多路信号 复用技术就应运而生了 在上一篇博客中 我们知道了PCM编码的位数是8 抽样周期是1s 8000次 125us 在这
  • 机器学习——基本认识

    一 机器学习定义 机器学习 Machine Learning 什么是机器学习 Arthur Samuel 机器学习领域的先驱之一 他编写了世界上第一个棋类游戏的人工智能程序 1959年对机器学习的定义 Machine Learning is
  • Fiddler Everywhere(TTP调试抓包工具) for Mac苹果电脑版

    Fiddler Everywhere for Mac版是Mac电脑上的一款跨平台的HTTP调试抓包工具 Fiddler Everywhere for Mac能够记录客户端与服务器之间的所有HTTP S 通信 支持对包进行监视 分析 设置断点
  • 微信小程序——小程序的API介绍

    小程序的宿主环境 API 1 小程序API概述 小程序中的API是由宿主环境提供的 通过这些丰富的小程序API 开发者可以方便的调用微信提供的能力 例如 获取用户信息 本地存储 支付功能等 2 小程序API的3大分类 小程序官方把API分成
  • 用户行为记录的一个简单例子

    分析的前提 用户行为分析的前提是用户行为的记录 如下图则记录了三个用户的用户记录 设计用户记录 用户记录都包含哪些呢 用户记录对于数据分析非常重要 可以让程序员定位bug或者性能问题 产品可以查看用户体验 甚至是广告分析数据分析和用户增长模
  • 算法学习:55. 跳跃游戏

    跳跃游戏 题目难度 中等 给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例 输入 nums 2 3 1 1 4 输出 true 解释 可以先
  • Iterm2设置

    Item2 1 安装item2 使用 homebrew 安装 item2 brew install item2 可以打开 item2了使用了 查看所有 shell cat etc shells 查看当前 shell echo SHELL 切
  • RK3568平台入门到精通系列讲解之开发环境搭建(依赖软件包)

    一 服务器平台信息 芯片平台 Intel至强E526xx系列x2 系统版本 ubuntu 14 04 18 04 22 04服务器版 内存 128GB 磁盘空间 256GB SSD 8TB HD 二 服务器系统安装 系统可以从官方下载 ht
  • 常用Linux网络/内存/磁盘分析工具

    Centos查看网卡 CPU 内存等使用率 watch more proc net dev 性能分析和监控工具 uptime dmesg tail vmstat 1 mpstat P ALL 1 pidstat 1 iostat xz 1
  • Freesync小白科普

    内容摘自AMD官网 AMD FreeSync 技术解释 FreeSync是一项 AMD 计划 它利用 DisplayPort Adaptive Sync 等行业标准为最终用户提供动态刷新率 与G sync一样 可以解决画面卡顿 撕裂问题 作
  • [Markdown][typora]如何让markdown自动显示序号

    介绍 我们经常会遇到在写markdown的时候 需要显示标题 这个时候 通常大家的做法是手动添加标题 但是写到最后会发现要在添加一个之前的章节 结果后面的写好的都要跟着改 那markdown有没有办法自动显示标题呢 这边我搜索了相关博客 学
  • 自带字典_原来华为手机还自带在线翻译功能,无需任何软件,即可随时翻译!...

    翻译大家都并不陌生 就算在我们生活中都可能会用上 那更别提学习或工作中了 以前我们翻译英文都会使用英汉字典 但是随着现在科技的发展现在我们手机上都会自带一些翻译软件 就比如我们国产华为手机 如果你能够合理化的利用必定能够让你事半功倍 一 手
  • 【论文研读】【医学图像】【R2UNet】Recurrent residual U-Net for medical image segmentation

    R2UNet Recurrent residual U Net for medical image segmentation Abstract 1 Introduction 2 Related Works 3 RU Net and R2U
  • jieba自定义分词规则与多进程切词

    当存在某些自定义的专业名称或长词时 jieba有可能会当成多个词 但其实是一个词 自定义的方法如下 原始的jieba效果 import jieba if name main sentence 学习python与人工智能有益身体健康 ret
  • ubuntu常用命令(转载)

    ls 列出当前目录文件 不包括隐含文件 ls a 列出当前目录文件 包括隐含文件 ls l 列出当前目录下文件的详细信息 cd 回当前目录的上一级目录 cd 回上一次所在的目录 cd 或 cd 回当前用户的宿主目录 mkdir 目录名 创建
  • ide运行报错“Command line is too long”解决办法

    有时运行程序时 ide会报如下错 如何解决呢 其实提示已经告诉你解决办法了 点击图中的蓝色超链接 JAR MAINIFEST 或 CLASSPATH FILE 都能解决问题 这是因为命名的方法名太长了才会报这个错 方法2 如果没有弹窗 也可
  • 查看Linux下rpm文件安装到哪个路径

    命令 root localhost rpm qpl xxx rpm more
  • 用户数据报UDP

    UDP概述 UDP 只在 IP 的数据报服务之上增加了很少一点的功能 即端口的功能和差错检测的功能 UDP 的主要特点 UDP 是无连接的 不需要建立连接 直接发送数据 发送完以后也不需要释放连接 UDP 使用尽最大努力交付 即不保证可靠交