学习一个协议,首先就是去理解它的报文结构。
UDP数据报可以分为报头与载荷两个部分。
报头占八个字节,分别是源端口号,目的端口号,udp报文长度,UDP校验和,每个部分占两个字节。载荷是完整的应用层的数据报。报头和载荷可以认为是“拼接“在一起。
UDP报文长度:是一个两个字节的16位的数字,范围是0~2^16-1(65535)->64kb,也就是说整个UDP数据报最长为64kb,属于还是比较小的一个数据报。
校验和:校验,就是检查数据报是否出错,由于网络传输环境错综复杂,数据在传输过程中有可能会出错,所以就要有机制去识别错误。那么校验和是如何做到的?
首先,发送方在发送数据时,通过一定的算法,根据这个数据计算出校验和,然后把数据和校验和一起发送出去,接收方接收到数据,会再去计算校验和,如果这两个校验和不同,那么说明收到的数据和原来的不一样,就是出现了错误。
校验和计算方法:
循环冗余算法(CRC):
有很多种计算校验和的算法,其中UDP使用的是循环冗余算法(CRC),把要计算的数据的每个字节进行累加,其结果作为校验和,如果传输过程中数据出现错误,那么接收方计算出的校验和就会不一样。(这种方法不是特别靠谱,万一前面多个数据,后面丢个数据什么的,计算结果还是一样的。)
md5算法:经过一系列的公式计算(我们不需要去考虑格式是什么),得出一个校验和。
特点:
1.定长。无论数据长度怎样,计算得到的校验和长度是固定的。
2.分散。给两个数据,哪怕只有一个字节不一样,得到的校验和差异非常大。所以md5否侧适合哈希算法,哈希算法就是希望通过哈希函数计算得到的下标越分散越好,以此降低冲突。
3不可逆.给你一个计算得出的校验和,你是推不出来原来的数据是什么的。
基于UDP的应用层协议
有一些应用层协议是基于UDP实现的,虽然相比之下还是TCP使用比较多。
DNS:域名解析协议;DHCP:动态主机配置协议;TFTP:简单文件传输协议;NFS:网络文件系统;BOOTP:(无盘设备)启动协议。
标签:UDP,字节,报文,校验,算法,计算,数据,结构 From: https://blog.csdn.net/weixin_65469337/article/details/139564455