UDP协议
1. UDP概述
UDP(UserDatagramProtocol)是一个简单的面向消息的,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP消息的状态。因此,UDP有时被称为的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。
UDP使用具有最小协议机制的简单通信模型。UDP提供数据完整性的校验和,以及用于在数据报的源和目标寻址不同函数的端口号。
-
UDP的优点:简单,轻量化,传输速度快、效率高。
-
UDP的缺点:不可靠传输
特点:
- 无连接
- 面向数据报
- 不可靠传输
- 全双工
2. UDP报文格式
UDP首部有8个字节,由4个字段构成,每个字段都是两个字节,
- 源端口: 源端口号,需要对方回信时选用,不需要时全部置0.
- 目的端口:目的端口号,在终点交付报文的时候需要用到。
- 报文长度:UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部)
- 校验和:检测UDP数据报在传输中是否有错,有错则(差错检测)丢弃。
- 载荷:存储的是应用层数据报
3. UDP传输限制
由于UDP的16位报文长度(包含首部)所以UDP报文一次最大可以传输64kb左右的数据。
64KB在实际应用中是一个非常小的数据量,在现在这个时代,随便一张照片可能就好几兆,那么如果一个数据的大小超过64KB,此时一个如何处理呢?
-
可以将数据分成多个UDP数据报,分多次传输
-
不适用UDP,使用TCP数据报传输(TCP没有这样的限制)
4. UDP校验和
校验和是为了校验数据在传输过程中有没有损耗,从而检查数据的正确性。网络传输归根到底是将光电信号数字化,如果出现一些特殊情况,如:电场/磁场/高能射线等影响,就看会影响数据的传输。
在数据报中加入校验和,只需要接收方接收到数据之后计算一个校验和,和数据报中的校验和对比,如果一致,那么数据大概率是正确的。
4.1 CRC 循环冗余校验算法
循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。这也是UDP中使用的校验算法。
4.2 md5 校验算法
md5相比于CRC,它不是简单的进行相加,而是通过一系列的公式,进行更复杂的数学运算而得到。
md5算法的特点:
-
定长:不管你的数据是 几KB 还是几MB 甚至是几GB,得到的结果长度都是固定的(有4字节版本,8字节版本…)
-
分散:原始数据即使改变了1位,得到的MD5值都会相差很大,会让结构更加分散
-
不可逆:通过原始数据计算出MD5值,很容易,但是通过MD5值去计算出原始数据,很难,几乎是不可能的