一、报文结构
UDP报头中有四个字段,每个字段占16位,也就是两个字节,那么报头长度就是8个字节.
因此udp长度的取值范围就是0-65535(单位为字节),最大值也就是64kb,因此一个UDP数据报的最大长度就是64kb - 8.
二、报头
1.源端口号
源端口号就是发送方进程的端口号,也是接收方返回数据的目的地.
2.目的端口号
目的端口就是接收方进程的端口号,是发送方发送数据的目的地.
3.UDP长度
udp长度的取值范围就是0-65535(单位为字节),最大值也就是64kb,因此一个UDP数据报载荷的最大长度就是64kb - 8.
4.UDP校验和
校验和的作用是验证数据在传输过程中是否正确.
网络数据在传输的过程中可能会受到干扰,就会发生比特翻转.校验和的作用就是识别当前数据是否发生了比特翻转,检验当前数据是否是正确的数据.如果接收方发现自己计算的校验和与数据报中的校验和不一样该数据报就会被丢弃.
这里我们讲两种完成校验和的算法
CRC算法
short checkSum = 0;
for(遍历当前数据报中每个字节的数据) {
checkSum += 当前字节的数据;//加的过程中产生的数据可能比较大,超过了short两个字节溢出,但是不管
}
UDP数据报发送方,在发送之间,先计算一遍CRC,把算好的CRC值放到UDP数据报中.
接收方收到这个数据报之后,会按照同样的算法,在算一遍CRC的值,得到的结果是会与数据报中记录的结果进行比较,如果数据一致,就说明数据没问题,如果不一致,就说明传输过程中发生比特翻转了.
上述的CRC算法如果只有一个bit位发生了翻转,此时就100%能够发生问题.但是如果多个bit位发生了翻转那么就可能校验和就会和之前的一样.
下面的md5算法就能更精确的知道数据有没有发生比特翻转.
md5算法
1.定长
无论原始数据有多长,算出来的md5的最终值都是固定长度.
2.分散
计算md5的值,就算原始数据发生了一点点变化,算出来的md5的值都会差异很大.
网络传输中,如果出现了bit翻转,意味着只是极少数的bit翻转,即使是1个bit位发生了翻转,那么计算出来的md5的值差异也是非常大的.
3.不可逆
一个源字符串,计算md5的值,这个过程相对来说比较简单,但是给你一个md5的值,要你还原成原始的字符串,这个过程理论上来说是无法完成的.所以md5算法也会被用于一些加密场景.
三、载荷
载荷上存储的一般都是应用层需要传输的数据.可能是各种应用数据,例如音频、视频、文本等.