UDP

用户数据报协议 (User Datagram Protoco, UDP)是一个简单的面向数据报的传输层(transport layer)协议,IETF RFC 768是UDP的正式规范。

在TCP/IP模型中,UDP为网络层(network layer)以下和应用层(application layer)以上提供了一个简单的接口。UDP只提供数据的不可靠交付,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。

UDP首部字段由4个部分组成,其中两个是可选的。各16-bit的源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以源端口是可选的,如果源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8 (octets)。首部剩下地16-bit是用来对首部和数据部分一起做校验和的,这部分是可选的,但在实际应用中一般都使用这一功能。

由于缺乏可靠性,UDP应用一般必须允许一定量的丢包、出错和复制。有些应用,比如TFTP,如果需要则必须在应用层增加根本的可靠机制。但是绝大多数UDP应用都不需要可靠机制,甚至可能因为引入可靠机制而降低性能。流媒体Streaming media、实时多媒体游戏和voice over IP (VoIP)就是典型的UDP应用。如果某个应用需要很高的可靠性,那么可以用传输控制协议Transmission Control Protocol来代替UDP。

由于缺乏拥塞避免和控制机制,需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。数据报拥塞控制协议Datagram Congestion Control Protocol (DCCP)设计成通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来减小这个潜在的问题。

典型网络上的众多使用UDP协议的关键应用一定程度上是相似的。这些应用包括域名系统Domain Name System (DNS)、简单网络管理协议simple network management protocol (SNMP)、动态主机配置协议Dynamic host configuration protocol (DHCP)和路由信息协议Routing Information Protocol (RIP)等等。