UDP是工作在OSI(开放系统互连,Open Systems Interconnection)模型中传输层的协议。它使用IP作为底层协议,是为应用程序提供一种以最少的协议机制向其他程序发送消息的协议。其主要特点是无连接,不保证可靠传输和面向报文。RFC 768为IETF(互联网工程部,Internet Engineering Task Force)提供的UDP标准。
协议简介
UDP(User Datagram Protocol,用户数据报协议)是在一组互连的计算机网络环境中提供分组交换计算机通信的数据报模式。该协议假定使用IP作为底层协议,按照OSI模型工作在传输层。UDP为应用程序提供了一种以最少的协议机制向其他程序发送消息的过程 。该协议是面向事务的,不保证传递和重复保护。需要有序、可靠地传输数据流的应用程序应使用传输控制协议 (TCP)。
报文格式
首部格式
用户数据报UDP有两个字段,数据字段和首部字段。首部字段有8个字节,由四个字段组成,每个字段的长度都是2字节 。各字段意义如下:
1. 源端口(Source Port)源端口号,在要求对方回信时选用,不要求时可使用全0。
2. 目的端口 (Destination Port)目的端口号。这在终点交付报文时必须使用。
3.长度(Length)UDP用户数据报的长度,包括首部和数据,其最小值是8(仅有首部)。
4. 检验和(Checksum) 若检验和用于检测UDP用户数据包在传输中是否有错,如果出错则将报文丢弃。计算检验和时,首先将全零放入检验和字段,再把伪首部以及UDP用户数据报看成是由许多16位字串接起来的。若UDP用户数据包的数据部分不是偶数个字节,则要跳入一个全零字节(此字节不发送),然后按二进制反码计算出这些16位字的和 。
伪首部(Pseudo Header)
在计算检验和时,要在UDP用户数据报之前增加12个字的伪首部。所谓伪首部是因为这种伪首部并不是真正的首部,只是在计算检验和时,临时添加在UDP用户数据报前面,得到一个临时的UDP用户数据报 。检验和就是按照这个临时的UDP用户数据报来计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。
伪首部包含如下部分 :
1. 源地址(source address)
2.目的地址(destination address)
3. 置零域(zero)
4.协议字段(protocol)
5.UDP长度(UDP length)
主要特点
(1)无连接。UDP在发送数据前不进行连接,发送结束时也没有连接可以释放,减少了开销和发送数据之前的时延。
(2)尽最大努力交付。UDP不保证可靠交付,因此主机不维持复杂的连接状态。
(3)面向报文。发送方的UDP对应用程序交下来的报文,再添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。接收方的UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程 。UDP一次交付完整的报文,因此应用程序必须选择合适大小的报文。
(4)无拥塞控制。很多实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许网络发生拥塞时丢失一些数据,却不允许数据有太大的时延,UDP正好适合这种要求 。
(5)支持一对一、一对多、多对一和多对多的交互通信。
(6)首部开销小。UDP只有8个字节的首部。
协议对比
UDP是无连接的协议,也不保证可靠交付,只在IP数据报服务至上增加了很少的功能,主要是复用和分用以及差错检测的功能。这适用于要求源主机以恒定速率发送数据,允许网络拥塞时丢失数据,却不允许数据有太大时延的实时应用。
TCP则是面向连接的传输层协议,提供可靠的交付服务。TCP把连接作为最基本的抽象,连接的端点叫做套接字(socket)。每一条TCP连接唯一地被通信两端的两个端点(即套接字对 socket pair)所确定,即每一条TCP连接只能是点对点的 。应用程序在使用TCP协议之前必须先建立TCP连接,在传送数据完毕后必须释放已经建立的TCP连接。TCP提供全双工通讯,允许通信双方的应用进程在任何时候都能发送数据,TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。与面向报文的UDP不同,TCP是面向字节流的。这里的“流”(stream)指的是流入到进程或者从进程流出的字节序列 。虽然应用程序和TCP的交互是一次一个大小不等的数据块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流,并不知道所传送的字节流的含义。TCP适用于需要有序、可靠地传输数据流的应用程序。
接口与应用
用户界面应允许创建新的接收端口,在接收端口上执行操作,以返回数据以及源端口和源地址的指示。同时允许发送数据报,指定要发送的数据、源端口和目标端口以及地址。
UDP模块必须能够从首部确定源地址和目标地址以及协议字段。一个可能的UDP/IP接口将返回整个数据报,包括所有首部,以响应接收操作。这样的接口还允许UDP将带有首部的完整互联网数据报传递给要发送的IP。IP将验证特定字段的一致性并计算首部校验和。
UDP主要应用于协议的主要用途是 Internet Name Server和简单文件传输,其协议号为17。