赞
踩
无连接
不可靠传输(传出去了不管有没有接受到,容易数据丢失)
面向数据报
全双工
UDP协议报文结构,这个图在很多计算机网络教科书上都有,而且都是这么在花,但是实际这么画不够严谨
个人理解图应该如下:
源端口:源端口号。在需要对方回信时选用。不需要使用时可用 0 填充。
目的端口:目的端口号。这在终点交付报文时必须使用。
长度:UDP 用户数据报的长度,其最小值是 8(即仅有首部部分),单位:字节。
校验和:检测 UDP 用户数据报在传输过程中是否出错。有错就丢弃。
UDP报头里包含了一些特殊的属性,携带了一些重要的信息
不同的协议功能不同,报头中带有的属性信息就不同
对于UDP来说,报头一共就是八个字节,分成四个部分(每个部分都是均衡的两字节)
UDP 报头:8个字节,4个字段.
2字节 源 端口 + 发送方端口
2字节 目的端口 + 接受方端口
2字节 UDP报文长度 (范围:0 -> 65535) (一个UDP数据报,最长就是65535字节)
2字节 校验和 (发送方把要发送的数据计算出校验和(checksum1),接收方收到数据把数据按照同样的方式再计算一次校验和(checksum2),同时接受方也收到了checksum1,接受方比对checksum1和checksum2是否相同)
类比货拉拉搬家环节
买家叫车时,根据需要决定定什么样的车
车厢用来装货的部分就叫做 "载荷"
车头用来标识这辆车的身份,是大型车还是中型车,货车还是客车
UDP会把载荷数据通过UDP Socket,通过send方法拿来的数据的基础上在前面拼接几个字节的报头(相当于字符串拼接,此处是二进制的,不是文本的)
一次网络通信涉及到
五元组(源IP,源端口,目的IP,目的端口,协议类型)(两字节)
UDP报文长度(数据范围0->65535,64KB)(两字节)
Tips:
一个UDP数据报最大只能传输64KB的数据这是大呢还是小呢?如果应用层数据超过了64KB怎么办?
1. 就需要在应用层,通过代码的方式针对应用层数据报进行手动的分包, 拆成多个包,通过多个UDP数据报进行传输(本来send一次,现在send多次),就跟搬家的时候东西太多,一车装不下,就分多车装
2. 不用UDP,(因为使用如果使用上一条UDP传输拆分方案就得写很多代码很得进行多次测试处理bug,工作量大大增加,程序员的幸福感就降低了)直接换成TCP就没有这种限制.
校验和:验证传数的数据是否正确,网络传输的本质是光信号和电信号的转换,在这过程中,可能会受到一些物理环境干扰如电场,磁场,高能射线等,导致出现"比特翻转"(1->0,0->1)状况,数据一旦发生了改变,对数据的含义来说是致命的,例如在很多程序中经常使用1表示某功能的开启,0表示关闭.本来网络数据报是想开启这个功能,结果因为比特翻转导致变成了关闭...这后果可想而知是非常严重的!但这样的现象又是客观存在的,不可避免,程序员能做的就是能及时识别出错误信息!
因此就映入了校验和来进行鉴别
大致的鉴别方式如下:针对数据内容进行一系列数学运算,得到一个比较短的结果(比如两个字节的数据),如果数据内容一定,得到的校验和结果就一定,如果数据有变化,得到的校验和也就跟着与原来不同,所以只要前后内容是相同的,按照同样的算法得到的校验和也应该是相同的
但是实际的网路传输过程是把所有的字节都参与生成校验和运算,这样任何一个字节出了问题,都能及时的被发现!
Tips:
如果内容相同,得到的校验和一定相同(肯定的),但有时候不同内容按照相同的计算法则计算出的校验和可能相同(存在极小概率).但是在工程实践中,这种情况就忽略不计了,一般认为,校验和相同原始内容也相同
例子:就像我妈叫我去买"葱,姜,蒜",并最后嘱咐一共要三样!我由于没见过蒜长啥样,买回去了"葱,姜,辣椒"也是三样.这例子中的"三样"就相当于我与我妈之间数据传输的"校验和"但是在传输过程中出现了干扰使得我最终得到的信息内容不一样,就产生了错误!
针对网络传输的数据来说,生成校验和的算法有很多种,其中比较知名的有
简单粗暴,把数据的每个字节都循环的往上"累加",如果累加溢出了,截出高位不要.
此方法好计算,但是有相应的弊端,如果数据同时变动两个bit位(前一个字节少1,后一个字节多1)就会出现内容变了,但是CRC结果没有变这种情况
此方法不是简单的累加,有一系列公式来进行更复杂的数学运算(数学逻辑不过多介绍)
MD5算法的特点:
定长:无论原始数据多长,得到的MD5值都是固定的长度(4/8字节)
冲突概率很小:原始数据哪怕只变动一个地方,最后算出来的MD5的值也会差别很大,让结果更加分散
不可逆:通过原始数据计算MD5值很容易,但是通过MD5还原成原始数据(找到那个数据生成了次MD5值)就很难,理论上是不可实现的计算量极大,但也有很多解码网站他们的原理大多以"打表"的方式,把一些常用的数据计算出MD5值存储下来,用户输入MD5再在他的数据里面去一一核对(我们常见的WiFi万能
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。