当前位置:   article > 正文

UDP 的报文结构和注意事项

UDP 的报文结构和注意事项

 一.UDP协议端格式


• 16位UDP⻓度,表⽰整个数据报(UDP⾸部+UDP数据)的最⼤⻓度;
• 如果校验和出错,就会直接丢弃;

1.UDP的特点

UDP传输的过程类似于寄信.
• ⽆连接:

知道对端的IP和端⼝号就直接进⾏传输,不需要建⽴连接;

• 不可靠:

没有确认机制,没有重传机制;如果因为⽹络故障该段⽆法发到对⽅,UDP协议层也不会给应
⽤层返回任何错误信息;

• ⾯向数据报:

不能够灵活的控制读写数据的次数和数量;

应⽤层交给UDP多⻓的报⽂,UDP原样发送,既不会拆分,也不会合并

• 全双工

同时收发数据。它允许两台计算机在同一时间内进行双向通信。

2.UDP报文结构

a.报头

报头一共有4个字段,每个字段2个字节

端口号 用2个字节来表示,取值范围0-65535

源端口:标识源主机中该次通信发送数据的进程

目的端口:标识目的主机盖茨通信接收数据的进程

长度:报文长度2字节,表示范围0-65535,等于64KB.一个UDP报文最大传输长度64KB

一旦整个数据的长度超过64KB,此时就可能导致数据出现截断(本来数据是完整,后面的部分没了) 

解决办法 

a.在应用层通过代码的方式针对应用层数据包进行手动分包,拆成多个包通过多个UDP数据报进行传输   不推荐使用

b.换成TCP协议

b.校验和

验证数据在传输过程中是否正确

1)CRC算法(循环冗余校验)

UDP数据报发送端,在发送之前,先计算一遍CRC,把算好的CRC值放到UDP数据报中(设CRC值为,value1) 这个数据报通过网络传输到达接收端,接收端收到数据,按同样的算法再算一遍CRC值  得到的结果为value2,比较自己计算的value2和收到value1是否相同,一致 数据OK,  不一致 传输过程中发生bit翻转

如果一个bit位发生翻转,能100%发现问题

如果两个bit位发生翻转,有可能恰好校验和和之前一样

2)md5算法

特点

a.定长    无论原始数据有多长,算出的md5最终值md5最终值都是固定值

b.分散    计算md5过程中 原始数据 只要变换一点,算出来的md5值就会很大,这个特性,也决定md5可以作为一个字符串hash算法

c.不可逆 给一个源字符,计算md5值(虽然比crc要复杂,整体来说,还可以) 但给一个算好的md5值,还原成原始字符串,理论上无法实现

c.载荷

应用层数据报

二.UDP使⽤注意事项

我们注意到,UDP协议⾸部中有⼀个16位的最⼤⻓度.也就是说⼀个UDP能传输的数据最⼤⻓度是64K(包含UDP⾸部).
然⽽64K在当今的互联⽹环境下,是⼀个⾮常⼩的数字.


如果我们需要传输的数据超过64K,就需要在应⽤层⼿动的分包,多次发送,并在接收端⼿动拼装;

UDP只有接收缓冲区、没有发送缓冲区
UDP没有真正意义上的发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致。如果缓冲区满了,再到达的UDP数据就会被丢弃。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/231433
推荐阅读
相关标签
  

闽ICP备14008679号