UDP协议

⭐ 作者:小胡_不糊涂
作者主页:小胡_不糊涂的个人主页
收录专栏:JavaEE
持续更文,关注博主少走弯路,谢谢大家支持

UDP

  • 1. 报文结构
  • 2. 特点

1. 报文结构

UDP协议_第1张图片

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

什么是检验和?
网络传输中,由于一些外部干扰,就可能会出现数据传输出错的情况。因此,就需要有办法,能够识别出出错的数据。校验和,就是这样的一种检查手段。

校验和本质上是一个字符串,体积比原始的数据更小又是通过原始的数据生成的。
原始数据相同,得到的校验和就一定相同。反之校验和相同,原始数据大概率相同(理论上会存在不同的情况,实际的概率非常低可以忽略不计)

校验和的计算:在UDP中使用的是CRC算法(循环冗余算法)。
把当前要计算校验和的数据,每个字节都进行累加,把结果保存到这个两个字节的变量中。
如果中间某个数据,出现传输错误,第二次计算的校验和就会和第一次不同。
但是CRC这个算法可能会导致两个不同的数据,得到相同的crc校验和的概率比较大。

为了避免上述问题,还有一种方法也可以计算校验和:md5算法

md5三个特点:

  • 定长:无论原始数据有多长,计算得到的md5都是固定长度
  • 分散:对于大部分内容都一样的原始数据,只要其中一个字节不同,得到的md5值差异就会很大
  • 不可逆:由原始数据计算md5是很容易的;但是由md5还原出原始数据是很难的

2. 特点

UDP传输的过程类似于寄信;

  • ⽆连接:UDP协议本身不会存储对端的信息,所以要在发送数据的时候显式指定要传输给谁。也就是知道对端的IP和端⼝号就直接进⾏传输,不需要建⽴连接;
  • 不可靠:没有确认机制,没有重传机制;如果因为⽹络故障该段⽆法发到对⽅,UDP协议层也不会给应⽤层返回任何错误信息;
  • ⾯向数据报: 不能够灵活的控制读写数据的次数和数量。应⽤层交给UDP多⻓的报⽂,UDP原样发送,既不会拆分,也不会合并;
  • 全双工:通过一个Socket,既可以send,也可以receive。

UDP协议⾸部中有⼀个16位的最大长度,也就是说⼀个UDP能传输的数据最⼤⻓度是64K(包含UDP⾸部),然⽽64K在当今的互联⽹环境下,是⼀个⾮常⼩的数字。
如果我们需要传输的数据超过64K,就需要在应⽤层⼿动的分包,多次发送,并在接收端手动拼装。

基于UDP的应⽤层协议:

  • NFS: ⽹络⽂件系统
  • TFTP: 简单⽂件传输协议
  • DHCP: 动态主机配置协议
  • BOOTP: 启动协议(⽤于⽆盘设备启动)
  • DNS: 域名解析协议
  • 也包括自己写UDP程序时⾃定义的应⽤层协议

你可能感兴趣的:(JavaEE,udp,网络协议,网络)