TCP拥塞控制机制

我们知道TCP是拥有拥塞控制机制的,而UDP是没有的,为什么需要拥塞控制机制呢,就是防止丢包过多导致传输效率低下。网络中传输的包太多,路由器的缓存又不够,每一个发送端都以自己想要的发送速率发送包,自然会导致网络拥塞。所以我TCP就包括了拥塞控制机制。

有几种拥塞控制方法?

2种

1.端到端拥塞控制。网络层没有显示的告知传输层此时网络出现拥塞了,传输层通过报文段的丢失(超时或3次冗余确认得知)认为网络出现拥塞了,TCP会缩减其拥塞窗口,减小发送速率。

2.网络辅助的拥塞控制。网络层显示的告知发送端此时网络拥塞了,少发点。

  有两种告知方式:1.直接反馈信息可以由网络路由器发送给发送端,采用阻塞分组的形式。

  2.路由器标记或更新从发送端向接收方的分组中的某个字段来指示拥塞产生。一旦受到一个标记的分组后,接收方就会向发送方通知该网络阻塞指示。

TCP采用的是第一种方式,也就是端到端的拥塞控制。

端到端拥塞控制机制的实现?

首先明确下,发生端会通过设置一个拥塞窗口(congestion window   cwnd),有点像可靠性传输中的滑动窗口,维持窗口的大小,窗口越大代表你发送的速率越快,发送的字节越多。

其中有3种拥塞控制算法:慢启动( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快速恢复( fast recovery )。

1.慢启动

当新建TCP连接时,cwnd初始化设为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间(Round Trip Time,RTT)呈指数级增长,事实上,慢启动的速度一点也不慢,只是它的起点比较低一点而已。我们可以简单计算下:

开始           --->     cwnd = 1

经过1个RTT后   --->     cwnd = 2*1 = 2

经过2个RTT后   --->     cwnd = 2*2= 4

经过3个RTT后   --->     cwnd = 4*2 = 8

由此可见慢启动的增长速度很快,cwnd也会指数增长,那你会不会有疑问,那这种指数增长啥时候停止呢?

有3中情况会让慢启动停止:

1.TCP使用了一个叫慢启动阀门值(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。对于大多数TCP实现来说,ssthresh的值是65536(同样以字节计算)。

2.超时丢包事件发生。TCP发送方将cwnd设置为1,慢启动阀门值(ssthresh)设置为cwnd/2,并重新开始慢启动过程。

3.检测到3个冗余的ACK。这时TCP执行一种快速重传并进入快速恢复状态。

2.拥塞避免

一旦进入到拥塞避免,则说明cwnd目前的值里拥塞可能并不遥远了,你就不应该使用慢启动那种指数增长的方式扩展cwnd,此时用的是较为保守的方式,每个RTT只是将cwnd的值增加1个MSS。

那什么时候结束拥塞避免呢?

1.出现超时丢包。cwnd值被设置为1个MSS大小,慢启动阀门值(ssthresh)被设置为cwnd/2。

2.3个冗余的ACK。不改变发送速率。

3.快速恢复

1.当收到3个冗余的ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。 
2.再收到重复的ACK时,拥塞窗口增加1。 
3.当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。注意,如果在此过程出现超时,则重新进入慢启动阶段。

时间: 2024-11-07 16:32:33

TCP拥塞控制机制的相关文章

TCP拥塞控制

TCP必须使用端到端拥塞控制而不是使网络辅助的拥塞控制,因为IP层不向端系统提供显式的网络拥塞反馈.TCP采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率. TCP限制向其连接发送流量 TCP连接的每一端都是由一个接收缓存.一个发送缓存和几个变量组成.运行在发送方的TCP拥塞控制机制跟踪一个额外的变量,拥塞窗口(cwnd),它对一个TCP发送方能向网络中发送流量的速率进行了限制:在一个发送方中未被确认的数据量不会超过cwnd和rwnd中的最小值,即 LastBy

【网络协议】TCP的拥塞控制机制

前言 计算机网络中的带宽.交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这样的情况就叫做拥塞. 所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载.要注意用拥塞控制与流量控制的差别,拥塞控制是一个全局性的过程,涉及到全部的额主机.路由器,以及与减少网 拥塞控制的算法有:慢開始.拥塞避免.快重传.快恢复四种. 慢開始和拥塞避免 发送方维持一个拥塞窗体的状态变量,其大小取决于网络的拥

TCP拥塞控制ABC(Appropriate Byte Counting)的利弊说

TCP在慢启动阶段,每一个RTT拥塞窗口按指数级增长,TCP在拥塞避免阶段,每一个RTT拥塞窗口线性增加1.这些都是书上讲的,不必太认真,真实的情况要比这个复杂的多!        首先我们看大部分的资料里讲的TCP是怎么实现每RTT增窗的,一切都是扯理论,没什么现实意义!        在慢启动阶段,每收到一个ACK(数据包从发出到收到其ACK,就是一个RTT),窗口增加1,在拥塞避免阶段,每收到前一窗口整窗的ACK,窗口增加1,也就是说,每收到一个ACK,窗口增加1/cwnd!然而这都是理想

TCP拥塞控制 (1)

Basic: TCP,传输控制协议,是目前网络中应用最广泛的传输协议.SMTP.SSH.FTP.HTTP等因特网底层协议均是TCP. TCP面向连接,提供端到端的数据可靠传输.连接时三次握手,断开是四次挥手.具体表现为: 1.       TCP对传输的数据做了序号标记,其中序号标记安装字节数增长.TCP对端在接收到数据后发出一个ACK给对端(ACK中就包含序列号).TCP使用确认和超时重传机制保障了数据的可靠性传输. 2.       由于发送和接收端的数据处理能力不同,为了避免数据发送过快而

《网络协议》TCP 拥塞控制

TCP 拥塞控制主要有几种:慢启动.拥塞避免.快重传 以及 快恢复. 慢启动 为了防止网络拥塞,TCP 采用了一种慢启动算法,对发送数据量进行控制.为了调节发送端的数据发送量,引入了拥塞窗口,在慢启动时,将这个拥塞窗口设为 1 个报文段发送数据,之后每收到一次确认应答,拥塞窗口的值就加 1 个报文段.在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口大小进行比较,然后选择较小的值来控制数据量的发送.拥塞窗口是发送端使用的流量控制,而通告窗口则是接收端使用的流量控制. 慢启动算法步骤如下(cw

linux内核工程导论-网络:tcp拥塞控制

这篇文章本来是在tcp那篇里面的,但是那篇太长了,不专一.就完善了一下提取出来了. TCP拥塞控制 拥塞控制讨论的是很多个同时存在的tcp连接应该怎么规划自己的数据包发送和接收速度,以在彼此之间共享带宽,同时与其他实体的机器公平的竞争带宽,而不是自己全占. 拥塞控制的核心是AIMD(additive-increase/multiplicative-decrease ),线性增加乘性减少.为啥不用线性增加线性减少,或者是乘性增加乘性减少呢?这个有人专门研究过,只有AIMD可以收敛聚合使得链路公平.

TCP拥塞控制 2

解决传统TCP缺陷: 1.窗口太小,最大65535. TCP利用了选项功能,其头部存在预留项,用于扩展等用途.窗口扩大选项增加了额外的16位来表示窗口大小,窗口的值由首部的16位大小和选项的16位值共同组成. 不过不是用加法组成的,而是利用移位窗口值的幂来表示的,也就是说如果移位窗口值为 10,那么窗口的最大值就是65535*210,这个值就比较大了,足够表示窗口的大小了. 2.数据包丢失,即认定为网络出现了拥塞 在高速网络中,这种假设是不成立的.如果笼统地认为分组丢失就是拥塞所引起的,从而降低

TCP 拥塞控制

TCP 拥塞控制 相关名词 滑动窗口 tcp通过滑动窗口进行流量控制,所谓的窗口可以理解为接收端所能提供的缓冲区大小. TCP是一个滑动窗口协议,即一个TCP连接的发送端在某个时刻能发多少数据是由滑动窗口控制的 RTT(Round trip time) 表示从发送端到接收端的一去一回需要的时间. TCP在数据传输过程中会对RTT进行采样(即对发送的数据包及其ACK的时间差进行测量,并根据测量值更新RTT值) RTO (Retransmission TimeOut) 发送数据包,启动重传定时器,重

计算机网络概述 传输层 TCP拥塞控制

TCP拥塞控制 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载.拥塞控制是一个全局性的过程,和流量控制不同,流量控制指点对点通信量的控制. 拥塞控制 和 流量控制 的区别? 1. 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况: 2. 流量控制:流量