无连接运输:UDP

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

如果应用程序使用的运输层协议是UDP,则应用程序几乎是直接与IP打交道的。UDP从应用进程得到数据,附加上用于多路复用/分解服务的源端口号和目的端口号及长度和检验和(即报文段首部)形成报文段,然后将报文段交给网络层。网络层将该运输层报文段封装在IP数据报中,然后尽力而为的尝试将此报文段交付给接收主机。若该报文段到达接受主机,UDP使用目的端口号将报文段中的数据交付给正确的应用进程。

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

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个字节。


下图为一些应用和应用层协议使用的运输层协议:

在进行udp传输时,需要明确一个是发送端,一个是接收端。

udp的发送端:

1,建立udp的socket服务,创建对象时如果没有明确端口,系统会自动分配一个未被使用的端口。

2,明确要发送的具体数据。

3,将数据封装成了数据包。

4,用socket服务的send方法将数据包发送出去。

5,关闭资源。

udp的接收端:

1,创建udp的socket服务,必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接收端可以处理的数据。

2,定义数据包,用于存储接收到数据。

3,通过socket服务的接收方法将收到的数据存储到数据包中。

4,通过数据包的方法获取数据包中的具体数据内容,比如ip、端口、数据等等。

5,关闭资源。


UDP特点:

1、是无连接的。减少了开销和发送数据的延迟。

2、使用尽最大努力交付,即不保证可靠交付

3、没有拥塞控制:因此网络出现拥塞不会使源主机的发送速率降低。这对某些实时应用很重要。很多实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络阻塞的情况下丢失一些数据,但是不允许数据有太大的时延。UDP正好适合这种情况。

4、支持一对一、一对对、多对一和多对多的交互通信

5、首部开销小,只有8个字节,比TCP的固定20个字节要短。

6、是面向报文的

*发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。UDP对应用层交下来的报文,既不合并也不拆分,而是保留这些报文的边界。

*接收方的UDP,对IP层交上来的UDP用户数据报,在去除首部后就原封不动的交付给上传的应用进程。

*即UDP一次交付一个完整的报文。因此,应用程序必须选择合适大小的报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率;若报文太短,UDP把它交给IP层时,会使IP层的首部的相对长度太大,这也降低了IP层的效率。

如下图:


差错校验

在计算校验和时,要在UDP用户数据报之前增加12个字节的伪首部。这个伪首部不是UDP数据报的真正首部,只是为了计算校验和时临时添加在UDP数据报的前面,得到一个临时的数据报。校验和就是按照这个临时的UDP数据报来计算的,伪首部既不会向下传送也不会向上交付,仅仅只是为了计算校验和而已。UDP的校验和是把首部和数据部分一起都校验。

视频使用什么协议?为什么?

视频使用的是UDP协议,因为UDP协议没有拥塞控制,说明网络上的拥塞不会使得源主机的发送速率降低,这对实时应用是很重要的。很多实时应用(比如IP电话,实时视频会议等)要求源主机以恒定的速率发送数据,并且允许网络上发生拥塞时丢失一些数据,但是却不允许数据有太大的时延。UDP协议正好符合这种要求。

如果使用UDP协议,如何在上层保证数据传输的可靠性?

由于UDP协议是无连接的,所以具有TCP望尘莫及的速度,不会像TCP协议中占用巨大的系统开销,严重影响速度。但是UDP没有确认响应和重传机制,传输数据并不可靠,所以,如果上层应用机制可以做到确认响应和重传机制那么无疑是在速度快的前提下可靠性也得到了保证。

我们可以模拟TCP的窗口机制,在发送端和接收端都开辟一个缓冲区,使用确认机制,这样又可以使到达的数据有序,而且丢失的数据将进行重传,保证了可靠性。


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页