简介
udp(User Datagram Protocol),中文名为用户数据报协议,协议我们都知道是一个网络通信的参与方必须遵循的相同的规则,只有遵守这个约定,计算机之间才能相互通信交流。UDP协议则是一种无连接的传输层协议,与TCP协议一样,两者都处于传输层协议,通常用于媒体数据流的传输。
UDP的特点
UDP是一种无连接的传输层协议,它不保证数据传输的可靠性,但是具有传输速度快、开销小等特点。UDP协议主要用于需要快速传输数据且对数据的可靠性要求不高的场景,如ip电话,分布式系统信息的传输(短距离的传输 UDP 的传输的效率是很高的)
特点 | 描述 |
无连接 | 在传输数据之前不需要建立连接,也不需要维护连接状态,可以看作是一股脑地传输,因此传输速度快。 |
不具可靠性 | 不保证数据传输的可靠性,因为它不提供重传机制、异常处理等功能,如果数据在传输过程中出现丢失或错误,UDP协议也不会进行任何处理。 |
全双工通信 | 信允许数据在两个方向上同时传输,比如打电话,通话双方可以同时讲话。 |
面向数据报 | 数据报是通过网络传输的数据的基本单元,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和 “荷载” 数据之间的关系。UDP协议的头部只有8个字节,相比TCP协议的头部要小得多,开销也相对小。 |
支持广播和多播 | 支持广播和多播,可以将数据同时发送给多个主机。 |
TCP和UDP的主要区别是在于:
TCP 是面向有连接,采用字节流传输,数据传输可靠的全双工通信协议。
UDP 是面向无连接,采用数据报传输,数据传输不可靠的全双工通信协议。
UDP报文格式
UDP报文主体分为两个部分: UDP报头(占8个字节的数据) + UDP数据 / UDP载荷
- 荷载:比较容易理解,里面存储的是应用层的数据报。
- UDP报头:源端口,目的端口,报文长度,校验和,组成,每个部分占两个字节,可以描述的数据范围是 [0, 65535] 。
(源端口:表示数据从哪里来form;目的端口:表示数据到哪里去;报文长度:描述一条UDP数据所占字节大小,一条 UDP 数据报最大长度是 65536 个字节 = 64KB;校验和:网络传输环境不能保证百分百的稳定,受环境的影响,多多少少会出现数据的缺失或破损,所以校验和的目的就是为了判断一下当前数据是否出错,只能由接收端来判断,UDP协议是不提供重发机制的,只负责传输;荷载:也就是UDP中所包含的应用层数据报的信息,UDP 报文长度(最大值) - UDP 报头即可得荷载大小,整个报头是由四部分组成的,每部分占有2个字节,一共占有8个字节,所以荷载最大存储空间为64-8=56个字节。)
UDP传输策略
上面说到一条UDP数据最多只能传输56个字节,对于实际应用来说,太小了,当面对传输数据较为大的时候,UDP会将一个大的数据拆分成多个小数据,使用多个UDP来传输。只需约定好数据报的解析协议重组即可。
UDP协议的工作流程
- 应用程序将应用层数据报传输给UDP协议。
- UDP协议将数据封装成UDP数据报(直接在应用层数据报的基础上加上UDP 报文),包括源端口号、目的端口号、数据长度等信息。
- UDP协议将UDP数据报传输给IP协议。
- IP协议将UDP数据报封装成IP数据报,包括源IP地址、目的IP地址等信息。
- IP数据报通过网络传输到目的主机。
- 目的主机的IP协议将IP数据报解封装成UDP数据报。
- UDP协议将UDP数据报传输给应用程序