用户数据报协议
用户数据报协议(UserDatagramProtocol,UDP)是一个简单的面向无连接的,不可靠的数据报的传输层(transportlayer)协议,IETFRFC768是UDP的正式规范。在TCP/IP模型中,UDP为网络层(networklayer)以上和应用层(applicationlayer)以下提供了一个简单的接口。UDP只提供数据的不可靠交付,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。由于缺乏可靠性,UDP应用一般必须允许一定量的丢包、出错和复制。
中文名:用户数据报协议
外文名:UserDatagramProtocol,UDP
含义:UDP首部字段由4个部分
域:源端口是可选域,
特点:缺乏可靠性
1、简介
用户数据报协议(UDP,UserDatagramProtocol)是IP上层的另一重要协议,它是面向无连接的、不可靠的数据报传输协议。它仅仅将要发送的数据报传送至网络,并接收从网上传来的数据报,而不与远端的UDP模块建立连接。UDP为用户的网络应用程序提供服务,例如网络文件系统(NFS,NetworkFileSystem)和简单网络管理协议(SNMP,SimpleNetworkManagementProtocol)等。UDP保留应用程序所定义的消息边界,它既不会将两个应用程序的消息连接到一起,也不会把一个应用程序的消息分成多个部分。UDP同样有自己的校验和字段,但当两个UDP模块之间仅通过以太网连接时,也可以不需要校验和。
2、含义
UDP首部字段由4个部分组成,其中两个是可选的。各16-bit的源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以源端口是可选的,如果源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8(octets)。首部剩下地16-bit是用来对首部和数据部分一起做校验和的,这部分是可选的,但在实际应用中一般都使用这一功能。
由于缺乏可靠性,UDP应用一般必须允许一定量的丢包、出错和复制。有些应用,比如TFTP,如果需要则必须在应用层增加根本的可靠机制。但是绝大多数UDP应用都不需要可靠机制,甚至可能因为引入可靠机制而降低性能。流媒体Streamingmedia、实时多媒体游戏和voiceoverIP(VoIP)就是典型的UDP应用。如果某个应用需要很高的可靠性,那么可以用传输控制协议TransmissionControlProtocol来代替UDP。
由于缺乏拥塞避免和控制机制,需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。数据报拥塞控制协议DatagramCongestionControlProtocol(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来减小这个潜在的问题。
典型网络上的众多使用UDP协议的关键应用一定程度上是相似的。这些应用包括域名系统DomainNameSystem(DNS)、简单网络管理协议simplenetworkmanagementprotocol(SNMP)、动态主机配置协议Dynamichostconfigurationprotocol(DHCP)和路由信息协议RoutingInformationProtocol(RIP)等等。
3、用户数据报头格式
域
源端口是可选域,当其有意义时,它指的是发送进程的端口,这也就假定了在没有其它信息的情况下,返回信息应该向什么地方发送。如果不使用它,则在此域中填0。目的端口在有特定的目的网络地址时有意义。长度指的是此用户数据报长度的八进制表示。(这表明最小的数据报长度是8。)校验码有16位,是对IP头,UDP头和数据中信息包头的数位取反之和再取反得到的。
包头从概念上说是在UDP头信息之前的,它包括有源地址,目的地地址,所使用的协议和UDP长度。这些信息使信息不能被错误地接收。这个校验过程与TCP中使用的过程一致。
如果计算出的校验码为零,它将被全零发送。全零的校验值意味着发送者未产生校验码。
用户接口
用户接口应该允许创建新的接收端口,在接收端口的接收操作有:应该返回一个八进制数说明源端口和源地址,允许数据报传送,指定数据,源和目标端口和目的地地址。
IP层接口
UDP模块必须能够决定源和目标的网络地址,而且必须能够从包头中得知所使用的协议。一个可能的接口方式是返回整个数据报,包括接收操作返回的包头。这样的接口还应该允许UDP向IP传送完整的带包头的数据报用于传送。由IP来确定一致性并计算校验码。
4、协议应用
此协议的最主要的用途是网际名称服务器和小文件传输协议。
协议号
在IP中使用它时,它的协议号是17(八进制中是21)。
5、功能
每个UDP报文分UDP报头和UDP数据区两部分。报头由四个16位长(8字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验和。用户数据报其中包含了8字节固定长度的UDP数据报头和可变长的数据区。其中,数据报头中个字段定义如下:
(1)源端口和目的端口,分别用于标识数据报的源端进程和目的端进程所使用的端口。字段长度为16比特,最大支持64k个端口号。源端进程不需要目的端返回数据报,源端口字段可设为0
(2)数据报长度,16比特,纪录以字节计算的整个数据报的长度。
(3)数据报校验和,16比特,用于数据报的校验和保护,在UDP中,校验的功能是可选的,若不使用校验,该字段的值为0。
6、分层与封装
UDP是一种传输协议,位于IP层之上。应用程序需要发送的数据将被UDP协议封装到UDP数据报中;然后UDP数据报在IP层封装到IP分组中发送。
UDP数据报包含了一个UDP数据报头和数据区。UDP数据报头中包含了UDP协议的控制信息,数据区用于承载高层的用户数据。在进行封装时,一个UDP数据报必须被封装到一个IP分组中传递啊,一次UDP数据报的最大长度不能超过IP分组数据区允许的最大长度(IP分组的最大长度不能超过64k字节)。在UDP层,用户数据首先被加上一个UDP报头生成UDP数据报。在IP层,整个用户数据报被加上一个IP分组头,生成一个IP分组,再封装到数据链路的帧中传输(在数据链路帧的封装中,有可能需要使用分段)。分组在Internet中利用IP的分组转发功能到达接收端。在接收端接受一个数据报时,底层的封装(数据链路层和IP层)被逐层剥去(这个过程可能需要进行IP的重组),将原有数据报提交给接收端的UDP系恶意软件。UDP软件将处理UDP数据报头中的控制信息,并根据数据报中目的端口号将用户数据提交到相应的UDP端口,等待应用程序读取。
因此,UDP的数据传输是有结构的,即UDP一次传输一个数据报,应用程序一次提交的用户数据被封装到一个数据报中,整个数据报作为一个整体在Internet上传递。在传输成功时,整个数据报中的数据全部成功接收;若传递失败,整个数据报中的数据将全部消失。
7、复用、分解与端口
UDP协议中数据报收发的功能通常基于UDP端口实现的。UDP协议实现了基于端口的复用功能。每个应用程序在发送数据报之前,必须与操作系统进行协商以获得某个可用的UDP端口(当然也可以自行分配端口,但需要保证系统中不能存在端口冲突)。应用程序利用该端口发送数据报时,需要将端口号放如UDP报文的源端口字段中。如果源端发送数据报无需对方回复,则不需要在本地分配端口,可将源端口字段置为0。
一般,在操作系统中UDP的端口与普通的I/O端口类似,是一个可读写的结构。应用软件通过对端口的读写来实现数据报的收发。在UDP端口内部通常包含了数据缓冲区,用于缓存到达数据报以及暂时未能发送的数据报。在大多数的UDP实现中,当应用程序与操作系统协商,试图使用某个端口接收数据报时,操作系统将为该端口创建一个内部队列来容纳收到的报文。通常应用程序可以指定和修改端口队列的长度。
8、特点
①UDP是无连接的,即发送数据之前不需要建立连接(当然发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延;
②UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表;
③UDP是面向报文的;
④UDP没有拥塞控制;
⑤UDP支持一对一、一对多、多对一、和多对多的交互通信;
⑥UDP的首部开销小。
推荐阅读