UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 [1] 是UDP的正式规范。UDP在IP报文的协议号是17。(摘自百度百科)
UDP报文格式、

- 16位源/目端口号:用来标识两台端主机的唯一进程,有利于套接字的多路分解和复用。
- 16位udp长度:标识udp报文的长度,即报头加上data端;由于只有16位大小,所以一个UDP数据报最大就是64K(65536 / 1024 = 64 单位 kb),从现在来看,这个64K的空间属实太小了,一个图片都放不下。主要因为UDP诞生的时间比较早,对于当时来说,64k的空间已经足够使用,如果使用UDP来传输数据,一定要警惕大的报文,如果报文长度超过64K,此时就可能丢失一部分数据
- 16位检验和:检测UDP数据(包含头部和数据部分)报在传输中是否有错或者被修改,出现问题就丢弃。在UDP协议中,校验和是可选字段,不是强制性要求。
UDP协议的特点、
(1)无连接
当发送方的socket创建好之后,就可以立即尝试读写数据。
举个例子,你随便告诉我了一个地址(相当于IP地址)和电话号码(相当于端口号),我不管这个地方是不是真的存在,我就向这个地方发送了数据。这个过程就相当于无连接。
(2)不可靠传输
由于数据在网络上传输存在丢包及传输错误甚至被恶意篡改的情况,UDP无法规避这些情况。UDP传输数据就像,从我这里离开之后,你出现的任何问题,都与我无关。
(3)面向数据报
以一个一个的数据报为基本单位(每个数据报多大,不同的协议里面是有不同的约定的)发送的时候,一次至少发一个数据报(如果尝试发一个半,实际只能发出去一个)。接收的时候,一次至少接收一个数据报(如果尝试收半个,剩下半个就没了)
(4)全双工
支持双向通信,可以同时向对方发送接收数据。
需要注意的是UDP并不是全双工协议,它本质上是一个无连接的协议,没有像TCP那样的建立连接过程,因此不存在TCP中的“三次握手”和“四次挥手”等操作。
因为UDP没有连接的概念,所以它也没有“半连接”和“全连接”的概念,因此不能称之为“全双工”或者“半双工”协议。在UDP中,每次发送数据都是独立的,没有前后关系,也没有保证接收方一定能收到数据。如果需要双向通信,需要两个端点各自创建一个UDP套接字,互相发送数据。
应用场景、
UDP协议的应用场景主要包括以下几个方面:
- 实时应用:由于UDP协议的无连接、不可靠和低延迟等特点,使得它非常适合实时应用,如音视频通信、网络游戏等。
- 广播和多播:UDP协议支持广播和多播传输方式,可以向多个主机同时发送相同的数据,因此常被用于视频直播、在线教育等应用。
- DNS解析:DNS协议是基于UDP协议的,因为DNS请求通常是小数据量的,且需要快速响应,不需要建立连接和保证可靠性。
- 简单的传输协议:由于UDP协议没有TCP协议的握手和拥塞控制等复杂机制,因此它的开销更小,适合传输简单的数据,如网络探测、网络测速等。
需要注意的是,由于UDP协议的不可靠性,应用程序需要自己实现错误处理和重传机制,确保数据的可靠性和完整性。因此,在应用UDP协议时需要根据实际情况进行权衡和选择。
Comments NOTHING