传输层之UDP协议

1.传输层概述

传输层位于应用层和网络层之间。

传输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能,它是在端系统中而不是在路由器中实现的。在发送端,传输层将从发送应用程序进程接收到的报文转换成传输层分组,因特网术语将该分组称为传输层报文段。实现的方法是将应用报文划分为较小的块,并为每块加上一个传输层首部以生成传输层报文段。然后,在发送端系统中,传输层将这些报文段传递给网络层,网络层将其封装成网络层分组(即数据报)并向目的地发送。

要注意的是:网络路由器仅作用于该数据报的网络层字段,它们并不检查封装在数据报中的传输层报文段中的字段。在接收端,网络层从数据报中提取传输层报文段,并将该报文段上交给传输层。传输层则处理接收到的报文段,使该报文段中的数据为接收应用程序使用。


因特网为应用层提供了两种截然不同的传输层协议,一种是UDP(用户数据报协议),它为调用它的应用程序提供了一种不可靠、无连接的服务。另一种是TCP(传输控制协议),它为调用它的应用程序提供了一种可靠的、面向连接的服务。

UDP和TCP最基本的责任是,将两个端系统间IP的交付服务扩展为运行在端系统上的两个进程之间的交付服务;UDP和TCP还在其报文段首部中包含了差错检查字段而提供完整性检查;另外,UDP是一种无连接的、不可靠的服务,而TCP提供了可靠的数据传输,它通过使用流量控制、序号、确认和定时器,确保正确地、按序地将数据从发送进程交付给接收进程。除此之外,TCP还提供了拥塞控制。

2.UDP

UDP只是做了传输层协议能够做的最少工作。除了使用端口号标识应用进程以及少量差错检测外,它几乎没有对IP增加其他的东西。实际上,如果应用程序开发选择UDP而不是TCP,则该应用程序差不多就是直接与IP打交道。

UDP从应用进程得到数据,附加上源和目的端口号字段,以及两个其他的小字段,然后将形成的报文段交给网络层。

值得注意的是,使用UDP时,在发送报文段之前,发送方和接收方的传输层实体之间没有握手,正因为如此,UDP被称为是无连接的

2.1 UDP的优点

  • 1.无需连接建立。TCP在开始传输数据之前要经过三次握手。UDP却不需要任何准备即可进行数据传输。因此UDP不会引入建立连接的时延。这也可能就是DNS运行在UDP之上而不是TCP之上的主要原因。HTTP使用TCP而不是UDP,是因为对于具有文本数据的Web网页来说,可靠性是至关重要的。

  • 2.无连接状态。TCP需要在端系统中维护连接状态。此连接状态包括接收和发送缓存、拥塞控制参数以及序号与确认号的参数。而UDP不维护连接状态,也不跟踪这些参数。所以一些特定的应用为了支持更多的活跃用户,都选择建立在UDP之上。

  • 3.分组首部开销小。每个TCP报文段都有20字节的首部开销,而UDP仅有8字节的开销。

一些多媒体应用,如因特网电话、实时视频会议、流式存储音频和视频等,这些应用能够容忍少量的分组丢失,因此可靠数据传输对于这些应用的成功并不是至关重要的。此外,TCP的拥塞控制会导致如因特网电话、视频会议之类的实时应用性能变得很差。由于这些原因,多媒体应用开发人员通常将这些应用运行在UDP之上而不是TCP之上。

2.2 UDP报文段结构

这里写图片描述

UDP报文段结构如上图所示。
应用层数据占用UDP报文段的数据字段。例如,对于DNS应用,数据字段要么包含一个查询报文,要么包含一个响应报文。
UDP首部只有4个字段,每个字段由两个字节组成。通过端口号可以使目的主机将应用数据交给运行在目的端系统中的响应进程。长度字段指示了在UDP报文段中的字节数(首部加数据)。因为数据字段的长度在一个UDP段中不同于在另一个段中,故需要一个明确的长度。接收方使用检验和来检查该报文段是否出现了差错。

2.3 UDP检验和

UDP检验和提供了差错检测功能,这就是说,检验和用于确定当UDP报文段从源到目的地移动时,其中的比特是否发生了变化(例如,由于链路中的噪声干扰)。发送方的UDP对报文段中的所有16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷。得到的结果被放在UDP报文段中的检验和字段。

举例来说,假定我们有下面的3个16比特的字:

0110011001100000
0101010101010101
1000111100001100

这些16比特字的前两个之和是:

0110011001100000
0101010101010101
……………………………………….
1011101110110101

再将上面的和与第三个字相加,得出:
1011101110110101
1000111100001100
……………………………………….
0100101011000010

注意到最后一次加法有溢出,它要被回卷。反码运算就是将所有的0变成1,所有的1变成0.因此,该和0100101011000010的反码运算结果是1011010100111101,这变为检验和。

在接收方,全部的4个16比特字(包括检验和)加在一起,如果该分组没有出错,则显然在接收方处,该和将是1111111111111111。如果这些比特之一是0,那么我们就知道分组中出了差错。

要知道的是,虽然UDP提供差错检测,但它对差错恢复无能为力。UDP只是丢弃受损的报文段或者将受损的报文段交给应用程序并给出警告。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值