运输层概述
运输层位于应用层和网络层之间,是分层网络体系结构中的重要部分,该层为在运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。通常我们比较关注的就是TCP和UDP运输层协议。
网络层的两个端系统之间的交付服务扩展到运行在两个不同端系统上的应用层进程之间的交付服务。两个主要的问题就是:1.两个实体怎样才能在一种会丢失或损失的媒体上可靠的通信。2.控制运输层实体的传输速率以避免网络中的拥塞,或从拥塞中恢复过来。
网络应用程序可以使用多种的运输层协议,例如因特网有两种协议,即TCP和UDP,每种协议都能为条用应用程序提供一组不同的运输层服务。这些协议一种是UDP(用户数据报协议)它为调用他的应用程序提供了一种不可靠,无连接的服务。另外一种是TCP(传输控制层协议)它为调用他的应用程序提供了一种可靠的,面向连接的服务。
UDP-用户数据报协议
UDP服务模型提供了一种不可靠的,无连接的服务。在设计这种服务的时候,也许首先考虑使用一个无所事事的运输层协议,特别是在发送方一侧,考虑将来自应用进程的数据直接交给网络层;在接收方一侧,考虑从网络层到达的数据直接交付给网络层。运输层最低限度必须提供一种复用/分解(多路复用/多路分解)服务,以便在网络层与正确的应用级进程之间传递数据。
UDP只是做了运输协议能够做的最少工作,除了复用/分解功能以及少量的差错检测外,它几乎没有对IP增加别的东西。UDP从应用进程得到数据,附加上用于多路复用/分解服务的源和目的端口号字段,以及两个其他的小字段,然后将形成的报文段交给网络层。网络层将该运输层报文段封装到一个IP数据报中。然后尽力而为的将此报文段交付给接收主机。如果该报文段到达接受主机,UDP使用目的端口号将报文中的数据交付给正确的应用进程。需要注意的是,使用UDP时,发送报文段之前,发送方和接收方的运输层实体之间没有握手,正因为如此,UDP被称为无连接的。
DNS是使用UDP的应用层协议。当一台主机的DNS应用程序需要进行一次查询时,它构造了一个DNS查询报文,并将其交给UDP,无须执行任何与运行在目的端系统中的UDP实体之间的握手,主机端的UDP为此报文添加首部字段,然后将形成的报文段交给网络层,网络层将此UDP报文段封装进一个IP数据报中,然后将其发送给一个名字服务器。在查询主机的DNS应用程序则等待对该查询的响应。如果没有收到响应(可能是由于底层网络丢失了查询或响应)要么试图向另一个名字服务器发送该查询,要么通知调用它的应用程序它不能获得响应。
为啥是UDP
虽然在校招面试中常会问TCP的知识,但这并不代表TCP比UDP应用的更加广泛。有许多应用更适合UDP而不是TCP,主要原因如下:
1、关于何时、发送什么数据的应用层控制更为精细。
采用UDP时,只要应用进程将数据传递给UDP,UDP就会将次数据打包进UDP报文段,并立即将其传递给网络层,在另一方面,TCP有一个拥塞控制机制,以便当源和目的主机间的一条或多条链路变得极度拥塞时来遏制运输层TCP发送方。TCP仍将继续重新发送数据包文段,直到目的主机收到此报文段并加以确认,而不管可靠交付需要用多长时间。因为实时应用通常要求最小的发送速率,不希望过分的延迟报文段的传送,切能容忍一些数据丢失,TCP服务模型并不是特别适合这些应用的需要。这时候这些应用可以使用UDP,并作为应用的一部分来实现所需的功能。
2.无需建立连接。TCP在开始数据传输之前要经过三次握手。UDP却不需要任何准备即可进行数据传输。因此UDP不会引入建立连接的时延。这可能是DNS运行在UDP之上而不是运行在TCP之上的主要原因。(如果运行在TCP上,则DNS会慢很多)。HTTP使用TCP而不是UDP,因为对于具有文本数据的网页来说,可靠性是至关重要的。HTTP中的TCP连接建立时延对于与下载Web文档相关的时延来说是一个重要因素。
3.无连接状态。TCP需要在端系统中维护连接状态。此连接状态包括接收和发送缓存、拥塞控制参数以及序号与确认号的参数。要实现TCP的可靠数据传输服务并提供拥塞控制,这些状态信息是必要的。在另一方面,UDP不维护连接状态,也不跟踪这些参数。因此,某些专门用于某种特定应用的服务器当应用程序运行在UDP之上,而不是TCP之上时,一般都能支持更多的活跃客户。
4.分组首部开销小。每个TCP报文段都有20字节的首部开销,而UDP仅有8字节的开销。
电子邮件、远程终端访问、Web及文件传输都运行在TCP之上。因为这些应用都需要TCP的可靠数据传输服务。无论如何,有很多重要的应用是运行在UDP上而不是TCP上,UDP被用于RIP路由选择表的更新。
但是,UDP的应用是可以实现可靠数据传输的。这可通过在应用程序自身建立可靠性机制来完成。