【计算机网络】UDP报文详解

目录

一. UDP协议概述

二. UDP报文格式

首部

三. UDP的缓冲区


一. UDP协议概述

UDP——用户数据报协议,是传输层的一个重要协议

基于UDP的应用层协议有:DNS,TFTP,SNMP,NTP

协议全称默认端口号
DNSDomain Name Service(域名服务)53
TFTPTrivial File Transfer Protocol(简单文件传输协议)69
SNMPSimple Network Management Protocol(简单网络管理协议)通过UDP端口161接收,只有Trap信息采用端口162
NTPNetwork Time Protocol(网络时间协议)123

UDP的主要特点:

  1. UDP是无连接的。即发送数据前不需要建立连接,发送数据结束也没有连接释放,因此减少了开销和发送数据前的时延
  2. UDP使用尽最大努力交付。即不保证可靠交付,因此不需要维护复杂的连接状态表(有许多参数)
  3. UDP是面向数据报的。发送方的UDP对应用层交付的报文,在添加首部后直接交付给IP层。UDP对应用层交付的报文,既不合并,也不拆分,而是保留这些报文的边界。也就是说,应用层给UDP多长报文,UDP就发多长,一次发送一个报文,如下图。
  4. 在接收方的UDP,对于IP层交付的UDP用户数据报,在去除UDP首部后也直接交付应用层,不作任何处理,一次交付一个完整的报文。因此这就将控制报文长度的工作交给了应用层:应用层要选择合适大小的报文。若报文太长,UDP封装后交给IP层,IP层在传输时可能要进行分片处理,减低了IP层的效率。反之,应用层报文太短,效率也低
  5. UDP没有拥塞控制。因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用很重要,如IP电话,实时视频会议等,要求源主机以恒定的速率发送数据,并且允许在网络拥塞时丢失一部分数据,但不允许数据有太大的时延
  6. UDP支持一对一,一对多,多对一和多对多的交互通信
  7. UDP的首部开销小,只有8字节,比TCP的20字节的首部短

二. UDP报文格式

UDP报文有两大部分组成:报头+有效载荷(数据),其中有效载荷就是应用层交付给UDP协议层的报文

首部

在学习协议报文时,首先要解决两个问题:1. 报头和有效载荷如何分离  2. 有效载荷如何向上交付

第一个问题:报头和有效载荷如何分离

在UDP中,报头的大小是固定的——8字节。所以只要截取前8字节,后面就都是有效载荷了

第二个问题:有效载荷如何向上交付

UDP是传输层的,上层是应用层。而应用层程序会绑定端口号,UDP报头中有16位(bit位)目的端口号,根据端口号做到向上交付


UDP报头由4部分组成:

  1. 源端口号:发送方的端口号
  2. 目的端口号:目的主机的端口号
  3. UDP长度:UDP报文的长度,单位字节,包括报头和有效载荷
  4. UDP校验和:保证报文完整性和正确性,出错就丢弃

如果接收方 UDP 发现收到的报文中的端口号不存在,就丢弃该报文,并由国际控制报文协议 ICMP发送“端口不可达”差错报文给发送方

三. UDP的缓冲区

UDP报头中,UDP长度为16为,即最长UDP报文时64KB(包含报头),如果长度超过64KB,需要应用层手动分包,多次发送,并在接收方手动拼接

因为UDP是面向数据报的,上层一次交付多少数据,就发送多少数据,所以UDP是没有发送缓冲区的,但是有接受缓冲区,因为需要等待上层处理。所以UDP是全双工的(可同时收发数据)

结束语

本篇博客到此结束,感谢看到此处。
欢迎大家纠错和补充
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。

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

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

相关文章

向宇的博客免责声明

文章目录 前言起因个人叠甲关于原创讨论对大家的一些话对CSDN的话学习群参与人员最后完结 前言 大家好,其实这里就只是我拿来记录自己的学习笔记的,但是随着关注度越来越高,发现我不能像之前那么随意了,想分享什么写什么&#xf…

python期末简答题及答案,python期末题库和答案

本篇文章给大家谈谈python期末简答题及答案,以及python期末题库和答案,希望对各位有所帮助,不要忘了收藏本站喔。 期末复习判断题 ( √ )Python变量名区分大小写,所以student和Student不是同一个变量。( &…

王道数据结构课后代码题p150 第13——17 (c语言代码实现)

目录 13.p 和 q 分别为指向该二叉树中任意两个结点的指针,试编写算法 ANCESTOR(ROOT,P,q,r),找到P和q的最近公共祖先结点 r 14.假设二叉树采用二叉链表存储结构,设计一个算法,求非空二叉树 b的宽度(即具有结点数最多的那一层的结点…

图的遍历(深度优先遍历 + 广度优先遍历)

目录 🌼广度优先遍历 (1)邻接矩阵BFS (2)邻接表BFS (3)非连通图BFS (4)复杂度分析 🌼深度优先遍历 (1)邻接矩阵的DFS &#x…

(企业 / 公司项目) 企业项目如何使用jwt?

按照企业的项目然后写的小demo, 自己搞一个登录接口然后调用jwtUtil工具类 后端实现 创建一个通用模块common来实现jwt生成token 登录注册的基本实现逻辑思路 面试| ProcessOn免费在线作图,在线流程图,在线思维导图 注释挺详细的jwtUtil工具类, 封装的…

记录 | xshell输出错乱解决

输出错乱问题: 解决方法:

Python 学习笔记之 networkx 使用

介绍 networkx networkx 支持创建简单无向图、有向图和多重图;内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富,简单易用 networkx 中的 Graph Graph 的定义 Graph 是用点和线来刻画离散事物…

C语言常用字符串

目录 1.什么是字符串 2.如何定义字符串 第3和第4定义的区别:3是字符串变量,4是字符串常量,不予许被修改 3.strlen和sizeof的区别 4.地址分配(malloc,realloc,free,memset) 案例 5.字符串拷贝(strcpy,strncpy) …

GitHub 开源开发者日,沙龙见闻与洞察

前言 12月10日,我有幸受邀参加了 GitHub Universe 2023 Watch Party in Shanghai – 开源开发者日。 这次活动在上海微软 Reactor 线下举行,与数位 AI 及开源大咖汇聚现场,与开源爱好者们共同畅聊开源之旅。 活动介绍 整个线下大会中&#…

西工大网络空间安全学院计算机系统基础实验二(清楚实验框架及phase_1)

首先,将自己的实验包从Windows系统中使用scp命令传到Linux虚拟机中。而要想传到Linux虚拟机中,第一步就是要确定Linux虚拟机的IP地址,如 图1:确定Linux虚拟机的IP地址 所示。接着使用scp命令将实验包从Windows系统传送到Linux虚拟…

Java - JVM内存模型及GC(垃圾回收)机制

JVM内存模型 JVM堆内存划分(JDK1.8以前) JVM堆内存划分(JDK1.8之后) 主要变化在于: java8没有了永久代(虚拟内存),替换为了元空间(本地内存)。常量池&#…