UDP协议详解
目录
一. UDP协议概述
1. 概念
2. 特点
(1) 无连接
(2) 不可靠
(3) 面向数据报
(4) 全双工通信
(5) 轻量级
(6) 校验和
二. UDP协议报文格式
1. 源端口号
2. 目的端口号
3. UDP报文长度
4. 校验和
5. 数据(正文)
TCP/IP 网络模型将网络协议分为五层: 物理层, 数据链路层, 网络层, 传输层, 应用层. 本篇博客我们讲的UDP协议就是一个传输层协议.
一. UDP协议概述
1. 概念
UDP (User Datagram Protocol) 翻译为"用户数据报协议". 是一种简单的, 无连接的, 不可靠的传输层协议,它为应用程序提供了一种无需建立持久连接就能发送数据的方式。UDP是传输层协议之一.
2. 特点
(1) 无连接
UDP不需要在数据传输之前建立连接. 发送方只需将数据报发送到网络, 而不需要与接收方进行握手。
(2) 不可靠
UDP不保证数据报的可靠传输. 它不提供 确认应答, 重传丢失数据报, 保证数据报顺序 等功能.
(3) 面向数据报
UDP传输数据的基本单位是数据报 (datagram), 每个数据报都是一个独立的信息单元, 包括源端口, 目的端口, 长度和校验和.
(4) 全双工通信
UDP允许数据同时在两个方向上传输, 实现全双工通信. 什么叫全双工通信? --> 就是进行通信的双方可以同时发送和接收数据 (就像打电话一样).
(5) 轻量级
由于UDP不需要建立和维护连接状态, 因此它的头部开销比TCP更小, 处理速度也更快.
(6) 校验和
UDP头部包含一个可选的校验和,用于检测数据在传输过程中是否发生错误.
二. UDP协议报文格式
UDP协议的报文格式如上两张图, UDP报文共有5部分 (报头4部分 + 正文1部分)
但这里需要注意的是: 实际的UDP报文并没有上图中的换行操作, 也就是说 UDP报文实际是一行文本.
其中UDP报头长度固定, 为8个字节. 报头中的4个字段之间没有分隔符, 是通过固定长度来区分的. (前2个字节是源端口, 接下来的2个字节是目的端口, 再接下来的2个字节是UDP报文长度 ......).
下面我们分别详细介绍一下报文中的这5部分:
1. 源端口号
数据报发送方的端口号.
2. 目的端口号
数据报接收方的端口号.
[注:] 由于我们这里规定端口号的长度是2个字节, 所以如果一旦传入长度大于2个字节的端口号, 那么端口号就会在底层被截断, 无法正确传输.
3. UDP报文长度
报文长度的单位是字节(byte). 通过上图我们看到, UDP报文长度存储在一个2个字节的空间里.
2个字节表示的范围是 0 - 65535, 也就是说, UDP报文的最大存储长度是 65535Bytes (大约是64KB (65535/1024)).
4. 校验和
数据在网络传输的过程中, 是非常容易受到干扰, 出现错误的. 所以 "校验和" 存在的目的就是为了发现和纠正这里出现的错误.
校验和的基本工作流程如上: 首先发送方根据要传输的数据生成一个校验和 checkSum1, 然后将UDP数据报传输给接收方. 接收方收到数据报之后, 再根据所接收到的数据生成一个新的校验和checkSum2.
- 如果数据在传输过程中没有收到影响, 那么两次计算得到的校验和应该是一样的 (checkSum1 == checkSum2).
- 如果数据在传输过程中受到影响, 那么校验和也就会发生改变 (checkSum1 != checkSum2).
业界计算校验和的方式有多种, 常见的有: CRC(循环冗余校验), MD5算法, SHA1算法 等.
5. 数据(正文)
正文部分是一个完整的应用层数据包. 由应用层封装好.