赞
踩
• 16位UDP⻓度,表⽰整个数据报(UDP⾸部+UDP数据)的最⼤⻓度;
• 如果校验和出错,就会直接丢弃;
UDP传输的过程类似于寄信.
• ⽆连接:
知道对端的IP和端⼝号就直接进⾏传输,不需要建⽴连接;
• 不可靠:
没有确认机制,没有重传机制;如果因为⽹络故障该段⽆法发到对⽅,UDP协议层也不会给应
⽤层返回任何错误信息;
• ⾯向数据报:
不能够灵活的控制读写数据的次数和数量;
应⽤层交给UDP多⻓的报⽂,UDP原样发送,既不会拆分,也不会合并
• 全双工
同时收发数据。它允许两台计算机在同一时间内进行双向通信。
报头一共有4个字段,每个字段2个字节
端口号 用2个字节来表示,取值范围0-65535
源端口:标识源主机中该次通信发送数据的进程
目的端口:标识目的主机盖茨通信接收数据的进程
长度:报文长度2字节,表示范围0-65535,等于64KB.一个UDP报文最大传输长度64KB
一旦整个数据的长度超过64KB,此时就可能导致数据出现截断(本来数据是完整,后面的部分没了)
解决办法
a.在应用层通过代码的方式针对应用层数据包进行手动分包,拆成多个包通过多个UDP数据报进行传输 不推荐使用
b.换成TCP协议
验证数据在传输过程中是否正确
UDP数据报发送端,在发送之前,先计算一遍CRC,把算好的CRC值放到UDP数据报中(设CRC值为,value1) 这个数据报通过网络传输到达接收端,接收端收到数据,按同样的算法再算一遍CRC值 得到的结果为value2,比较自己计算的value2和收到value1是否相同,一致 数据OK, 不一致 传输过程中发生bit翻转
如果一个bit位发生翻转,能100%发现问题
如果两个bit位发生翻转,有可能恰好校验和和之前一样
特点
a.定长 无论原始数据有多长,算出的md5最终值md5最终值都是固定值
b.分散 计算md5过程中 原始数据 只要变换一点,算出来的md5值就会很大,这个特性,也决定md5可以作为一个字符串hash算法
c.不可逆 给一个源字符,计算md5值(虽然比crc要复杂,整体来说,还可以) 但给一个算好的md5值,还原成原始字符串,理论上无法实现
应用层数据报
我们注意到,UDP协议⾸部中有⼀个16位的最⼤⻓度.也就是说⼀个UDP能传输的数据最⼤⻓度是64K(包含UDP⾸部).
然⽽64K在当今的互联⽹环境下,是⼀个⾮常⼩的数字.
如果我们需要传输的数据超过64K,就需要在应⽤层⼿动的分包,多次发送,并在接收端⼿动拼装;
UDP只有接收缓冲区、没有发送缓冲区
UDP没有真正意义上的发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致。如果缓冲区满了,再到达的UDP数据就会被丢弃。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。