公司网站开发维护,产品做推广一般上什么网站,安徽论坛网站建设,高级服装定制文章目录 前言一、UDP报头二、UDP校验和2.1 CRC2.2 md5 前言
学习一个网络协议#xff0c;最主要就是学习的报文格式#xff0c;对于UDP来说#xff0c;应用层数据到达UDP之后#xff0c;会给应用层数据报前面加上UDP报头。 UDP数据报UDP包头载荷 一、UDP报头 如上图UDP的… 文章目录 前言一、UDP报头二、UDP校验和2.1 CRC2.2 md5 前言
学习一个网络协议最主要就是学习的报文格式对于UDP来说应用层数据到达UDP之后会给应用层数据报前面加上UDP报头。 UDP数据报UDP包头载荷 一、UDP报头 如上图UDP的报头主要就分为四个部分分别占据两字节的空间。 前两个源端口号和目的端口号很好理解就是客户端以及服务器的端口号用来表示主机上的程序的。第三个UDP长度因为只占了两个字节的空间所以UDP数据包的长度加上包头最多只能达到64kb的长度这是很局限的。不禁会想为什么不把UDP的长度设置的高一点呢实际上UDP出现的时代很早那时64kb已经完全满足通信需求了只是随着我们现在网络的发展才越来越不够用了。那为什么现在不能够改一下UDP提高它的长度呢对于这件事也没想象中的简单单个主机的修改或升级是没有意义的需要对端也升级也就是说要升级全世界得一起升级这个成本难以想象。并且如果单独你升级了和别人通信不了站在别人的角度就是你那边除了bug。
二、UDP校验和
数据在网络传输的过程中是很容易出错的我们需要有办法去对传输的数据进行校验校验分为两层第一层就是发现是否出错第二层就是找到错误在哪并且纠错这两层本质上都是要引入额外的冗余信息但是第二层的代价比较大在UDP数据报中实现到了第一层发现是否有错。 校验和就是拿着数据进行一系列计算得到结果如果数据部分发生改变此时得到的结果也就不一样。在通信过程中就是接收方拿到UDP数据包后计算数据包的校验和然后和UDP首部的校验和比较相同则代表未发生意外相异则说明数据出了问题。
2.1 CRC
UDP中使用CRC算法循环冗余校验计算校验和这种算法首先设定两个字节的变量然后把数据报中的每个字节取出来往这个变量上累加如果结果超出两个字节溢出部分就舍弃。 这个方法主要是为了让数据的每个字节都参与到运算中去都能够影响结果最终算的是啥不关键关键在于接收方算出的校验和和发送方算的是否相同。 假设使用一个很大的变量来保存最终总结果能够得到精确值但是也是用来完成相同/不同的比较具体多少也不关键所以为了节省空间高位就可以不要了就留最低两个字节即可。
2.2 md5
除了CRC之外还有一个很常用的方法md5可以作为字符串hash算法。 md5的三个特点 1定长无论你的输入是什么md5的输出都是定长的字符串。 2不可逆通过原输入计算md5成本很低将md5字符串还原成原输入成本非常高仅仅理论上可行。 3分散输入的内容哪怕改变一点点差异都很大。