赞
踩
学习一个网络协议,主要就是学习“数据格式”/“报文格式”
- 端口号是属于传输层的概念
- UDP 报头使用两个自己的长度来表示端口号
- 之所以端口号的范围是 0~65535,是因为底层网络协议做出了强制要求
- 如果使用一个 10 w 这样的端口,就会在系统底层被“截断”
网络通信中,涉及到四个关键信息:源 IP/目的 IP,源端口/目的端口
UDP报文长度:报头长度 + 载荷长度
UDP 用了好多年,一直挺好用,但随着业务的发展,广告越来越多,越来越复杂,导致一个网络响应数据报的体积越来越大,逐渐逼近 64 KB。一旦数据超过了 64 KB,就可能到值数据被截断,这样广告可能就无法正常显示了。对于这样的情况,有两个解决方案:
前提:网络传输过程中,非常容易出现错误
校验和存在的目的,就是为了能够“发现”或者“纠正”这里的错误。就可以给传输的数据中,引入“额外信息”,用来发现/纠正传输数据的错误
checksum
举个例子:你妈让你去买菜,西红柿、鸡蛋、茄子、晃过,最后补充一句“一共四样”
- 这里的“一共四样”起到的作用就相当于是“校验和”。通过“一共四样”你可以对手里的菜进行检查,有没有买多、买少
但这样的“校验和”并不能准确的识别出问题,而且容易误判。所以我们希望校验和可以更严格地检查数据的内容,可以结合内容/内容的片段来生成校验和
- 比如你在默写金庸先生的十五部作品的名称,写完后,你可以通过“飞雪连天射白鹿,笑书神侠倚碧鸳”这一幅对联和你写的书名的第一个字对一下,若能对象,就说名此处的名字都是正确的
- 这样的校验和就是基于内容来进行校验的
把 UDP 数据报整个数据都进行遍历,分别取出每个字节,往一个两个字节的变量上进行累加
例如:我们去传输一个
UDP
数据报
- 发送方整合整个
UDP
数据,基于这些数据,计算得到一个checksum1
- 接收方收到的数据:
- 数据的内容
- 校验和
checksum1
- 接收方就可以根据数据的内容,按照同样的算法,再算一遍校验和,得到
checksum2
- 如果传输的数据在网络通信过程中,没有发生任何改变,则一定有
checksum1 == checksum2
本质上是一个“字符串 hash 算法”
特点:
MD5
的结果都是固定长度——>适合做校验和算法MD5
的值都会相差很大——>适合做 hash 算法MD5
非常简单,但是如果想通过 MD5
值还原出原始的内容,理论上是不可行——>适合作为加密算法Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。