TCP 是可靠的传输层协议,当应用进程将数据交给TCP 后,TCP 就能无差错地交给目的端的应用进程。TCP 使用差错控制机制保证数据的可靠传输,主要的差错控制机制即确认和重传。每个TCP 连接传输数据的第一个字节序号是建立TCP 连接时初始序号加“1”。以字节为单位的滑动窗口TCP 通过滑动窗口机制实现传输的控制。......
2023-10-19
(1)拥塞控制的基本原理
当计算机网络中的某个或多个资源(如带宽、缓存、路由器、主机等)的需求超过了该资源供给的能力而导致整个网络性能下降的现象,称为拥塞。网络出现拥塞最典型的表现是数据包的丢失,即网络吞吐量的下降。网络吞吐量与输入负荷的关系曲线如图8.9所示。
图8.9 吞吐量、拥塞控制与输入负载
对于具有理想拥塞控制的网络,在吞吐量饱和之前,网络吞吐量与提供的输入负荷是成正比的,当输入负荷达到某一数值后,由于网络资源有限,吞吐量就不再增长而保持水平线,此时吞吐量达到饱和状态。
实际情况则不同,在没有拥塞控制的情况下,随着输入负荷的增加,网络吞吐量的增长率会逐渐减慢,也就是说,在吞吐量尚未达到饱和的状态,就已经有一部分分组丢失,网络进入轻度拥塞。当输入负荷达到一定数值时,吞吐量反而会随着输入负荷的增大而下降,网络进入拥塞状态。当输入负荷继续增大到某一个数值时,吞吐量就会下降为零,各个站点无法进行有效的通信,网络无法运行。
为了改善网络性能,实际上都要采取一定的拥塞控制措施,此时的输入负荷与吞吐量的关系曲线情况就介于理想状态和无拥塞控制状态之间。从造成网络拥塞的原因来看,表面上似乎是资源短缺,只要增大网络的某些可用资源,或者减少一些用户对某些资源的需求,就可以解决网络拥塞的问题,其实不然。因为网络拥塞涉及很多因素,不能单纯通过增加网络资源解决拥塞问题。例如,增加网络结点的缓存空间,虽然有利于存放该结点的分组数目,但输出链路和主机的处理速率并未提高,只能使分组在结点中的排队时间增加,不利于解决拥塞问题。可见,只有改善整个网络输入负荷与网络资源的匹配情况,使得各部分保持平衡,才能从根本上解决拥塞问题。
实施拥塞控制有两种机制:一种是开环拥塞控制,它是在拥塞发生之前采用一些策略,以免网络进入拥塞状态,属于“预防”机制;另一种是闭环拥塞控制,它试图在拥塞发生后使网络从拥塞状态中摆脱出来,属于“恢复”机制。无论哪种拥塞控制机制,都必须了解网络内部的流量分布状况,需要在结点间传送相应的命令和信息。拥塞控制有时还需要将一些资源分配给个别用户单独使用,从而造成资源的短缺。总之,拥塞控制本身需要额外的开销,要付出一定的代价。
在互联网中,尽管网络层也试图进行拥塞控制,但真正解决网络拥塞问题需要通过传输层TCP 协议来完成。实践证明,实现拥塞控制并不容易,它属于动态控制问题。在开环控制方法中,在设计网络时必须周密地考虑产生拥塞的各种因素。在闭环控制方法中,可通过检测系统发现拥塞、发送拥塞信息、调整运行状态等达到拥塞控制的目的。过于频繁地采取措施将使网络处于不稳定的震荡状态,迟缓地采取行动又不具有任何价值,因此,在实际的拥塞控制中,只能选择某种折中措施。
从控制理论的角度分析,互联网中的拥塞控制主要采用闭环控制方法。这种拥塞控制的基本思路可描述为:网络各结点采取动态控制措施控制传输速率,使在网络拥塞时各结点的数据传输速率降低,整个网络的吞吐量下降;经过一段时间的数据传输与处理后,在网络畅通时,各结点的数据传输速率升高,从而提高网络的利用率。确定系统是否发生拥塞及拥塞情况的方法,可通过监测在发送数据时丢失数据包的情况来确定。
下面介绍TCP 采用的一些拥塞控制方法。
(2)TCP 采用的拥塞控制方法
为了进行拥塞控制,TCP 为每条连接维持两个变量:一个是拥塞窗口(cwnd);另一个是慢启动阈值(ssthresh)。ssthresh 被用来确定是进入慢启动阶段还是进入拥塞避免阶段,一般将ssthresh 的初始值设置为通告窗口(又称为接收窗口或通知窗口)的值。
引入拥塞窗口cwnd 后,TCP 发送方的最大发送窗口修改为“允许发送方发送的最大数据量为当前拥塞窗口和通告窗口的极小值”。这样,TCP 的有关窗口变量修改为:
MaxWindow=MIN(cwnd,rwnd)
EffectiveWindow=MaxWindow-(LastByteSent-LastByteAcked)
也就是说,在有效窗口的计算中,用最大窗口代替了通告窗口。这样,TCP 发送方发送报文的速率就不会超过网络或目的结点可接收速率中的较小值。
TCP 拥塞控制主要根据网络拥塞状况调节拥塞窗口的大小。针对如何控制拥塞窗口值的大小以达到拥塞控制的问题,TCP 曾出现过多种版本。1999年公布的RFC2581 定义了四种拥塞控制算法:慢启动、拥塞避免、快重传和快恢复。后来,RFC2582 和RFC3390 又对这些算法进行了改进。拥塞控制可以使这四个机制共同作用,以达到更好的效果。
1)慢启动和拥塞避免
慢启动是指TCP 刚建立连接时将拥塞窗口cwnd 设为一个报文大小,然后以指数方式放大拥塞窗口cwnd,直到拥塞窗口cwnd 等于慢启动阈值ssthresh。
慢启动算法的具体步骤描述如下:
①TCP 将拥塞窗口cwnd 的值设为“1”,然后TCP 发送一个报文;(www.chuimin.cn)
②如果TCP 收到接收方的确认报文,则TCP 设置拥塞窗口cwnd 等于原来拥塞窗口cwnd的两倍,然后TCP 按照有效窗口的值发送报文。
③重复执行步骤②,直到拥塞窗口大于等于慢启动阈值ssthresh 或监测到网络产生拥塞为止。
④进入拥塞避免阶段。
在拥塞避免阶段,TCP 采用线性增加的方式放大拥塞窗口,即发送方每收到一个确认报文,就将拥塞窗口的值增加“1”,然后TCP 按照有效窗口的值发送报文,直到监测到网络产生拥塞为止。
无论是慢启动阶段还是拥塞避免阶段,如果发生超时重传(即网络可能产生拥塞),则拥塞窗口的值回到慢启动阶段,即将拥塞窗口的值设为“1”,而慢启动阈值ssthresh 减半,表明其按照指数规律减小,这就是所谓的乘倍减小。
慢启动和拥塞避免算法示意图如图8.10所示。
图8.10 慢启动和拥塞避免算法
图8.10 的曲线表明:使用慢启动在网络拥塞时动态调整拥塞窗口的大小时,只要网络出现一次超时(即出现一次网络拥塞),就把阈值ssthresh 减半。当网络出现频繁拥塞时,阈值ssthresh 就下降得很快,大大减少了输入网络的分组数,使得发生网络拥塞时拥塞窗口的值迅速减小,从而使拥塞的情况得以缓解。当执行拥塞避免算法后,收到对报文的确认就将拥塞窗口加“1”,以使拥塞窗口慢慢增大,达到防止网络过早出现拥塞的目的。
2)快重传和快恢复
当TCP 报文不能按序到达接收方TCP 时,接收方就会产生一个重传ACK 给发送方;发送方收到这个重传ACK 后,还不能确定是由于报文丢失还是报文失序所产生的重传请求。实质上,有时个别报文段在网络中丢失,但网络也并未发生拥塞。如果发送方迟迟收不到确认,就会产生超时,则会误认为网络发生了拥塞,从而导致发送方错误地启动慢启动,降低了传输效率。
快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是立即发送确认,即收到了失序的报文段要立即发出对已收到报文段的重复确认。这样,如果发送方连续收到三个重复ACK,则意味着某个个别的报文丢失了,但网络还没有发生拥塞。此时发送方不必等待该报文的超时,而是立即重传该报文,这样就不会出现超时,发送方也不会误认为网络出现拥塞,这就是快重传。快重传避免了出现个别报文段丢失后发送方必须等待超时后才重传丢失的报文,可以使整个网络的吞吐量提高约20%。
在快重传后,发送方不是进入慢启动阶段,而是进入拥塞避免阶段,这就是快恢复的含义。当发送方收到重传ACK 后,不仅意味着某个报文的丢失,还意味着在丢失报文后还能收到后面的报文。由于网络上仍然可以传送报文,发送方认为网络拥塞还不是很严重,如果这时进入慢启动阶段显得有些保守,应该进入拥塞避免阶段。
如图8.11 给出了拥塞避免、慢启动、快重传和快恢复这四种机制组合在一起进行拥塞控制的拥塞窗口变化情况。
图8.11 四种机制组合的拥塞控制算法
当TCP 连接进行初始化时,拥塞窗口cwnd 值置为“1”。为了便于理解,图8.11 中的窗口单位使用报文段个数。在图8.11 中,慢启动门限的初始值设为16。在执行慢启动算法时,发送方每收到一个对新报文段的确认后,就将拥塞窗口cwnd 值增加一倍,然后开始下一轮的传输。当拥塞窗口cwnd 值增长到慢开始门限值ssthress 时,就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
当拥塞窗口cwnd=24 时,网络出现了异常,发送方连续收到了三个重复ACK,则据此判断个别报文段丢失,按照快恢复算法,拥塞窗口cwnd 的值置为原来的1/2(即cwnd =12),并执行拥塞避免算法。若此时发送端产生了超时,则判断网络产生了拥塞。这种情况下,TCP 发送端将阈值ssthresh 减为产生拥塞时拥塞窗口cwnd 原值的一半(即ssthresh =12),同时设置拥塞窗口cwnd=1,进入慢启动阶段。
采用这样的拥塞控制方法使得TCP 的性能明显改进。
在拥塞控制的讨论中,假定的是接收方有足够大的缓存空间,因而发送窗口的大小由拥塞程度来决定。但实际上接收方的缓存空间总是有限的,接收方根据自己的接收能力设置接收窗口rwnd,并将这个窗口值写入TCP 首部中的窗口字段,传送给发送方。因此,结合流量控制,发送方的窗口上限值应当取接收窗口rwnd 和拥塞窗口cwnd 这两个变量中较小的一个。当rwnd <cwnd 时,接收方的接收能力限制发送窗口的最大值;反之,则是网络的拥塞程度限制发送窗口的值。
有关计算机网络技术的文章
TCP 是可靠的传输层协议,当应用进程将数据交给TCP 后,TCP 就能无差错地交给目的端的应用进程。TCP 使用差错控制机制保证数据的可靠传输,主要的差错控制机制即确认和重传。每个TCP 连接传输数据的第一个字节序号是建立TCP 连接时初始序号加“1”。以字节为单位的滑动窗口TCP 通过滑动窗口机制实现传输的控制。......
2023-10-19
1)流量控制机制该机制主要用于确保发送端发送的数据量不超过接收端的最大处理能力。TCP的流量控制具体通过滑动窗口算法来实现。地面网络常用TCP的拥塞控制机制主要包括TCP-Tahoe,TCP-Reno,TCP-SACT等。......
2023-07-02
直到1982年,TCP/IP协议的具体规范才被最终定下来,并于1984年或为互联网唯一指定的协议。与OSI参考模型不同,TCP/IP模型更侧重于互联设备间的数据传送,而不是严格的功能层次之分。因此,OSI参考模型在解释互联网络通信机制上比较合适,但TCP/IP成为互联网络协议的市场标准。通常所说的TCP/IP协议实际上包含了大量的协议和应用,由多个独立定义的协议组合在一起。因此,TCP/IP并不是指TCP和IP两个协议,而是表示Internet所使用的体系结构或整个协议簇。......
2023-10-22
TCP 连接的建立是从客户向服务器发送一个主动打开请求而启动的。当其中一方发送完数据后,就会关闭它这一方的连接,同时向对方发送撤销TCP 连接的报文。TCP 连接的建立使用了三次握手机制。实际上,TCP 要求建立连接的每一方随机地选择一个初始序号,这样可防止黑客容易猜测到初始序号而进行TCP 连接劫持攻击。收到一个FIN 只意味着这一方向上没有数据流动,一个TCP 连接在收到一个FIN 后仍然能够发送数据。......
2023-10-19
与TCP配合使用的网络层协议是IP,人们常常称这些相关协议为TCP/IP协议。虽然TCP和IP不是OSI标准,但已被公认为当前的工业标准,称为目前最流行的传输层协议。下面将TCP/IP和相应的OSI层次进行对比,如图3—31所示。图3—31TCP/IP和OSI层次对比对应于OSI的5~7层,相应的高层协议有:SMTP,简单邮件传输协议,关于电子邮件方面的。对应于OSI的第四层的协议有三个:TCP传输控制协议,是面向连接的协议,也是最主要的协议。......
2023-10-22
TCP是传输控制协议,它是TCP/IP协议簇中的一个重要协议。图2-9显示出了从发送方的高层协议通过TCP到达接收方的高层协议数据传输的完整过程。TCP允许两个应用程序建立一个连接,然后发送完数据并终止连接。总之,TCP协议使两台计算机上的程序通过互联网以类似于电话的方式进行通信成为可能。TCP将自动检测丢失的数据包,并且要求对方计算机在数据丢失时重发数据。......
2023-11-04
TCP/IP 模型各层的功能如下:网络接口层网络接口层是TCP/IP 模型的最底层,也被称为网络访问层,与OSI 模型的物理层及数据链路层对应。网际层网际层是TCP/IP 体系结构的关键,主要功能是处理来自传输层的分组,将分组形成数据包,并为该数据包进行路径选择,最终将数据包从源主机发送到目的主机。......
2023-10-19
TCP 报文共分为两部分:TCP 首部和TCP 数据,如图8.3所示。图8.3TCP 报文格式TCP 首部各字段的含义如下:源端口和目的端口这两个字段分别表示源端口和目的端口。因为TCP 是面向字节流的协议,所以报文段中的每个字节都有编号。URG:URG 标志位为“1”时,表示TCP 报文的数据段中包含紧急数据,紧急数据在TCP 报文数据段的位置由紧急指针字段给出。MSS 告诉对方TCP“我的缓存所能接收的报文段其数据字段的最大长度是MSS 个字节”。......
2023-10-19
相关推荐