006-UDP用户数据报文协议
一、概述
用户数据报协议(英语:User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简单的面向数据报的传输层协议,正式规范为RFC 768。
在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。
UDP首部字段由4个部分组成,其中两个是可选的。各16bit的来源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以来源端口是可选的,如果来源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。首部剩下地16bit是用来对首部和数据部分一起做校验和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。
由于缺乏可靠性且属于非连接导向协议,UDP应用一般必须允许一定量的丢包、出错和复制粘贴。但有些应用,比如TFTP,如果需要则必须在应用层增加根本的可靠机制。但是绝大多数UDP应用都不需要可靠机制,甚至可能因为引入可靠机制而降低性能。流媒体(流技术)、即时多媒体游戏和IP电话(VoIP)一定就是典型的UDP应用。如果某个应用需要很高的可靠性,那么可以用传输控制协议(TCP协议)来代替UDP。
由于缺乏拥塞控制(congestion control),需要基于网络的机制来减少因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中,增加主机拥塞控制,来减小这个潜在的问题。
典型网络上的众多使用UDP协议的关键应用一定程度上是相似的。这些应用包括域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)和某些影音流服务等等。
二、UDP的分组结构
偏移 | 字节 | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
字节 | 位 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | 来源连接端口 | 目的连接端口 | ||||||||||||||||||||||||||||||
4 | 32 | 报文长度 | 校验和 |
UDP报头包括4个字段,每个字段占用2个字节(即16个二进制位)。在IPv4中,“来源连接端口”和“校验和”是可选字段(以粉色背景标出)。在IPv6中,只有来源连接端口是可选字段。
- 报文长度
- 该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。实际上通过IPv4协议传输时,由于IPv4的头部信息要占用20字节,因此数据长度不可能超过65507字节(65,535 − 8字节UDP报头 − 20字节IP头部)。
- 在IPv6的jumbogram中,是有可能传输超过65535字节的UDP数据包的。依据RFC 2675,如果这种情况发生,报文长度应被填写为0。
- 校验和
- 校验和字段可以用于发现头部信息和数据中的传输错误。该字段在IPv4中是可选的,在IPv6中则是强制的。如果不使用校验和,该字段应被填充为全0。
三、UDP校验和计算
IPv4伪头部[编辑]
当UDP运行在IPv4之上时,为了能够计算校验和,需要在UDP数据包前添加一个“伪头部”。伪头部包括了IPv4头部中的一些信息,但它并不是发送IP数据包时使用的IP数据包的头部,而只是一个用来计算校验和而已。
位 | 0 – 7 | 8 – 15 | 16 – 23 | 24 – 31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 来源地址 | |||||||||||||||||||||||||||||||
32 | 目的地址 | |||||||||||||||||||||||||||||||
64 | 全零 | 协议名 | UDP报文长度 | |||||||||||||||||||||||||||||
96 | 来源连接端口 | 目的连接端口 | ||||||||||||||||||||||||||||||
128 | 报文长度 | 检验和 | ||||||||||||||||||||||||||||||
160+ | 数据 |
IPv6伪头部[编辑]
位 | 0 – 7 | 8 – 15 | 16 – 23 | 24 – 31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 来源地址 | |||||||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||||||||
64 | ||||||||||||||||||||||||||||||||
96 | ||||||||||||||||||||||||||||||||
128 | 目的地址 | |||||||||||||||||||||||||||||||
160 | ||||||||||||||||||||||||||||||||
192 | ||||||||||||||||||||||||||||||||
224 | ||||||||||||||||||||||||||||||||
256 | UDP报文长 | |||||||||||||||||||||||||||||||
288 | 全零 | 下一个指针位置 | ||||||||||||||||||||||||||||||
320 | 来源连接端口 | 目的连接端口 | ||||||||||||||||||||||||||||||
352 | 报文长 | 校验和 | ||||||||||||||||||||||||||||||
384+ | 数据 |
wiki地址:https://zh.wikipedia.org/wiki/%E7%94%A8%E6%88%B7%E6%95%B0%E6%8D%AE%E6%8A%A5%E5%8D%8F%E8%AE%AE
相关文章
- 大数据产业未来的瓶颈在哪里
- 基层民警体验大数据、云计算、人工智能带来的巨变
- 利用MyBatis Generator进行数据层代码自动生成
- 【STM32F407】第10章 ThreadX NetXDUO UDP用户数据报协议基础知识
- 【STM32F407】第14章 UDP用户数据报协议基础知识
- [PHP]PHPOffice/PHPExcel数据导入方法
- 实例:Netty 处理 TCP协议数据分包问题
- Atitit 传媒学院专业与课程表艾提拉总结 目录 1. 媒体分为感觉媒体、表示媒体、表现媒体、存储媒体和传输媒体1 1.1. 1、感觉媒体 如文字、数据、声音、图形、图像等。1 1.2. 表示
- TCPIP 协议栈中的协议 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
- Go Programming Blueprints 读书笔记(谈到了nsq/mgo处理数据持久化,可是业务逻辑不够复杂)
- 伪基站,卒于5G——本质上是基于网络和UE辅助的伪基站检测,就是将相邻基站的CI、信号强度等信息通过测量报告上报给网络,网络结合网络拓扑、配置信息等相关数据,对所有数据进行综合分析,确认在某个区域中是否存在伪基站
- Dynamo涉及的算法和协议——p2p架构,一致性hash容错+gossip协议获取集群状态+向量时钟同步数据
- 案例:使用RPA工具影刀抓取HTTP数据(更便捷的数据抓取,复习HTTP协议、字典和列表)
- 网络安全——数据链路层安全协议
- 硬盘被格式化后数据如何恢复(在mac电脑上抹掉了)
- 数据链路层 点对点信道 PPP协议HDLC协议 特点 数据链路层协议的基本问题 循环冗余检验原理 HDLC的帧格式 PPP与HDLC比较 数据链路 帧 图解 新手入门 保姆式解析 表情包理解
- 802.11协议数据帧详解(一)——802.11帧结构与分类
- 计算机网络 数据链路层 协议知识点总结
- 传输层 用户数据报协议(UDP)
- 老杨说运维 | 从业二十余年运维老兵,教你如何用低代码处理复杂数据
- 【大数据开发运维解决方案】sqoop增量导入oracle/mysql数据到hive时时间字段为null处理