《第4章传输层.ppt》由会员分享,可在线阅读,更多相关《第4章传输层.ppt(69页珍藏版)》请在课桌文档上搜索。
1、计算机网络实用教程,第4章 传输层,目 录,4.1概述 4.1.1 传输层和网络层的关系 4.1.2 因特网传输层概述 4.1.3 多路复用与多路分解4.2用户数据报协议UDP 4.2.1 UDP协议概述 4.2.2 UDP报文段的结构 4.2.3 UDP校验和,目 录,4.3可靠数据传输的原理 4.3.1 构造可靠数据传输协议 4.3.2 流水线可靠数据传输协议 4.3.3 Go-Back-N 4.3.4 选择重传4.4面向连接的TCP协议 4.4.1 TCP连接 4.4.2 TCP报文段结构,目 录,4.4.3 可靠数据传输 4.4.4 TCP的流量控制 4.4.5 TCP连接管理4.5拥
2、塞控制 4.5.1 拥塞控制的基本概念 4.5.2 拥塞控制的基本方法 4.5.3 TCP 的拥塞控制,本章重点内容,本章首先讨论传输层和网络层之间的关系,接着讨论UDP协议,然后针对计算机网络中最基本的问题之一,即两个实体怎样才能在一种会丢失或损坏数据的媒体上可靠的通信,逐步介绍用来解决这些问题的技术,最后讨论面向连接TCP协议及拥塞控制。,如下图传输层在网络体系结构中所处的地位。,4.1概述,传输层协议为运行在不同主机上的应用进程之间提供了逻辑通信,应用进程之间使用传输层提供的逻辑通信功能发送报文,而无需考虑承载这些报文的物理基础设施。传输层协议为其调用的网络应用程序提供不同的传输层服务。
3、因特网有两种协议,即TCP和UDP。他们分别提供面向连结和无连接的服务。,4.1.1 传输层和网络层的关系,在TCP/IP协议栈中,传输层位于网络层之上,传输层为运行在不同主机上的进程之间提供了“逻辑通信”。逻辑通信的意思是:传输层之间的通信好像是沿水平方向传送数据。但事实上这两个传输层之间并没有一条水平方向的物理连接。网络层则提供了主机之间的逻辑通信。传输层协议只工作在端系统。,如下图4.2 所示端到端的协议,传输层看到的通信系统 路由器,高层,传输层,网络层,网络接口,网络层,传输层,网络接口,高层,网络接口,网络层,网络1,网络2,4.1.2 因特网传输层概述,TCP/IP网络,为应用层
4、安排了两种截然不同的传输层协议。一种是UDP协议(用户数据报协议User Datagram Protocol),为调用它的应用程序提供了一种不可靠、无连接的服务。另一种是TCP(传输控制协议Transmission Control Protocol),为调用它的应用程序提供了一种可靠的、面向连接的服务。设计一个网络应用程序时,该程序的开发人员必须指定使用这两种传输层协议的哪一种,是选择UDP还是选择TCP.,4.1.2 因特网传输层概述,UDP和TCP最基本的任务是,将两个端系统间IP的交付服务扩展为运行在两个端系统上的进程之间的交付服务。将主机间交付扩展到进程间交付被称之为传输层的多路复用(
5、transport-layermultiplexing)与多路分解(demultiplexing)。我们将在下一节讨论传输层的多路复用与多路分解。,4.1.2 因特网传输层概述,UDP和TCP还可以通过在其报文段的首部中添加差错检测字段从而提供完整性检查。进程间数据交付和差错检查是两种最低限度的运输层服务,也是UDP所能提供的仅有的两种服务。特别是,UDP和IP一样,它也是一种不可靠服务,即不能保证一个进程所发送的数据能够完整无损地到达目的进程。,4.1.3 多路复用与多路分解,4.1.3 多路复用与多路分解,上图4.3所示传输层的多路复用(multiplexing)与多路分解(demulti
6、plexing),也就是将网络层所提供的主机到主机交付服务扩展到在主机上运行的应用程序到应用程序的交付服务,多路复用与多路分解服务是所有计算机网络都需要的。,4.1.3 多路复用与多路分解,接收主机将一个收到的传输层报文段定向到适当的套接字,在每个传输层报文段中设置了几个字段,在接收端,传输层检查这些字段并标识出接收套接字,然后将报文段定向到该套接字。将传输层报文段中的数据交付到正确的套接字的工作称为多路分解。从在原主机的不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层的工作称为多路复用。,传输层是怎样实现多路分解服务的呢?,主机上的每个套接字被分配
7、一个端口号,端口是个非常重要的概念,因为应用层的各种进程是通过相应的端口与运输实体进行交互。端口用一个16bit端口号进行标志。,端口,端口号分为两类,一类是由因特网指派名字和号码公司ICANN负责分配给一些常用的应用层程序固定使用的熟知端口(well-known port),其数值一般为01023,例如:表4.1常用的应用层程序固定使用的熟知端口,表4.1常用的应用层程序固定使用的熟知端口,4.1.3 多路复用与多路分解,TCP中的多路复用与多路分解可以分为两种:无连接的多路复用与多路分解;无连接的服务就是在传送数据之前不需要建立连接,数据传送结束后,不需要给出任何确认。面向连接的多路复用与
8、多路分解。面向连接的服务要求在传送数据之前先建立连接,数据结束后要释放连接。TCP提供的是面向连接的服务。,4.2用户数据报协议UDP,4.2.1 UDP协议概述表如下表4.2给出了一些应用和应用层协议主要使用的传输层协议。,4.2.2 UDP报文段的结构 UDP信息包由UDP标题和数据组成。UDP的标题结构如图所示,它由5个域组成:源端端口(SourcePort),目的地端口(DestinationPort)、用户数据包的长度(Length)和校验和(Checksum)。,4.2用户数据报协议UDP,4.2.2 UDP报文段的结构,32位 0 15 16 32,源端口号,用户数据包的长度,检
9、查和,目的端口号,数据(Date),4.2.3 UDP校验和,UDP校验和提供差错检测。即效验和用于确定当UDP报文段从源到达目的时,其中的比特是否发生了改变(例如,由于链路中或者当在路由器中存储数据时的噪声干扰)。发送方的UDP对报文段中的所有16比特字的和进行1的补运算,求和时遇到的任何溢出都被丢弃。得到的结果放在UDP报文段中的效验和字段。,4.3可靠数据传输的原理,如何得到一个完整的可靠数据传输协议呢?我们来讨论下面两个协议1、完全可靠信道上的可靠数据传输:2、具有比特差错信道上的可靠数据传输:,4.3.1 构造可靠数据传输协议,控制报文使得接收方可以让发送方知道哪些内容被正确接收,哪
10、些内容接收有误从而需要重传。在计算机网络环境中,基于这样的重传机制的可靠数据传输协议叫自动重传请求协议(ARQ),4.3.1 构造可靠数据传输协议,基本上,ARQ协议中还需要另外三种功能来处理存在的比特差错:1.差错检测;2.接收方反馈;3.重传,4.3.2 流水线可靠数据传输协议,不使用停等方式运行,允许发送方发送多个分组而无需等待确认;由于从发送方向接收方传输的众多分组可以被看成是填充到一条流水线中,故这种技术被称为流水线(pipelining)。,4.3.3 Go-Back-N(GBN),Go-Back-N协议中,允许发送方传输多个分组(当有多个分组时)而不需等待确认,但它也受限于在流水
11、线中未确认的分组数不能超过最大允许数N。那些已被传输但还未被确认的分组的许可序号范围可以被看成是一个在序号范围内大小为N的“窗口”。随着协议的运行,该窗口在序号空间内向前滑动。因此,N常被称为窗口长度(window size),GBN协议常被称为滑动窗口协议(slidingwindow protocol)。,4.3.4 选择重传,在GBN协议中本身也存在性能问题。尤其是当窗口长度和带宽时延累积都很大时,在流水线中会有很多分组。一个分组的差错就可能引起GBN重传大量分组,其中许多分组也许根本没有必要重传。随着信道差错率的增加,流水线可能会被这些没必要重传的分组填满。选择重传(SR)协议通过让发送
12、方仅重传那些它怀疑在接收方出错(即丢失或受损)的分组从而避免了不必要的重传。,4.3.4 选择重传,这种个别地、按需的重传要求接收方逐个地确认正确接收的分组,再次用窗口长度N来限制流水线中未被确认的分组数。然而,与GBN不同的是,发送方已经收到了对窗口中某些分组的ACK,发送方所采取的各种动作如下:1.从上层收到数据;2.超时;3.收到ACK.,表4.4列出多种用于提供可靠数据传输的机制,4.4面向连接的TCP协议,4.4.1 TCP连接4.4.2 TCP报文段结构 TCP数据被封装在一个IP数据报中,如图4.5所示:,4.4.2 TCP报文段结构,IP数据包 TCP段,IP段,IP有效负载,
13、TCP报头,段,图4-6给出了TCP报文段的结构,4.4.4 TCP的流量控制,为了提高报文段的传输效率,TCP采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。在TCP报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。发送窗口在连接建立是由双发商定。但在通信的过程中,接受方可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。,4.4.4 TCP的流量控制,为了提高报文段的传输效率,TCP采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。,图4.7表示的是在TCP中使用的窗口概念。,4.4.4 TCP的流量控制,4.4.5 TCP连接管
14、理,TCP连接的三个阶段,TCP是面向连接的协议。TCP连接是用来传送TCP报文的。TCP连接的建立和释放是每一次面向连接的通信中必不可少的过程。因此,TCP连接就有三个阶段,即连接建立、数据传送和连接释放。TCP连接的管理就是使TCP连接的建立和释放都能正常地进行。,4.4.5 TCP连接管理,在连接建立过程中要解决以下3个问题。(1)要使每一方能够确知对方的存在。(2)要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。(3)能够对传输实体资源(如缓存大小,连接表中的项目等)进行分配。TCP的连接建立采用客户服务器方式。主动发起连接建立的应用程序叫做客户(client),
15、而被动等待连接建立的应用进程叫做服务器(server)。,4.4.5 TCP连接管理,4.4.5 TCP连接管理,设主机B中运行TCP的服务器进程,如图4.9所示,先发出一个被动打开(passive open)命令,准备接受客户进程的连接请求。然后服务器进程就处于“听”(listen)的状态,不断检测是否有客户进程要发起连接请求。如有,立即做出响应,4.5拥塞控制,4.5.1 拥塞控制的基本概念当通信子网中有太多的分组时,网络性能降低,这种情况就叫拥塞。其本质为网络对资源的需求大于可用资源,导致拥塞出现表示荷载超过了资源的承受能力。,4.5.2 拥塞控制的基本方法很多像计算机网络这样的复杂系统
16、中的问题,都能从控制论的角度进行解释,这种方法导致将拥塞控制方法分为两类 一类是开环控制,一类是闭环控制。,4.5.3 TCP 的拥塞控制,Internet上的大多数传输超时都是由于拥塞而引起的。1999年公布的因特网建议标准RFC2581定义了以下4种算法,即慢开始、拥塞避免、快重传和快恢复。,1 慢开始和拥塞避免,发送方维持一个叫做拥塞窗口 cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并动态地在变化。发送方让自己的发送窗口等于拥塞窗口。(还可能小于拥塞窗口)。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些。但只要网络
17、出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。,慢开始(slow start)算法的原理,在主机刚刚开始发送报文段时先设置拥塞窗口 cwnd=1,即设置为一个最大报文段 MSS 的数值。每收到一个对新的报文段的确认后,拥塞窗口加 1,即增加一个 MSS 的数值。逐步增大发送端的拥塞窗口 cwnd,使分组注入到网络的速率更加合理。,慢开始算法(slow start),实际上一点也不慢。它是指数量级的,所有的TCP实现都要求支持该算法。这种方法的特点是,由小到大逐渐增大发送端的拥塞窗口数值。,发送方,接收方,M1,确认 M1,M2M3,确认 M2M3,M4M7,确认 M4M7,cwnd
18、=1,cwnd=2,cwnd=4,M8M15,cwnd=8,t,t,发送方每收到一个对新报文段的确认就使 cwnd 加 1。,1,2,3,现在我们来看看拥塞避免算法。为了防止拥塞窗口cwnd的增长引起网络拥塞,除了接收方窗口和拥塞窗口以外,还需要个参数:一个阈值(threshold),设置慢开始门限状态变量threshold,慢开始门限 threshold的用法如下:当 cwnd threshold 时,停止使用慢开始算法而改用拥塞避免算法。当 cwnd=threshold 时,既可使用慢开始算法,也可使用拥塞避免算法。拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间
19、 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。,当网络出现拥塞时,无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 threshold设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。,22,16,算法的实现举例,当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。,慢开
20、始门限的初始值设置为 16 个报文段,即 threshold=16。,“乘法减小”,2,4,6,8,10,12,14,16,18,20,0,0,4,8,12,20,24,拥塞窗口 cwnd,新的 threshold值,网络拥塞,指数规律增长,threshold的初始值,慢开始,慢开始,慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,传输次数,实现举例,发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。,22,16,“乘法减小”,2,4,6,8,10,12,14,16,18,20,0,0,4,8
21、,12,20,24,拥塞窗口 cwnd,新的 threshold 值,网络拥塞,指数规律增长,threshold 的初始值,慢开始,慢开始,慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,传输次数,实现举例,在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。,22,16,“乘法减小”,2,4,6,8,10,12,14,16,18,20,0,0,4,8,12,20,24,拥塞窗口 cwnd,新的 threshold值,网络拥塞,指数规律增长,threshold 的初始值,慢开始,慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,传输数次,实现举例,发送端每收到
22、一个确认,就把 cwnd 加 1。于是发送端可以接着发送 M1 和 M2 两个报文段。,22,16,“乘法减小”,2,4,6,8,10,12,14,16,18,20,0,0,4,8,12,20,24,拥塞窗口 cwnd,新的 threshold值,网络拥塞,指数规律增长,threshold 的初始值,慢开始,慢开始,慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,传输次数,实现举例,接收端共发回两个确认。发送端每收到一个对新报文段的确认,就把发送端的 cwnd 加 1。现在 cwnd 从 2 增大到 4,并可接着发送后面的 4 个报文段。,22,16,“乘法减小”,2,4,6,8,10,1
23、2,14,16,18,20,0,0,4,8,12,20,24,拥塞窗口 cwnd,新的 threshold 值,网络拥塞,指数规律增长,threshold 的初始值,慢开始,慢开始,慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,传输次数,实现举例,发送端每收到一个对新报文段的确认,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输轮次按指数规律增长。,22,16,“乘法减小”,2,4,6,8,10,12,14,16,18,20,0,0,4,8,12,20,24,拥塞窗口 cwnd,新的 threshold值,网络拥塞,指数规律增长,threshold 的初始值,慢开始,慢开始,
24、慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,传输次数,实现举例,当拥塞窗口 cwnd 增长到慢开始门限值 threshold 时(即当 cwnd=16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。,22,16,“乘法减小”,2,4,6,8,10,12,14,16,18,20,0,0,4,8,12,20,24,拥塞窗口 cwnd,新的 threshold值,网络拥塞,指数规律增长,threshold 的初始值,慢开始,慢开始,慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,传输次数,22,16,“乘法减小”,2,4,6,8,10,12,14,16,18,20,0,0,4,8
25、,12,20,24,拥塞窗口 cwnd,新的 threshold 值,网络拥塞,指数规律增长,threshold 的初始值,慢开始,慢开始,慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,实现举例,假定拥塞窗口的数值增长到 24 时,网络出现超时,表明网络拥塞了。,传输次数,22,16,“乘法减小”,2,4,6,8,10,12,14,16,18,20,0,0,4,8,12,20,24,拥塞窗口 cwnd,新的 threshold 值,网络拥塞,指数规律增长,threshold的初始值,慢开始,慢开始,慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,实现举例,更新后的 threshold
26、 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。,传输次数,22,16,“乘法减小”,2,4,6,8,10,12,14,16,18,20,0,0,4,8,12,20,24,拥塞窗口 cwnd,新的 threshold 值,网络拥塞,指数规律增长,threshold 的初始值,慢开始,慢开始,慢开始,拥塞避免“加法增大”,拥塞避免“加法增大”,实现举例,当 cwnd=12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。,传输次数,乘法减小(multiplicative decrease),“乘法减小“是
27、指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 threshold 设置为当前的拥塞窗口值乘以 0.5。当网络频繁出现拥塞时,threshold值就下降得很快,以大大减少注入到网络中的分组数。,加法增大(additive increase),“加法增大”是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。,2.快重传和快恢复,快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收
28、方。发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。,快恢复算法,(1)当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 threshold 减半。但接下去不执行慢开始算法。(2)由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 threshold减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。,需要强调指出,“拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。“拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。,需要强调指出,在采用快恢复算法时,慢开始算法只是在TCP连接建立时才使用。采用这样的拥塞控制方法使得TCP的性能有明显的改进。,