TCP协议中的流量控制和拥塞控制研究(毕业论文).doc_第1页
TCP协议中的流量控制和拥塞控制研究(毕业论文).doc_第2页
TCP协议中的流量控制和拥塞控制研究(毕业论文).doc_第3页
TCP协议中的流量控制和拥塞控制研究(毕业论文).doc_第4页
TCP协议中的流量控制和拥塞控制研究(毕业论文).doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计 (论文)TCP协议中的流量控制和拥塞控制研究院 别数学与统计学院专业名称信息与计算科学班级学号学生姓名指导教师 年 月 日 毕业设计(论文) 第 V 页TCP协议中的流量控制和拥塞控制研究摘 要计算机网络技术是当今发展最迅速的计算机技术之一,而保证网络稳定可靠运行的关键是计算机网络协议。TCP协议作为网络协议中的核心协议之一,其重要性更是不言而喻,因而对于该协议的研究与完善是促进网络发展的重要手段之一。随着互联网规模和互联网应用的快速增长,网络拥塞和数据冲突问题已引起人们密切的关注。拥塞控制与流量控制技术针对网络中的拥塞和数据冲突而成为网络领域的核心技术。其中流量控制的对象是接收端,目的是使发送端的发送速率不超过接收端的接收能力;拥塞控制的对象是网络环境,目的是使负载不超过网络的传送能力。TCP的流量控制主要依赖于滑动窗口,通过流量约束,减少接收端出的数据流失,提高发送效率,充分利用接收端资源。 TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制,窗口值的大小就代表能够发送出去的但还没有收到ACK的最大数据报文段,显然窗口越大那么数据发送的速度也就越快,但是也就越可能使得网络出现拥塞,如果窗口值为1,那么就简化为一个停等协议,每发送一个数据,都要等到对方的确认才能发送第二个数据包,显然数据传输效率低下。TCP拥塞控制算法就是要在这两者之间权衡,选取最的cwnd值,从而使得网络吞吐量最大化且不产生拥塞。本文首先对TCP协议的发展做了简要的概述,然后分析了TCP协议的报文段格式和结构,TCP的数据传输过程,接着讨论了TCP的流量控制机制,最后针对TCP的重点部分拥塞控制进行了分析,讨论了几个TCP拥塞控制算法。关键词:TCP协议,流量控制,拥塞控制The Flow Contral and Congestion Control in TCP ProtocolAuthor: Etvgbd Tutor: RtvghhhAbstractComputer network technology is one of the most rapidly developing of computer technology today,and the computer network protocols is the key to ensure the network is stable and reliable operation. TCP protocol, as one of the core protocols of the network protocol,is vary important, so to research and improve the protocol is one of the important means to promote the development of the network. With the rapid growth of Internet scale and the Internet application, network congestion and data conflict problem has aroused the concern of the people closely. Congestion control and flow control technology, according to the theory of network congestion and data conflict has become the core technology in the field of network. The flow control object is the receiver, the purpose is to make the sending rate does not exceed the capacity at the receiving end. Congestion control object is the network environment, the purpose is to make the transfer of a loaded with no more than the network capacity.TCP flow control is mainly depended on the sliding window, by flow constraints, and reduce the loss of data at the receiving end, to improve the transmission efficiency, make full use of the receiver.The main principle of TCP congestion control relies on a congestion window (cwnd) to control the window size value represents the ability to send out but not yet received the maximum data packet ACK Duan, clear window, so the greater the speed of data sent the faster, but also more likely to make the network congestion occurs, if the window is 1, then reduced to a stop such agreement, each sending a data, must wait for confirmation of the other party can send a second packet, the data clearly transmission efficiency is low. TCP congestion control algorithm is to balance between these two, choose the best cwnd value, allowing the network to maximize throughput and does not create congestion.Firstly, the development of the TCP protocol a brief overview, and then analyzed the structure of TCP protocol, TCP data transfer process, followed by a discussion of the TCP flow control mechanism, the key part of the final for the TCP congestion control are analyzed, discussed Several TCP congestion control algorithm.Key Words :TCP protocol, Flow control,Congestion control目 录1 绪论11.1 TCP的发展过程与设计目标11.1.1 TCP的发展过程11.1.2 TCP的设计目标11.2 论文结构22 TCP协议32.1 TCP的报文段42.1.1 TCP的报文格式42.1.2 TCP报文封装52.2 TCP的数据传输62.2.1 TCP连接的建立62.2.2 TCP连接的释放73 TCP协议中的流量控制83.1 滑动窗口83.2 可变窗口流量控制实例分析84 TCP的拥塞控制104.1 拥塞产生的原因104.2 重发定时器管理114.2.1 RTT的估算124.2.2 RTO的计算124.3 TCP 拥塞控制所采用的机制135 TCP拥塞控制算法175.1 TCP 的早期实现175.2 TCP Tahoe175.3 TCP Reno算法175.4 TCP New-Reno185.5 TCP SACK195.6 TCP Vegas20结 论22致 谢23参考文献24附 录25 毕业设计(论文) 第 35 页1 绪论计算机网络是计算机和通信密切结合的产物,近些年来得到了迅速的发展,已逐渐成为信息社会的基石。网络协议是计算机中不可缺少的的一个重要组成部分,它是计算机和计算机之间以及计算机和其他设备之间进行数据通信的必要条件。TCP协议作为重要的网络协议也是有了很大的发展。1.1 TCP的发展过程与设计目标认识来源于实践,而认识的最终目标也正是服务于实践。只有了解TCP的发展历史以及相应的设计目标,我们才能对TCP拥有较为全面的认识,从而更好地研究TCP技术,满足越来越高的应用需求。1.1.1 TCP的发展过程互联网最初源于美国国防部的ARPANET计划。上世纪60年代中期正是冷战的高峰,美国国防部希望有一个命令和控制网络,以确保在核战争的条件下幸免于难,而传统基于电路交换的电话网络则过于脆弱。国防部指定其下属的高级研究计划局解决这个问题,从而诞生ARPANET,其最大特点是采用无连接的端到端报文交换服务。到了80年代中期,演变为互联网。TCP协议最初只是作为NSFNET的程序规范,即RFC 793,这也是最早的较为完整且齐全的TCP规范。这个规范简单描述了如何进行主机到主机的可靠传输,并描述了传输控制协议执行的功能,相应的实现程序及程序接口。TCP协议在设计之初就被赋予了很高的使命,需要成为报文交换计算机网络和这些网络互联系统中的高可靠性传输协议。需要明确的是,网络中的可靠传输包括两方面:首先是数据的正确,由于以前的传输介质质量很差,所以在传输层及以下各层协议中都实现了校验和计算;其次是数据的完整保序,这个特性需要TCP执行复杂的操作来实现,通常我们强调TCP的可靠传输时主要指后者。1.1.2 TCP的设计目标在TCP设计之初,网络技术刚刚起步,相应的硬件设施只能达到很低的水平,应用需求也十分简单,诸多因素导致TCP协议的设计目标从开始就已经先天不足。在设计TCP协议时,由于人们对网络,尤其是对大型互联网络缺乏本质的认识,从而遗漏了许多TCP协议应该具备的重要特征。例如,我们现在熟知的拥塞控制,在最初协议设计中就没能得到体现。 TCP最初的设计目标只是在进程间提供可靠、安全的逻辑链路,并在此基础之上提供可靠的传输服务。需要强调的是,TCP对网络并不做任何假设,它的主要功能就是提供可靠的逻辑链路。为了能够在不可靠的网络上进行可靠的通信,协议必须提供如下功能:能够进行基本的数据传输、保证数据的可靠性、进行适当的流量控制、维护通信状态的集合、使用并行多路技术以及保证通信的优先级 和安全性。1.2 论文结构本文主要围绕下列问题展开研究:1TCP的结构和数据传输过程2TCP的流量控制机制3TCP的拥塞控制与拥塞控制算法2 TCP协议TCP 协议是目前互联网上应用最广泛的传输层协议。它主要提供端到端可靠的字节流传送服务。TCP 是一个面向连接的协议,即在端系统进行数据传输之前要建立连接,连接属于全双工方式(即数据可以在两个方向上同时进行传输)。TCP 在不可靠的IP 网络层上提供可靠的数据传输服务,即所有被传输的数据最终都应到达接收端。在TCP 中,接收端对其所接收的每一个分组都进行确认,在一定时间范围内没有得到确认的分组会被发送方重新进行发送。接收端如果收到一个重复的分组,将会丢弃该分组,如果收到乱序的分组,则对这个分组进行重新排序。每个分组都会有自己对应的序列号,发送方可以通过分组确认报文获得接收端所希望接收的下一个分组的序列号。当通信双方均有数据要发送时,TCP 可以将确认信息放在数据分组中发送以减少控制信息带来的额外流量。TCP协议对数据单元的传输及重传策略,对于网络的拥塞状况有着深刻的影响。概括来说,TCP 协议为应用层提供了以下服务:1流交付服务:TCP 协议允许发送进程以字节流的形式来传递数据,而接收进程也把数据作为字节流来接收。这样,TCP 协议使得两个进程好像在一个假想的“管道”中传送两个进程的数据。2全双工服务:即数据可在同一时间双向流动。每一个TCP 端系统都有发送缓存和接收缓存,而两个方向都可以发送报文段。3面向连接服务:TCP 通过一条虚拟连接来传送数据。当TCP 报文被封装成IP 分组后,每一个分组可以走不同的路径来到达目的端,因此收到的IP 分组可能会乱序,可能会丢失,或者受到损伤,并可能经过重传。但是TCP 创建了面向流的环境,它负责按顺序将完整的数据交付给应用程序。4流量控制:流量控制定义了发送端在收到从接收端发来的确认之前可以发送的数据量。TCP 协议在缓存上定义了一个窗口,缓存是用来暂时存放从应用程序传递来并准备发送的数据,TCP 发送端就根据这个窗口的大小来发送数据。这就是所谓的滑动窗口机制。5差错控制:TCP 是可靠的传输层协议,这就表示,当应用程序把数据流交付给IP 层后,TCP协议应当把数据流按顺序,没有差错,没有损伤地交付给另一个应用程序。为了实现差错控制,TCP 协议采用了以下几种机制:检测受到损伤的、丢失的、失序的和重复的数据包;在检测到差错后,能够纠正差错。6拥塞控制:互联网由许多网络和连接设备组成。发送端发送的分组要经过多个路由器后才能到达最后的接收端。路由器为了保证链路的利用率,一般都会提供缓存来暂时存储突发到达的分组,但是当路由器接收过多的分组时,就可能导致路由器缓冲区溢出,即该路由器节点发生拥塞,部分分组就会被丢弃。当发送端重传这些分组时,会造成更加严重的拥塞,以致于使网络瘫痪。因此我们必须在端系统采用一些拥塞控制机制来保证网络不会发生拥塞,同时又能充分利用网络的链路资源。TCP协议采用了慢启动,拥塞避免等算法来对网络拥塞进行控制,从而在一定程度上保证网络的稳定运行。2.1 TCP的报文段2.1.1 TCP的报文格式TCP 软件在两台计算机之间传输的数据单元称为报文段(segment)。通过报文段的交互来建立连接、传输数据、发出确认、通告窗口大小及关闭连接。图2.1表示出了TCP 报文段的格式,每个报文段分为两个部分:首部和数据。报文段既可以用来建立连接,也可以运载数据和应答。TCP源端口号(16位)TCP目标端口号(16位)序列号(32位)确认序列号(32位)首部长度(4位)保留(6位)URGACKPSHRSTSYNFIN窗口大小(16位)校验和(16位)紧急指针(16位)选项和填充数据区图2.1 TCP报文段格式TCP报文段首部固定部分各字段的意义如下:源端口和目的端口:各占2个字节,是传输层与高层的接口。序列号:占4字节,是本报文段所发送的数据部分第一个字节的序号。在TCP输送的数据流中,每一个字节都有一个顺序号。例如,在一个报文段中,序号为300,而报文中的数据为100字节,那么,在下一个报文段中,其顺序号就是400。由此可见,TCP是面向数据流的。确认序列号:占4字节,是期望收到对方下次发送数据的第一个字节的序号。首部长度:占4bit,它指出以32bit 为单位的TCP 报文段首部的长度。在首部字段后面是6bit的保留字段,是为将来的应用而保留的,目前置为0。紧急比特URG:当URG = 1时,表明此报文段应该尽快发送,而不要按照原来的排队顺序发送。它通常与紧急指针(位于第5个32bit 字段中的后一半)配合使用,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。紧急指针使接收方可以知道紧急数据共有多长。需要注意的是,即使窗口大小为0时也可发送紧急数据。确认比特ACK:只有当ACK = 1时确认序号字段才有意义。当ACK = 0时,确认序号无意义。急迫比特PSH:当PSH = 1时,表明请求远地TCP将本报文段立即传送给其应用层,而不要等整个缓冲区都填满之后再向上交付。复位比特RST:当RST = 1时,表明出现严重差错,必须释放连接,然后再重新建立连接。同步比特SYN:在连接建立时使用。当SYN = 1而ACK = 0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在发回的报文段中使SYN = 1和ACK = 1。因此SYN置为1,就表示这是一个连接请求或连接接受报文,而ACK 比特的值用来区分是哪一种报文。终止比特FIN:用来释放一个连接。当FIN = 1时,表明欲发送的字节串已经发完,并请求释放传输层连接。窗口:占2字节。窗口字段提供端到端的流量控制,它表示在确认了字节之后还可以发送多少个字节。此字段值为0是合法的,表示它已经收到了包括确认号减1(即己发送的所有报文段)在内的所有报文段,但当前接收方急需暂停。之后通过发送一个带有相同确认号和滑动窗口字段非零值的报文段来恢复原来的传输。校验和:占2字节。校验和字段覆盖的范围包括首部、数据和概念上的伪TCP首部之和。选项和填充:占2字节。为可选部分,用于TCP具体选项。填充的作用是确保首部大小是一个32位的整倍数。2.1.2 TCP报文封装如图2.2所示,TCP报文段封装在IP数据报中,然后再封装成数据链路层中的帧,并通过物理层传输到数据的接收端,在接受端数据链路层剥去帧的首部,然后送到接收端的网络层,剥去IP首部再发送到传输层,所剩下的就是发送段的TCP报文段。IP首部TCP首部TCP数据IP报文段TCP报文段图2.2 报文段的封装2.2 TCP的数据传输2.2.1 TCP连接的建立TCP以全双工的方式传输数据。当两个机器重的两个TCP建立连接候,他们都能够同时向对方发送报文段。这就表示,在任何数据传输之前,每一方都必须对通信进行初始化,并得到对方的认可,即TCP的连接。TCP的连接建立称为“三次握手。1.客户发送第一个报文段,SYN报文段,在这个报文段中只有SYN标志置1。这个报文段的作用是使序号同步。客户端选择一个随机数SEQ作为第一序号,并把这个序号发给服务器。2.服务器发送第二个报文段,即SYN+ACK报文段,其中有两个标志置为l。这个报文段有两个目的,一个是使用SYN同步初始序号,另一个是服务器使用ACK标志确认已经从客户端收到的SYN报文段,同时给出期望从客户端收到的下一个序号。3.客户端发送第三个报文段。这仅仅是一个ACK报文段。它使用ACK标志和确认号字段来确认收到了第二个报文。实例分析: SYN = 1,SEQ = 800SYN=1,ACK=1,SEQ=1500,ACK=801ACK = 1,SEQ = 1501,ACK = 801主机A主机B连接请求图2.3 TCP连接的建立下面我们以主机A和主机B两个应用程序为例来分析。如图2.3所示。这个过程从服务器开始。主机A告诉它的TCP,它已经准备好接受连接,这叫做被动打开。主机B发送请求叫做主动打开。A的TCP向B的TCP发出连接请求报文段,其首部中的同比特SYN应置1,同时选择一个序号X,我们选取X = 800,表明在后面传输数据的第一个数据字节的序号是X+1,即为801。B的TCP收到连接请求报文段后,如同意则发回确认。在确认报文段中将SYN和ACK都置1,确认号为X+1,即为801,同时为自己选择一个序号Y,令Y = 1500。A的TCP收到B的确认后,要向B给出确认,其ACK置1,确认号为Y+1,即为1501,自己的序号为X+1,为801。2.2.2 TCP连接的释放参加交换数据的双方的任何一方都可以关闭连接。当一方向的连接被终止时,另一方还可以继续向对方发送数据。建立一个连接需要三次握手,终止连接要经过四次握手。FIN = 1,SEQ = 1001ACK = 1,SEQ = 1700,ACK = 1002FIN=1,ACK=1,SEQ=1700,ACK=1002主机A主机B释放链接ACK = 1,SEQ = 1002,ACK = 1701确认确认图2.4 TCP连接的释放实例分析:如图2.4所示,主机A的应用进程先向其TCP发送连接释放请求,并且不再发送数据。TCP通知对方要释放从A到B这个方向的连接,将发往主机B的TCP报文段首部的FIN置1,其序号X等于前面已传送过的数据的最后一个字节的序号加1,为X = 1001。主机B的TCP收到释放链接通知后发出确认,其序号为Y = 1700,确认号为X+1,即1002,同时通知高层应用进程,应用进程通知TCP释放连接。B发出的连接释放报文段必需将FIN和ACK置1,并使其序号仍为Y,重复上次发送的ACK = X+1。A对此确认,将ACK置1,ACK=Y+1 = 1701,自己的序号是X+1为1002。3 TCP协议中的流量控制如果发送端发送的数据过多或者数据发送速率过快,致使接收端来不及处理,则会造成数据在接收端的丢弃。为了避免这种现象的发生,通常的处理办法是采用流量控制,即控制发送端发送的数据量及数据发送速率。时期不超过接收端的承受能力,这个能力主要指接收端的缓存和数据处理速度。流量控制是与点到点的通信量有关的,是针对端系统中资源受限而设置的。主要解决快速发送方与慢速接收方的问题。流量控制的目的是在有限的接收端承受能力的情况下,通过流量约束,减少接收端出的数据丢失,提高数据发送效率,充分利用接收端资源。3.1 滑动窗口TCP的特点之一是提供体积可变的滑动窗口机制,支持端到端的流量控制。TCP的窗口以字节为单位进行调整,以适应接收方的处理能力。处理过程如下:首先,在TCP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓冲区;其次,发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;最后,发送方根据确认信息,改变窗口的尺寸。1 100101 200201 300301 400401 500501 600发送窗口已发送并被确认已发送但未被确认可继续发送不可发送指针图3.1 滑动窗口图3.1表示发送窗口为400字节,发送端已发送300字节的数据,但是只收到对前100字节的确认,同时窗口的大小不变,现在发送端还可以发送200字节。3.2 可变窗口流量控制实例分析设主机A向主机B发送数据,如图3.2所示,双方规定窗口值是400。再设每一个报文段是100字节长,序号的初始值为1。主机B进行3次流量控制,第一次将窗口减少为300字节,第二次减为200字节,最后一次减为08字节,即不允许发送数据。SEQ = 1SEQ = 101SEQ = 201,丢失ACK=201,WIN=300SEQ = 301SEQ = 401SEQ = 201ACK=501,WIN=200SEQ = 501ACK = 601,WIN = 0A还能发送200字节A还能发送200字节丢失了序号201300的数据允许A还能发送300字节(序号201500数据)A还能发送200字节(序号301500数据)A还能发送100字节(序号401500数据)A超时重发(201301字节数据)允许A再发送200字节A还能发送100字节(序号501700数据)序号600以前数据都收到不允许A再发送主机A主机B图3.2 可变窗口流量控制4 TCP的拥塞控制拥塞是一种持续过载的网络状态,此时用户对网络资源(缓存空间、链路带宽容量和中间节点的处理能力等)的需求超过了其固有的容量。网络的性能(功率、往返时间RTT、吞吐量)与负荷的关系可以用图4.1来说明。可以看出当负荷较小时,网络吞吐量和资源功率(资源功率吞吐量/响应时间)随负荷的增长的以指数增长,RTT随负荷的增长略有上升,当负荷到达膝点时,功率到达最大值,在此之后吞吐量的增长远远慢于负荷的增长,RTT迅速上升,功率快速下降,若继续增长负荷,则存在丢包的可能。负荷到达崖点时,吞吐量达到最大值,功率到达最小值。RTT以指数增长,系统处于拥塞状态。膝点指资源功率到达最大值的负荷量。崖点指资源功率下降到最小值且开始丢包时的负荷量。因此膝点是最为理想的工作点,拥塞控制就是采用某种策略或机制,保持网络工作在正常的状态下,也就是使网络经常工作在崖点左侧的区域内。若一种控制机制使得网络工作在膝点附近,该方法称为拥塞避免;若一种控制机制使网络工作在崖点或崖点以后的网络回复至膝点前后,该方法称为拥塞恢复。图4.1 网络性能与负荷之间的关系4.1 拥塞产生的原因随着通信和计算机技术的成熟和发展,互联网规模的增长,网络用户和网络应用都在快速地增长,人们对包括话音、文字、数据、图像等多种媒体通信的需求不断增大。在计算机网络中有许多网络资源,如链路的容量、交换节点中的缓冲区和处理机等,如果在某段时间,用户(端系统)加于网络的负载大于网络资源容量和处理能力,就会产生拥塞,网络的性能就要变坏。若网络中的许多资源同时产生拥塞,网络的性能就要明显变差,整个网络的吞吐量将随输入负载的增大而下降,表现为数据包时延增加、丢弃概率增大、上层应用系统性能下降等。总的来说,资源紧缺和资源的不合理利用时产生拥塞控制的直接原因,具体表现在:1存储空间不足:几个输入数据流共同需要同一个输出端口,在这个端口就会建立排队。如果没有足够的存储空间存储,数据包就会被丢弃。对突发数据流更是如此。增加存储空间在某种程度上可以缓解这一矛盾,但如果路由器有无限存储量时,拥塞只会交得更坏,而不是更好,因为在网络里数据包经过长时间排队完成转发时,它们早己超时,源端认为它们已经被丢弃,而这些数据包还会继续向下一个路由器转发,从而浪费网络资源,加重网络拥塞。2带宽容量不足:低速链路对高速数据流的输入也会产生拥塞。根据香农信息理论,任何信道带宽最大值即信道容量 (N为信道白噪声的平均功率,S为信源的平均功率,B为信道带宽)。所有信源发送的速率R必须小于或等于信道容量C。如果RC,则在理论上无差错传输就是不可能的,所以在网络低速链路处就会形成带宽瓶颈,当其满足不了通过它的所有源端带宽要求时,网络就会发生拥塞。3处理器处理能力弱、速度慢也能引起拥塞:避免拥塞的发生,对以上原因需综台考虑。拥塞虽然是由于网络资源的稀缺引起的,但单纯增加资源并不能避免拥塞的发生。定程度时,只会加重拥塞,而不是减轻拥塞,是因为当报文段经过长时间排队完成转发时,它们很可能早己超时。从而引起源端超时重发,而这些报文段还会继续传输到下一路由器,从而浪费网络资源,加重网络拥塞。事实上,缓存空间不足导致的丢包更多的是拥塞的“症状”而非原因。另外,增加链路带宽及提高处理能力也不能解决拥塞问题。单纯地增加网络资源之所以不能解决拥塞问题,是因为拥塞本身是一个动态问题,它不可能只靠静态的方案来解决,而需要网络协议在网络出现拥塞时保护网络的正常运行,即需要对网络的可能拥塞进行控制。拥塞一旦发生往往会形成一个不断加重的过程,如不加控制,就会影响网络的性能,严重的情况甚至会使整个网络发生瘫痪。所以,拥塞控制是网络中必不可少的机制。4.2 重发定时器管理重发定时器管理是TCP拥塞控制中的一个关键技术。TCP每发送一个报文段,就设置一次计数器。只要计时器设置重传时间到而还没有收到确认,就要重传这一报文段。重传时间间隔的取值(RTO)直接影响到发送端对网络的反应情况。取值太小,会造成不必要的重传,从而浪费网络资源:取值太大,对报文段丢失的反应就会很迟缓。RTO的值与RTT(Round Trip Time)有很大的关系。所以,正确估算RTT的值并合理地选择RTO的值对TCP的性能有重要影响。4.2.1 RTT的估算整个端到端路径的往返时间RTT(Round Trip Time)指从源端发出一个报文段到收到相应的确认之间的时间间隔。RTT 包括正向和反向路径中各跳的链路时延(传输时延和物理传播时延)和中间结点的处理时延(排队、路由查找、转发)。RTT 随着各个中间结点的排队情况不同,表现出一定的随机性。如果中间结点使用较长的队列,RTT 的变化会很大。一种计算RTT 的方法就是对观察到的一些报文段的往返时间简单地取平均,但是,通常我们希望对更近期的采样值给予更大的权值,因为它们更可能反映将来的行为,因此,常用的_种技术为指数平均法。其平滑RTT 的值的计算如下:其中SRTT(K)是前K个报文段的平滑往返时间估值:是指数平均的权值(01), 越小,给予更迸的观察值的权值就越大,通常的取值为7/8,此时,将几乎所有的权重都给了最近10个左右的观察值。4.2.2 RTO的计算对RTO的计算主要有三种方法;RTT方差估计(Jacobson算法)、指数RTO退避和Karn算法。1RTT方差估计: 最初的TCP规约试图通过对RTT估值乘以一个常数因子B(通常取B=2)的方法确定RTO的值,但在稳定环境中RTT的方差很低,用上述方法得到的RTO就不必要的取得太高;而在不稳定的环境中,p取值为2可能并不足以防止不必要的重传。RTT方差估计是通过平滑RTT方差的倍数与平滑往返时间之和来确定定时器的取值,它可以更有效的计算RTO的值。完整的算法表达如下:采样平滑偏差:平滑偏差:重发定时器:一般情况h的取值为1/4,的取值为4。经验证明,此算法可以显著提高TCP的性能。2指数RTO 退避:如果TCP的发送端在一个报文段上发生超时,它就必须重传这个报文段。考虑到超时可能是由于网络拥塞引起的,为了给网络足够的时间从拥塞中恢复,一个更明智的策略是TCP源端在同一报文段重传时增加其RTO,这被称为退避过程(backoff process)。实现RTO退避的一种简单的方法是对一个报文段的每次重传都将RTO乘以一个常数值,即: 。这就使得RTO随每次重传而指数增长。q通常取2,此时称之为二进制指数退避(binary exponential backoff)。3Karn 算法:假定一个报文段发生超时而必须重传,如果随后收到了个确认,那么就有两种可能:1)报文段第一次传输的ACK。这种情况下,RTT 仅比期望的更长一些,但却是网络状况的精确反映。2)是第二次传输的ACK。TCP源端并没有办法区分这两种情况。如果发生的是第二种情况而TCP实体只是简单地将RTT算成是从第一次传输到收到ACK这段时间,那么这个时间就比实际的RTT要长得多。将这个错误的RTT输入到Jacobson算法中会产生太高的SRTT和RTO。另外,这个效果会向前传播许多次迭代,因为一次迭代产生的SRTT值是下一次迭代的输入值。一种更糟的方法是将RTT算成从第二次传输到收到ACK这段时间。如果这个ACK实际上是对第一次传输的ACK,那么我们测得的RTT值就比实际值小许多。从而导致SRTT和RTO值太小。这可能产生正反馈效应,引起更多的重传和更多的错误测量。Karn算法采用以下规则解决了这个问题:1)要使用对重传报文段测得的RTT更新SRTT和SDEV。2)在重传时使用等式计算退避RTO。3)后续各报文段使用退避RTO值,直到收到了一个对未被重传报文段的确认为止。当一个对未被重传报文段的确认收到以后,Jacobson算法又被激活,用来计算将来的RTO值。4.3 TCP 拥塞控制所采用的机制为了更好的进行拥塞控制,TCP主要采用以下四种机制:慢启动、拥塞避免、快速重传和快速恢复。1慢启动:当连接刚建立或超时时,进入慢启动阶段。当新建TCP连接时,拥塞窗口被初始化为一个数据包大小。源端按cwnd大小发送数据,每收到一个ACK确认,就增加一个数据包发送量,这样慢启动阶段cwnd随RTT呈指数级增长。慢启动采用逐渐增大cwnd的方法,可以防止TCP在启动一个连接时向网络发送过多的数据包而造成不必要的数据丢失和网络拥塞,并且它还能够避免采用单纯的AIMD算法造成的吞吐量增加过慢的问题。为了防止cwnd的无限制增长引起网络拥塞,引入一个状态变量:慢启动门限值ssthresh。当cwndssthresh时,使用拥塞避免算法,减缓cwnd的增长速度。当cwnd=ssthresh时,既可使用慢启动算法也可使用拥塞避免算法。2拥塞避免:当发现超时或收到3个相同ACK确认帧时,网络发生了拥塞(主要因为由传输引起的数据包损坏和丢失的概率很小(l)。此时就进入拥塞避免阶段。慢启动门限值(ssthresh)被设置为当前拥塞窗口大小的一半;如果超时,拥塞窗口被置1。如果此时cwndssthresh,TCP就执行拥塞避免算法,此时,cwnd在每次收到一个ACK时只增加1cwnd个数据包,这样,在一个RTT内,cwnd将增加1,所以在拥塞避免阶段,cwnd不是呈指数增长,而是线性增长。3快速重传和快恢复阶段:在拥塞避免阶段,当数据包超时时,cwnd被置为1,重新进入慢启动阶段,这会导致过大地减小发送窗口尺寸,降低TCP连接的吞吐量。因此,引入了快速重传和快速恢复机制。在快速重传阶段,当源端收到3个或3个以上重复的ACK时,就判定随后的数据包丢失,应该立刻重传,进入快速恢复阶段。在快速恢复阶段,设置为ssthresh=cwnd/2;重传丢失的报文段;设置cwnd=ssthersh+n(n为已经收到的重复报文段的个数);收到非重复ACK时,置cwndssthresh,转入拥塞避免阶段;如果发生超时重传,则置ssthresh为当前cwnd的一半,cwnd1,重新进入慢启动阶段。这种方法避免了数据包超时后就重新进入慢启动阶段,提高了TCP连接的吞吐量。实例分析:下面通过几个实例分析一下TCP拥塞控制的几个阶段。1慢启动和拥塞避免的实例先假设窗口的单位为报文段,当TCP连接进行初始化时,将拥塞窗口置为1,即cwnd=1。慢开始门限的初始值设置为8,即ssthresh=8。发送端的发送窗口win不能超过拥塞窗口cwnd和通告窗口awin中的最小值。假定通告窗口awin足够大,因此发送窗口win的数值等于拥塞窗口cwnd的数值。在执行慢启动算法时,拥塞窗口cwnd=1。以后发送端每收到一个对新报文段的确认ACK,就将cwnd+1,开始下一次传输。当cwnd增长到慢开始门限值ssthresh时,即cwnd=8时,改为拥塞避免算法。假定拥塞窗口的数值增长到了12时,网络出现超时,则更新ssthresh=6,拥塞控制窗口cwnd=1,执行慢启动算法。当cwnd=6时改为拥塞避免算法。16 12 8 4 0 2 4 6 8 10 12 14 16 18ssthress=8更新后ssthress=6控制窗口cwnd传输次数进入拥塞避免进入拥塞避免超时图4.2慢启动和拥塞控制的实例上图4.2中发送了3次收到3个ACK后控制窗口cwnd达到了慢开始门限值ssthresh=8,进入了拥塞避免阶段,又传输了4次,当cwnd=12时,网络发生拥塞,执行拥塞避免算法。使cwnd=1,ssthresh=6再开始慢启动阶段,当cwnd=6时进入拥塞避免阶段。2快重传和快恢复的实例假定发送端发送了A1A4,4个报文段,当接收端收到A1,A2,A3后就发出确认ACK2,ACK3,ACK4。由于网络拥塞使A4丢失了,接收端收到下个A5发现序号不对,但仍收下放在缓存中,同时发出确认ACK4。发送端接着发送A5,A6,接收端收到后还要分别发送重复的ACK4。这样发送端收到了4个ACK4,其中3个是重复的,发送端就断定有分组丢失了立即重传A4,同时进入快恢复阶段。设置ssthresh=ssthresh/2,cwnd=ssthresh+3,如果还可以发送就继续发送A7,若收到新的报文段的ACK8,则将设置cwnd=ssthresh。16 12 8 4 0 2 4 6 8 10 12 14 16 18ssthress=8更新后ssthress=6控制窗口cwnd传输次数进入拥塞避免收到新的报文段ACK收到3个重复ACK并快速重传快速恢复图4.3 快重传和快恢复的实例上图4.3在cwnd=12时收到了3个重复的ACK,发送方断定有分组丢失开始重传,进入快速恢复阶段,使ssthresh=cwnd/2=6,cwnd=ssthresh+3=9。再经过一次传输收到新报文段的确认ACK,将cwnd设置为cwnd=ssthresh,进入拥塞避免阶段。5 TCP拥塞控制算法TCP协议经过多年的发展,有了多种具体的实现。TCP从第一个实现到现在,不断得到改进。现有的TCP拥塞控制算法主要有Tahoe、Reno、New-Reno、SACK和Vegas。其中,Tahoe、Reno、New-Reno和SACK是基于AIMD(Additive Increase Multiplicative Decrease)机制来改变拥塞窗口cwnd的大小,而Vegas是通过观察以前TCP连接中RTT值的改变情况来控制cwnd的大小。5.1 TCP 的早期实现早期TCP使用简单的停止等待协议,每发送一个报文,都要等待确认后,才能顺序发送下一报文,因此效率很低,且在等待确认后,网络资源也不能得到充分的利用。另外,还必须等重传计时器超时,才能重新发送丢失的报文,对网络拥塞未采取有效的措施。5.2 TCP Tahoe1988年,Jacobsen改进了原来的TCP机制,提出了Tahoe算法。在早期实现的基础上,Tahoe加入了慢启动、拥塞避免和快速重传机制。对重发定时器的取值也进行了改进。并具有RTT估计和差错恢复的功能。Tahoe的基本思想是探测网络的可用带宽,在拥塞时急剧降低数据发送速率 (即:在丢失报文段重传之后,将cwnd的值降为1,将ssthresh置为cwnd/2后,重新进入慢启动阶段)。Tahoe算法存在着不足之处:在收到3个重复ACK或在超时的情况下,Tahoe置cwnd为1,然后进入慢启动阶段。这一方面会引起网络的激烈振荡,另一方面大大降低了网络的利用率。5.3 TCP Reno算法针对Tahoe算法的不足之处,1990年Jacobson在Tahoe的基础上提出了改进算法Reno。改进主要有两个方面:一是对于收到连续3个重复ACK,算法不经过慢启动,而直接进入拥塞避免阶段;二是增加了快速重传/快速恢复机制。具体实现过程为:1收到三个重复的ACK,进入快速重传/快速恢复,此时ssthresh设置为当前拥塞窗口的一半。2重传丢失的数据包,并置cwndcwndn (n为收到的重复ACK数)。3发送新的数据包。4当收到非重复的ACK时,cwndssthresh。5进入拥塞避免阶段。从上面的过程可以看出,Reno在收到3个重复ACK后,就转入快速重传/快速恢复阶段;而遇到超时时,Reno和Tahoe一样进入慢启动阶段。但是如果在一个发送窗口内有多个包丢失时,该算法不能有效恢复出来。5.4 TCP New-Reno1996年在Reno的基础上提出了New-Reno算法。对Reno的快速恢复机制进行了改进,以避免一个窗口内发生多个报文段丢失的情况下传输性能的下降。在Reno中,发送端只要收到对重传报文段的确认就结束快速恢复过程;New-Reno则是在收到对该窗口所有报文段确认之后才退出快速恢复过程,从而避免出现多个丢失造成的cwnd连续减小。因此,New-Reno比Reno能更好的保证网络的稳定性。New-Reno与Reno的不同仅在于步骤1(下面所述)中变量“recover”的引入,以及步骤5中收到部分或新的确认ACK后的处理方式。New-Reno中定义了一个“快速恢复过程”,其快速重传和快速恢复机制可以概括为如下五步:1当TCP发送端收到第三个重复的ACK并且发送端还没有处于快速恢复阶段时,用下式设置ssthresh的值。然后用变量“recover”记录此时传送的最大序列号。2 TCP发送端重传丢失的报文段并设置cwnd的值为:cwnd=ssthresh+3MSS。这将人为的按已经离开网络的报文段数目和接收端已经缓冲的数据量来扩充拥塞窗口。3对每次接收到的额外的重复ACK,将cwnd增大MSS字节。这将人为的扩充拥塞窗口以反映其它已经离开网络的报文段。4如果cwnd和接收端的通告窗口的值允许的话,TCP发送端发送下一个报文段。5当下一个确认新报文段的ACK到达时(此ACK可能是由步骤2中的重传引发的确认,或者是稍后的一次重传引起的):如果这个ACK确认了直到并包含序列号为“recover”的报文段,那么这个ACK确认了TCP发送端在丢失报文段的第一次传送和第三个重复ACK接收之间发送的所有报文段。TCP发送方可以设置cwnd的值为:此处ssthresh是步骤1中的值(步骤l中的发送窗口是TCP进入快速恢复阶段时的值:而步骤5中的发送窗口是TCP退出快速恢复阶段时的值)。如果这个ACK不是对所有并包含到序列号为“recover”报文段的确认,那么这个ACK就是一个部分确认。在这种情况下,TCP发送端并不退出快速恢复过程,而是立即重传部分确

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论