1. UDP协议报文格式
1.1 16位端口号
UDP协议报文中,端口号占2个字节,包括 源端口号 和 目的端口号。
1.2 16位UDP长度
UDP报文长度为2个字节 ,即UDP数据报长度为0~65535,也就是64kb。
1.3 16位UDP检验和
数据在网络传输的过程中,可能会受到一些外部干扰,导致数据传输出错。因此,检验和就是一个检查手段,来判断数据在传输的过程中是否出了错。
【检验和完成数据校验的基本流程】:
(1)发送方把要发送的数据处理好,将该数据记为data1 ,并通过相应的算法,计算出校验和sum1.
(2)发送方将data1和sum1一起发送给 接收方。
(3)接收方 接收到数据后,收到的数据记为 data2(可能和data1不同了),且收到 校验和sum1。
(4)接收方根据data2数据,按照相同的算法,计算出校验和sum2.
(5)对比校验和sum1和sum2是否相同。如果不同,说明data1和data2不相同,也就是数据传输时出错了。如果sum1和sum2相同,则大概率data1和data2是相同的(存在不同的可能性)。
通过以上流程,就可以判断数据在网络中传输时是否发生了错误。
【那么计算校验和使用的是什么算法呢】
UDP使用的算法是CRC循环冗余算法。此算法将要计算校验和的数据,每个字节进行累加,并将结果保存在 UDP报文中 存放 校验和数据的 两个字节 的变量中。如果数据在传输的过程中数据发生了错误,接受方算出的校验和也会有差异,这样就能判断数据经过传输后是否发生了错误。
除了CRC算法,还有更靠谱的算法,就是 md5算法。
md5算法,通过一系列公式,算出来的校验和,有以下特点:
(1)定长:无论发送方发送的数据有多长,通过md5算法,算出来的校验和都是 固定的长度。
(2)分散:即使发送方连续两次发送数据,且两次发送的数据只存在个别字符不同,md5算法给这两条数据算出的校验和仍有很大差异。
(3)不可逆:给定一个数据,使用md5算法能够得出 校验和。若 给出该校验和,要求生成原始数据,则是不可行的。
以上是UDP协议的相关知识,UDP协议的特点是 面向数据报,全双工,无连接,不可靠。也因此,相对于TCP协议来说,UDP协议传输数据的效率更高,UDP协议的机制相对来说也更加简单。