计算机网络复习(三)(运输层)(应用层)
6.4 运输层
6.4.1 运输层协议概述
运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。只有主机的协议栈才有运输层。
运输层负责端到端的通信,既是七层模型中负责数据通信的最高层,又是面向网络通信的低三层和面向信息处理的最高三层之间的中间层。运输层位于网络层之上、会话层之下,它利用网络层子系统提供给它的服务去开发本层的功能,并实现本层对会话层的服务。运输层(传输层)解决的是计算机程序到计算机程序之间的通信问题,即所谓的“端”到“端”的通信。
运输层的最终目标是为传送服务用户提供有效、可靠和价格合理的运输服务,而传送服务的用户即会话层实体。运输层是OSI七层模型中最重要最关键的一层,是唯一负责总体数据传输和控制的一层。
运输层有一个很重要的功能:复用和分用。这里的“复用”是指在发送不同的应用进程都可以使用同一个运输层协议传送数据,而“分用”是指接收双方的运输层在剥去报文首部后能够把这些数据正确交付目的应用进程。
这里可以看出网络层和运输层的区别:网络层为主机之间提供逻辑通信,而应用层为应用进程之间提供端到端的逻辑通信。除此之外,运输层还需要对收到的报文进行差错检测。
运输层有2种不同的运输协议,即面向连接的TCP和无连接的UDP。当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但端到端的逻辑通信信道相当于一条全双工的可靠信道。当运输层采用无连接的UDP协议时,这种逻辑信道仍是一条不可靠的信道。
一、运输层的两个主要协议
用户数据报协议UDP:User Datagram Protocol
传输控制协议TCP:Transmission Control Protocol
图6.16给出了这两种协议在协议栈中的位置。
图 6.16 TCP/IP体系中的运输层协议
根据所使用协议的不同,两个对等运输实体在通信时传送的数据单位叫做TCP报文段和UDP用户数据报。
UDP |
TCP |
UDP在传送数据之前不需要先建立连接。目的主机在收到UDP报文之后不需要给出任何确认。UDP是一种不可靠交付。 |
TCP提供面向链接的服务。在传送数据前必须先建立连接,数据传送结束后释放链接。TCP不提供广播或多播服务,TCP提供可靠的、面向链接的服务。但是增加了很多开销。 |
二、运输层端口
不同计算机可能使用不同的操作系统,因此它们的进程标识符是不同的,因此不能在网络中使用进程标识符来标识应用层中的各种进程。因此必须使用统一的方法对TCP/IP体系的应用进程进行标识,而这种方法必须与特定的操作系统无关。解决这个问题的方法就是在运输层使用协议端口号,或简称为端口。
UDP和TCP的首部格式中都包含源端口和目的端口这2个重要的字段。当运输层收到从IP层交上来的运输层报文时,就能够根据其首部中的端口号把数据交付给应用层的目的应用进程。
TCP/IP的运输层采用一个16位的端口号来标志一个端口。但是端口号仅具有本地意义,它只是为了标志本计算机应用层的各个进程在和运输层交互时的层间接口。
因此2个计算机中的进程要通信,不仅需要知道对方的IP地址(为了找到对方计算机),而且还需要知道对方的端口号(为了找到对方计算机中的相应进程)。
运输层的端口号包含2个大类:服务器端使用的端口号和客户端使用的端口号。
6.4.2 用户数据报协议UDP
用户数据报协议UDP只是在IP的数据报服务之上增加了很少的一点功能:复用分用以及差错检测。UDP的主要特点是:
1、UDP是无连接的,发送数据前不需要建立连接,因此减小了开销和发送数据之前的时延。
2、UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
3、UDP是面向报文的。对应用层序交下来的报文,在添加首部后就向下交给网络层,除此之外不做多余操作,仅保留报文边界。
4、UDP没有拥塞控制。
5、UDP支持一对一、一对多、多对一和多对多通信。
6、UDP首部开销较小,只有8个字节,比TCP20个字节的首部要短。
用户数据报UDP有2个字段:数据字段和首部字段,首部字段只有8个字节。其中有一个字段叫做检验和,其作用是检测UDP用户数据报在传输中是否有错,有错就丢弃。
6.4.3 传输控制协议TCP概述
一、TCP的主要特点
1、TCP是面向连接的运输层协议,即应用程序在使用TCP协议之前,必须先建立TCP连接。传送数据完毕后,必须释放已建立的TCP连接。
2、TCP连接仅支持一对一通信。
3、TCP提供可靠交付。通过TCP连接传送的数据无差错、不丢失、不重复且按序到达。
4、TCP提供全双工通信,TCP允许通信双方的应用进程在任何时候都能发送和接收数据。这通过发送缓存和接收缓存实现。
5、面向字节流。
二、TCP的连接
TCP把连接作为最基本的抽象。每一条TCP连接都有2个端点,TCP连接的端点叫做套接字socket或插口。端口号拼接到IP地址即构成了套接字。套接字的表示方法是在IP地址后面写上端口号,中间用逗号或冒号隔开。
例 6.4.1 若IP地址为192.3.4.5,端口号为80,则套接字是多少?
(192.3.4.5:80)
套接字的格式为:
套接字socket = (IP地址 : 端口号)
每一条TCP连接唯一的被通信两端的两个端点(即两个套接字)所确定,即:
TCP连接::={socket1, socket2}={(IP1:port1),(IP2:port2)}
IP1和IP2分别是两个端点主机的IP地址,port1和port2分别是两个断点主机中的端口号。TCP连接的两个套接字就是socket1和socket2。
6.4.4 可靠传输的工作原理
一、停止等待协议
考虑A发送数据而B接收数据并发送确认。因此A叫做发送方,B叫做接收方。传送的数据单元都称为分组,不考虑数据在哪一个层次上传送。“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。这原本是个链路层协议,运输层并不使用,这里只是为了引出可靠传输的问题。
停止等待协议可能会发生多种情况,图6.17中就是反映了无差错和超时重传两种情况。
图 6.17 停止等待协议
(a)是最简单的无差错情况,(b)是传输过程中出现差错的情况。在后者出现差错的情况可能有2种,一是B接收M1时出了差错,就丢弃了M1,其他什么也不做;二是M1在传输过程中丢失,B什么也不知道。在这两种情况下B都不会发送任何信息。可靠传输协议是这么设计的:A只要超过了一段时间仍没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组,这就叫超时重传。要实现超时重传,需要在发完每一个分组时设置一个超时计时器。若在超时计时器到期之前收到对方的确认,就撤销已设置的超时计时器。
图6.18是确认丢失和确认迟到两种情况。
图 6.18 确认丢失和确认迟到
(a)中B发送的对M1的确认丢失了,A在超时重传时间内没有收到确认,一次一段时间后重传M1,假定B又收到M1,则B可以采取2个行动:一是丢弃重复分组M1,不向上层交互,二是向A发送确认,不能以为已发送过确认就不能再发。(b)中M1的确认迟到了,A会收到重复的确认。对重复的确认的处理很简单,收下后就丢弃。B会收到重复的M1,同样要丢弃重复的M1,并重传确认分组。
停止等待协议的优点是简单,但是缺点是信道利用率太低。
二、连续ARQ协议
连续ARQ(Automatic Repeat request)协议指发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,而中途不需要等待对方的确认。这样信道的利用率就提高了。而发送方每收到一个确认就把发送窗口向前滑动一个分组的位置。
图 6.19 连续ARQ协议的工作原理
接收方一般都是采用积累确认的方式。这就是说,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都已正确收到了。
积累确认有优点也有缺点。优点是:容易实现,即使确认丢失也不必重传。但缺点是不能向发送方反映出接收方已经正确收到的所有分组的信息。
例如,如果发送方发送了前5个分组,而中间的第3个分组丢失了。这时接收方只是对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。这就叫做Go-back-N(回退N),表示需要再退回来重传已发送过的N个分组。可见当通信线路质量不好时,连续ARQ协议会带来负面的影响。
6.4.5 TCP报文段的首部格式
TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段,一个TCP报文段分为首部和数据两部分。首部前20个字节是固定的,首部的最小长度也为20个字节。
TCP的分用功能也是通过端口实现的。
确认ACK:表示发来的数据已确认接收无误。
同步SYN:在连接建立时用来同步序号。SYN=1,ACK=0时表明这是一个连接请求报文段。若对方同意建立连接,则应在响应的报文段中使SYN=1,ACK=1。因此SYN置为1表示这是一个连接请求或连接接受报文。
6.4.6 TCP的流量控制
一、利用滑动窗口实现流量控制
如果发送方数据发送地过快,接收方就有可能来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
利用窗口滑动机制可以很方便地在TCP连接上实现对发送方的流量控制。
发送方的发送窗口不能超过接收方的接收窗口,且TCP的窗口单位是字节,而不是报文段。
二、TCP的传输效率
可以使用不同机制来控制TCP报文段的发送时机。
第一种机制是TCP维持一个变量,它等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去。
第二种机制是由发送方的应用进程指明要求发送报文段,即TCP支持的推送操作。
第三种机制是发送方的一个计时器期限到了,这是就把当前已有的缓存数据装入报文段发送出去。
6.4.7 TCP的拥塞控制
一、拥塞控制的一般原理
计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏。这种情况就叫做拥塞。网络拥塞往往由许多因素引起。
所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有主机、所有路由器,以及降低网络传输性能有关的所有因素。相反,流量控制往往是指点对点通信量的控制,是一个端到端的问题。流量控制所需要做的是抑制发送端发送数据的速率,以便接收端来得及接收。
二、TCP拥塞控制的方法
TCP进行拥塞控制的算法有四种,即慢开始,拥塞避免,快重传和快恢复。这些拥塞控制都是基于窗口的拥塞控制,为此发送方维持一个叫拥塞窗口cwnd的状态变量。拥塞窗口大小取决于网络的拥塞程度,并且在动态的变化。发送方让自己的发送窗口等于拥塞窗口。
发送方判断网络拥塞的依据就是出现了超时。
慢开始 |
由小到大逐渐增加发送窗口。在每收到一个对新的报文段的确认后,就可以把拥塞窗口增加最多一个SMSS数值。慢开始算法开始后,每经过一个传输轮次,拥塞窗口cwnd就加倍。 |
拥塞避免 |
该算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是像慢开始那样加倍的增长。在拥塞避免阶段,该算法的拥塞窗口呈线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。 |
快重传 |
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。发送方只要一连收到3个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传。使用快重传可使整个网络的吞吐量提升约20%。 |
快恢复 |
快速恢复算法是认为,你还有3个重复确认说明网络也不那么糟糕,所以没有必要像超时重传机制那么强烈,并不需要重新回到慢启动进行,这样可能降低效率。 |
一个传输轮次所经历的时间其实就是往返时间RTT。
6.4.8 TCP的运输连接管理
运输连接有三个阶段:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都可以正常进行。
一、TCP连接的建立
TCP建立连接的过程叫握手,握手需要在用户和服务器之间交换3个TCP报文段。图6.20为两台主机三次握手建立TCP连接的过程。
图 6.20 用三报文握手建立TCP连接
假定主机A运行的是TCP客户程序,主机B运行的是TCP服务程序。最初两主机的初始状态都是CLOSED。主机下面的方框分别是TCP进程所处的状态。上图中A主动打开连接,B被动打开连接。具体过程如下:
一开始,B的TCP服务器进程首先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器就处于LISTEN状态,等待用户的连接请求。
A的TCP客户进程也是首先创建TCB。然后打算在建立TCP连接时,向B发出连接请求报文段,其中同步位SYN=1,同时选择一个初始***seq=x。这是,TCP客户进程进入SYN-SENT(同步已发送)状态。
B在接收到请求报文段后,若同意建立连接,则向A发送确认。在报文段中令SYN和ACK都置为1,确认号是ack=x+1,初始***是seq=y。这时TCP服务进程进入SYN-RCVD状态(同步收到)。
TCP客户端进程收到B的确认后,还要向B给出确认。确认报文段ACK置1,确认号ack=y+1,而自己的***为seq=x+1。这时TCP连接已建立,A进入ESTABLISH(已建立连接)状态。
当B收到A的确认后,也进入ESTABLISH状态。
上述建立连接的过程称为三次握手。
例 6.4.1 为什么A最后还要发送一次确认?为什么刚好是3次握手,而不是2次4次?
1、主要是防止已失效的连接请求报文段突然又传送到了B,因而产生错误。
2、这个问题的本质是,信道不可靠,但是通信双方需要就某个问题达成一致。而要解决这个问题,三次通信是理论上的最小值。所以三次握手不是TCP本身的要求,而是“在不可靠信道上可靠地传输信息”这一要求。
二、TCP连接的释放
TCP连接的释放如图6.21所示。假定主机A运行的是TCP客户程序,主机B运行的是TCP服务程序。现在A和B都处于ESTABLISH状态。
图 6.21 TCP连接释放的过程
A的应用进程首先向其TCP发出连接释放报文段,并停止发送数据,主动关闭其TCP连接。A把连接释放报文段的首部终止控制位FIN置1,其序号seq=u。此时A进入FIN-WAIT-1(终止等待1)状态,等待B确认。
B释放连接后立刻发出确认,确认号是ack=u+1,而这个报文段自己的序号为v。然后B进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时通知高层,A到B的连接已释放。但这时的TCP连接处于半关闭状态。即A已经没有数据要发了,但若B发数据,A仍要接收。
A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN=1。假定B的***为w。,而且B还需要重复上次已发送过的确认号ack=u+1。这是B进入LAST-ACK(最后确认)状态,等待A的确认。
A收到来自B的连接释放报文后,必须对此发出确认。在确认报文中把ACK置1,确认号ack=w+1,而自己的***为seq=u+1,然后进入到TIME-WAIT(时间等待)状态。在经过时间等待计时器设置的时间2MSL后,A才进入到CLOSED状态。MSL叫做最长报文段寿命,一般为2min。当A撤销掉相应的TCB,就结束了本次的TCP连接。
例 6.4.2 为什么TIME-WAIT状态必须持续2MSL?
1、为了保证A发送的最后一个ACK报文段能够到达B。
2、防止已失效的连接请求报文段出现在本连接中。
6.5 应用层
应用层(Application layer)是七层OSI模型的第七层。应用层直接和应用程序接口并提供常见的网络应用服务。应用层也向表示层发出请求。应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务,其服务元素分为两类:公共应用服务元素CASE和特定应用服务元素SASE。
应用层的很多协议都是基于客户服务器方式,即P2P方式。客户和服务器都是指通信中所涉及的2个应用进程。客户是服务请求方,服务器是服务提供方。
6.5.1 域名系统DNS
一、域名系统概述
域名系统DNS(Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。
域名到IP地址的解析是由分布在互联网上的许多域名服务器程序共同完成的。域名服务器程序在专设的节点上运行,常把运行域名服务器程序的机器称为域名服务器。
域名到IP地址的解析过程如下:当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序,并成为一个DNS客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报的方式发送给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。
二、互联网的域名结构
互联网采用层次树状结构的命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。域是名字空间中一个可被管理的划分。域还可以划分为子域,子域也可以继续划分,形成*域、二级域、三级域等等。
每一个域名都由标号序列组成,个标号之间用点隔开,如下:
图 6.22 域名的说明
域名只是一个逻辑概念,并不代表计算机所在的物理地点。
*域名共分为三大类。
国家*域名nTLD |
通用*域名gTLD |
基础结构域名 |
cn中国,us美国等等。 |
com公司企业,net网络服务机构,org非营利性组织,edu教育机构等等。 |
arpa反向域名解析。 |
296个 |
7个+13个 |
1个 |
我国把二级域名划分为“类别域名”和“行政区域名”。
互联网的域名空间如图6.23。这是一个树形结构。
图 6.23 互联网的域名空间
6.5.2 文件传送协议
文件传送协议FTP(File Transfer Protocol)是互联网上使用的最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP屏蔽了各计算机系统的细节,因而适用于在异构网络中任意计算机之间传送文件。
FTP使用客户服务器方式。一个FTP服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另有若干个从属进程,负责处理单个请求。
在进行文件传输时,FTP的客户和服务器之间要建立两个并行的TCP连接:控制连接和数据连接。控制连接在会话期间一直保持打开,FTP客户所发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。实际用于传输文件的是数据连接。服务器端的控制进程在接收到FTP客户发送来的文件传输请求后就创建数据传送进程和数据连接,用来连接客户端和服务器端的数据传送进程。数据传送进程实际完成文件的传送,在传送完毕后关闭数据传送进程并结束运行。
6.5.3 万维网WWW
万维网是一个大规模的、联机式的信息储藏所,英文简称为web。
万维网是一个分布式的超媒体系统,它是超文本系统的扩充。所谓超文本就是指包含指向其他文档的链接的文本。超媒体不仅包含链接的文本信息,还包含图形、声音等其他信息。
一、统一资源定位符URL
URL是用来表示从互联网上得到的资源位置和访问这些资源的方法。这里所说的资源包括文件目录、文件、文档、图像、声音等,以及与互联网相连的任何形式的数据。
URL相当于一个文件名在网络范围的扩展,URL的一般形式如下:
<协议>://<主机>:<端口>/<路径>
协议指的是用什么协议来获取该万维网文档,现在最常用的就是http,其次是ftp。“://”是固定的格式,主机表示这个万维网文档是在哪一台主机上,其实就是该主机在互联网上的域名。端口和路径有时可省略。HTTP默认的端口号是80。
HTTP的URL的一般形式为:
http://<主机>:<端口>/<路径>
若省略路径,则URL就会得到互联网上的某个主页。例如清华大学主页的URL为:
http://www.tsinghua.edu.cn
后面这一串都是主机域名。
二、超文本传送协议HTTP
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。