计算机网络运输层之UDP

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljianhui/article/details/22004443
一、UDP概述
UDP(用户数据报协议,User Datagram Protocol),它只是做了运输层协议能够做的最少工作,除了多路复用和多路分解及一些差错检测外,它几乎没有做任何东西。如果应用程序使用的运输层协议是UDP,则应用程序几乎是直接与IP打交道的。

同时,UDP也是一种无连接的运输层协议,因为在使用UDP时,在发送报文段之前,发送方和接收方的运输层实体之间没有进行握手,所谓的握手,就是发送方和接收方通过发送一些特定的报文段来互相确认,从而为发送做准备。

UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP是不可靠的数据报协议),也不要求接收方回复接收成功确认,也不会重发数据,不提供流量控制,更不提供拥塞控制。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。

二、UDP报文段结构
根据上面所述,其报文段结构如下图所示(图片来源:http://www.cnblogs.com/zplutor/archive/2011/07/05/2098641.html)

从上图可以看出,UDP首部只有4个字段,每个字段由两个字节组成。

源端口号是本机(客户端)的应用程序的套接字所对应的端口号,服务器端可利用此端口号向客户端发送数据。

目的端口号是服务端上的应用进程的套接字所对应的端口号,例如HTTP服务器的80端口。

长度指明了首部和数据部分的UDP报文段的总长度,单位为字节,即首部+数据。

检验和提供了差错检测功能,即检验和用于确定当UDP报文段从源到达目的时,其中的比特是否发生了改变。事实上,计算检验和时,除了UDP报文段以年还使用了IP首部的一些字段。注意,它只能检测到一个报文段发生了错误,但并不能纠正这个错误。

三、UDP的优势
从UDP的概述中,我们可以看到,UDP其实并不提供什么服务,而TCP则为我们提供了非常吸引的服务(如重发机制、流量控制、接收确认、拥塞控制等等),实现的是一个可靠的传输。为什么还在存在UDP这个东西呢?每一样事物都有它的优点,而且很多时候,事物的缺点恰恰就是它的优点。我为何这么说,下面就来看看它的优势吧!

1、应用层能更好发控制要发送的数据和发送时间。
为什么采用UDP的应用层能更好地控制发送的数据和时间呢?因为UDP只提供最简单、服务最少的服务,所以当网络应用进程有数据传递给UDP时,UDP马上就会将此数据打包成UDP报文段,并把它交付给网络层,从而把数据发送出去。相反,由于TCP提供了各种的机制,特别是拥塞控制,以便让源和目的主机间的一条或多条链路变得非常拥塞时,遏制运输层TCP发送方,从而让因特网电话、视频会议之类的实时应用性能变得很差。再者,TCP还会继续重发数据报文段直到目的主机收到此报文并加以确认,点面结合 不管可靠的交付需要多少时间。TCP的这些特性,对于一些实时应用来说通常是不适合的,因为它们通常要求以最快的发送速率发送数据,而不想过分地延迟报文的传送,而且它还能容忍一些数据丢失,所以没用必要使用TCP,使用TCP还会增加额外的负担。

2、无需连接建立
如上述的那样,UDP是一个无连接的运输层协议,而TCP在开始数据传输之前要经过三次握手。UDP由于它是一个无连接的协议,所以可以不需要任何准备即可进行数据传输,因此它不会引入建立连接的时延。所以DNS运行在UDP之上而不是TCP之上,因为如果DNS运行在TCP之上,则会由于要建立过多的连接而产生过长连接延时,从而让DNS运行得很慢。

3、无连接状态
TCP由于在提供各种可靠传输的服务,需要在端系统中维护连接状态。此连接状态包括接收和发送缓存、拥塞控制参数、序号与确认序号等参数。而UDP不维护连接状态,也不跟踪这些参数。因此,使用UDP的服务器能支持更多的活动客户机。

4、分组首部开销小
由于UDP提供的服务少,只提供多路分解和多路复用和校验功能,所以其首部字段少,只有8个字节,而TCP的首部有20个字节。

PS:关于UDP的编程应用,本人的这篇文章提供了一个简单的例子:

猜你喜欢

转载自blog.csdn.net/ljianhui/article/details/22004443